<?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>90597</bug_id>
          
          <creation_ts>2012-07-05 03:04:58 -0700</creation_ts>
          <short_desc>Web Inspector: [WebGL] Generic framework draft for tracking WebGL resources</short_desc>
          <delta_ts>2012-08-22 02:18: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 (Deprecated)</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrey Adaikin">aandrey</reporter>
          <assigned_to name="Andrey Adaikin">aandrey</assigned_to>
          <cc>apavlov</cc>
    
    <cc>benvanik</cc>
    
    <cc>bweinstein</cc>
    
    <cc>caseq</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>663436</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-05 03:04:58 -0700</bug_when>
    <thetext>The goal is to create a fairly generic framework for tracking a certain set of JS objects and their states (we will be interested in WebGL and 2D canvas). The framework should not dependent much on the Web Inspector code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663441</commentid>
    <comment_count>1</comment_count>
      <attachid>150911</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-05 03:10:06 -0700</bug_when>
    <thetext>Created attachment 150911
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676829</commentid>
    <comment_count>2</comment_count>
      <attachid>154066</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-24 08:10:17 -0700</bug_when>
    <thetext>Created attachment 154066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676832</commentid>
    <comment_count>3</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-24 08:14:16 -0700</bug_when>
    <thetext>An intermediate step with a lot of FIXME&apos;s to be addressed later.
What is working already: wrapping GL context and textures, capturing function calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677857</commentid>
    <comment_count>4</comment_count>
      <attachid>154066</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-25 03:11:19 -0700</bug_when>
    <thetext>Comment on attachment 154066
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Web Inspector: [WebGL] Generic framework draft for tracking WebGL resources

Could you please describe the change in greater detail?

&gt; Source/WebCore/inspector/InjectedScriptSource.js:420
&gt;      injectModule: function(name, source)

Here and below, could you please annotate this?

&gt; Source/WebCore/inspector/InjectedScriptSource.js:425
&gt; +        if (typeof moduleFunction !== &quot;function&quot;)
&gt; +            return &quot;A function was expected.&quot;;

Either throw or log error and return undefined?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:74
&gt; +        this._args = Array.prototype.slice.call(this._args, 0);

Any reasons not to do this in the constructor?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:117
&gt; +    this._calls = [];

How is this used?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:155
&gt; +        if (!this._resourceManager)
&gt; +            this._resourceManager = new ResourceTrackingManager();

So a resource may implicitly get a manager different from others?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:284
&gt; +                var customWrapFunction = WebGLRenderingContextResource.WrapFunction.prototype[property];

So we use fields of WrapFunction.prototype for custom wrapping of object functions, yet it appears to have properties like &apos;call&apos; or &apos;result&apos; -- don&apos;t they conflict?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:306
&gt; +            processProperty(property);

glContext.keys.forEach(processProperty)?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:423
&gt; +    replay: function()

Could you please drop the methods that are unused and/or have no effect? This would make the patch easier to review.

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:507
&gt; +            var name = object.constructor + &quot;&quot;;

use toString()?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:519
&gt; +        name = object + &quot;&quot;;

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677937</commentid>
    <comment_count>5</comment_count>
      <attachid>154066</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-25 05:00:46 -0700</bug_when>
    <thetext>Comment on attachment 154066
Patch

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

&gt;&gt; Source/WebCore/inspector/InjectedScriptSource.js:420
&gt;&gt;      injectModule: function(name, source)
&gt; 
&gt; Here and below, could you please annotate this?

none of the methods of this class are annotated, so it does not make sense to annotate any particular one. we should annotate all of them (in a separate bug/patch :))

&gt;&gt; Source/WebCore/inspector/InjectedScriptSource.js:425
&gt;&gt; +            return &quot;A function was expected.&quot;;
&gt; 
&gt; Either throw or log error and return undefined?

all other methods around would return a string on error, and none would throw an exception. let&apos;s be consistent.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:74
&gt;&gt; +        this._args = Array.prototype.slice.call(this._args, 0);
&gt; 
&gt; Any reasons not to do this in the constructor?

optimization. yes, it may be premature, but the idea is to interfere as less as possible with the inspected page. we could even call freeze() from the constructor, but we won&apos;t need to do it for *every* call we capture. and there are going to be many many calls in a WebGL app, so this optimization makes sense to me, as for now.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:117
&gt;&gt; +    this._calls = [];
&gt; 
&gt; How is this used?

these are the calls that contribute to the resource&apos;s state. they will be used in a replay.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:155
&gt;&gt; +            this._resourceManager = new ResourceTrackingManager();
&gt; 
&gt; So a resource may implicitly get a manager different from others?

generally, there will be only one manager for a WebGL app resources. this is to provide info whether we are capturing now or not, as well as a callback for collecting the trace log.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:284
&gt;&gt; +                var customWrapFunction = WebGLRenderingContextResource.WrapFunction.prototype[property];
&gt; 
&gt; So we use fields of WrapFunction.prototype for custom wrapping of object functions, yet it appears to have properties like &apos;call&apos; or &apos;result&apos; -- don&apos;t they conflict?

&quot;call&quot; constructs a Call object, &quot;result&quot; returns an original result object of the call invocation. are these confusing names or what do you mean?

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:306
&gt;&gt; +            processProperty(property);
&gt; 
&gt; glContext.keys.forEach(processProperty)?

there is no &quot;keys&quot; getter defined on the glContext

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:423
&gt;&gt; +    replay: function()
&gt; 
&gt; Could you please drop the methods that are unused and/or have no effect? This would make the patch easier to review.

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:507
&gt;&gt; +            var name = object.constructor + &quot;&quot;;
&gt; 
&gt; use toString()?

removed for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677963</commentid>
    <comment_count>6</comment_count>
      <attachid>154066</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-25 05:54:26 -0700</bug_when>
    <thetext>Comment on attachment 154066
Patch

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

&gt;&gt;&gt; Source/WebCore/inspector/InjectedScriptSource.js:420
&gt;&gt;&gt;      injectModule: function(name, source)
&gt;&gt; 
&gt;&gt; Here and below, could you please annotate this?
&gt; 
&gt; none of the methods of this class are annotated, so it does not make sense to annotate any particular one. we should annotate all of them (in a separate bug/patch :))

grep -A 3 &apos;/\*\*&apos; Source/WebCore/inspector/InjectedScriptSource.js

&gt;&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:284
&gt;&gt;&gt; +                var customWrapFunction = WebGLRenderingContextResource.WrapFunction.prototype[property];
&gt;&gt; 
&gt;&gt; So we use fields of WrapFunction.prototype for custom wrapping of object functions, yet it appears to have properties like &apos;call&apos; or &apos;result&apos; -- don&apos;t they conflict?
&gt; 
&gt; &quot;call&quot; constructs a Call object, &quot;result&quot; returns an original result object of the call invocation. are these confusing names or what do you mean?

My point is that you iterate through the properties of glContxt and check the name of its properties against WebGLRenderingContextResource.WrapFunction to see if custom wrap function is needed -- this seems a bit fragile, considering we have some internal properties there that are not intended to act as wrappers.

&gt;&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:306
&gt;&gt;&gt; +            processProperty(property);
&gt;&gt; 
&gt;&gt; glContext.keys.forEach(processProperty)?
&gt; 
&gt; there is no &quot;keys&quot; getter defined on the glContext

Duh, s/glContext.keys/Object.keys/, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677992</commentid>
    <comment_count>7</comment_count>
      <attachid>154066</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-25 06:49:18 -0700</bug_when>
    <thetext>Comment on attachment 154066
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/inspector/InjectedScriptSource.js:420
&gt;&gt;&gt;&gt;      injectModule: function(name, source)
&gt;&gt;&gt; 
&gt;&gt;&gt; Here and below, could you please annotate this?
&gt;&gt; 
&gt;&gt; none of the methods of this class are annotated, so it does not make sense to annotate any particular one. we should annotate all of them (in a separate bug/patch :))
&gt; 
&gt; grep -A 3 &apos;/\*\*&apos; Source/WebCore/inspector/InjectedScriptSource.js

done.

&gt;&gt;&gt; Source/WebCore/inspector/InjectedScriptSource.js:425
&gt;&gt;&gt; +            return &quot;A function was expected.&quot;;
&gt;&gt; 
&gt;&gt; Either throw or log error and return undefined?
&gt; 
&gt; all other methods around would return a string on error, and none would throw an exception. let&apos;s be consistent.

using console.error

&gt;&gt;&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:306
&gt;&gt;&gt;&gt; +            processProperty(property);
&gt;&gt;&gt; 
&gt;&gt;&gt; glContext.keys.forEach(processProperty)?
&gt;&gt; 
&gt;&gt; there is no &quot;keys&quot; getter defined on the glContext
&gt; 
&gt; Duh, s/glContext.keys/Object.keys/, of course.

Not quite what I need.
&gt;Object.keys Returns an array of all own enumerable properties found upon a given object, in the same order as that provided by a for-in loop (the difference being that a for-in loop enumerates properties in the prototype chain as well).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678009</commentid>
    <comment_count>8</comment_count>
      <attachid>154344</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-25 07:07:31 -0700</bug_when>
    <thetext>Created attachment 154344
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681838</commentid>
    <comment_count>9</comment_count>
      <attachid>155247</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-30 03:50:37 -0700</bug_when>
    <thetext>Created attachment 155247
less code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681938</commentid>
    <comment_count>10</comment_count>
      <attachid>155277</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-30 06:03:01 -0700</bug_when>
    <thetext>Created attachment 155277
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681971</commentid>
    <comment_count>11</comment_count>
      <attachid>155277</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-30 06:36:23 -0700</bug_when>
    <thetext>Comment on attachment 155277
Patch

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

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:75
&gt; +    freeze: function()
&gt; +    {
&gt; +        if (this._freezed)
&gt; +            return;
&gt; +        this._freezed = true;

This looks like a no-op -- can we nuke it for now?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:181
&gt; +            if (typeof glContext[property] === &apos;function&apos;) {

please use double quotes on strings

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:190
&gt; +            } else

else {
   ...
}

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:208
&gt;          proxy.__proto__ = glContext.__proto__;
&gt;          proxy.constructor = glContext.constructor;

Do we need to set constructor explicitly, given that we set __proto__?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:362
&gt; +    reportBeforeCall: function(resource, functionName, args)

captureArguments? Also, do we need functionName?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681997</commentid>
    <comment_count>12</comment_count>
      <attachid>155277</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-30 07:18:18 -0700</bug_when>
    <thetext>Comment on attachment 155277
Patch

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

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:75
&gt;&gt; +        this._freezed = true;
&gt; 
&gt; This looks like a no-op -- can we nuke it for now?

nuked

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:181
&gt;&gt; +            if (typeof glContext[property] === &apos;function&apos;) {
&gt; 
&gt; please use double quotes on strings

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:190
&gt;&gt; +            } else
&gt; 
&gt; else {
&gt;    ...
&gt; }

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:208
&gt;&gt;          proxy.constructor = glContext.constructor;
&gt; 
&gt; Do we need to set constructor explicitly, given that we set __proto__?

removed.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:362
&gt;&gt; +    reportBeforeCall: function(resource, functionName, args)
&gt; 
&gt; captureArguments? Also, do we need functionName?

renamed to captureArguments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681999</commentid>
    <comment_count>13</comment_count>
      <attachid>155286</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-07-30 07:19:42 -0700</bug_when>
    <thetext>Created attachment 155286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699319</commentid>
    <comment_count>14</comment_count>
      <attachid>159366</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-20 01:43:03 -0700</bug_when>
    <thetext>Created attachment 159366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699462</commentid>
    <comment_count>15</comment_count>
      <attachid>159366</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-20 06:47:20 -0700</bug_when>
    <thetext>Comment on attachment 159366
Patch

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

&gt; Source/WebCore/inspector/InjectedScriptSource.js:576
&gt; +            inspectedWindow.console.error(&quot;Web Inspector error: A function was expected for module %s evaluation&quot;, name);

We should not log into console. And this should never happen, right?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:39
&gt; +var Cache = function()

function Cache()
{
...

Please annotate and add compilation phase into the compile-front-end.py

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:45
&gt; +    get size()

Avoid getters for better compilability.
size: function()
{
...
}

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:71
&gt; +    }

This class looks like a Map from utilities.js a lot. Also, why not to use Object.create(null) and Object.keys().length for the size computation?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:75
&gt; + * @param {Array|Arguments} args

Please use alphabetical order for @ annotations. (@constructor goes first here)

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:78
&gt; +var Call = function(resource, functionName, args, result)

function Call ...

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:122
&gt; +    if (!obj || obj instanceof Resource)

When does this happen? (the instanceof Resource case)

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:143
&gt; +        this._wrappedObject = value;

Can we pass this in the constructor?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:160
&gt; +        this._resourceManager = value;

When is this called?

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:170
&gt; + * @extends {Resource}

swap lines

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:193
&gt; +        function processProperty(property) {

{ should go on the next line.

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:222
&gt; +        return function() {

{ on the next line

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:224
&gt; +            if (!manager || !manager.capturing)

When does it have no manager?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699534</commentid>
    <comment_count>16</comment_count>
      <attachid>159366</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-20 08:25:03 -0700</bug_when>
    <thetext>Comment on attachment 159366
Patch

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

&gt;&gt; Source/WebCore/inspector/InjectedScriptSource.js:576
&gt;&gt; +            inspectedWindow.console.error(&quot;Web Inspector error: A function was expected for module %s evaluation&quot;, name);
&gt; 
&gt; We should not log into console. And this should never happen, right?

Yes, should never happen. We already call &quot;inspectedWindow.console.error&quot; in another place from this file. Do you want me to remove it?

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:39
&gt;&gt; +var Cache = function()
&gt; 
&gt; function Cache()
&gt; {
&gt; ...
&gt; 
&gt; Please annotate and add compilation phase into the compile-front-end.py

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:45
&gt;&gt; +    get size()
&gt; 
&gt; Avoid getters for better compilability.
&gt; size: function()
&gt; {
&gt; ...
&gt; }

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:71
&gt;&gt; +    }
&gt; 
&gt; This class looks like a Map from utilities.js a lot. Also, why not to use Object.create(null) and Object.keys().length for the size computation?

we cannot use utilities.js here, I do use Object.create(null), Object.keys().length seems ineffective here.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:75
&gt;&gt; + * @param {Array|Arguments} args
&gt; 
&gt; Please use alphabetical order for @ annotations. (@constructor goes first here)

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:78
&gt;&gt; +var Call = function(resource, functionName, args, result)
&gt; 
&gt; function Call ...

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:122
&gt;&gt; +    if (!obj || obj instanceof Resource)
&gt; 
&gt; When does this happen? (the instanceof Resource case)

often, it&apos;s a legitimate case. although this case may not happen yet in this code.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:143
&gt;&gt; +        this._wrappedObject = value;
&gt; 
&gt; Can we pass this in the constructor?

later we will need this setter

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:160
&gt;&gt; +        this._resourceManager = value;
&gt; 
&gt; When is this called?

when a new WebGL resource is created that we should keep the record of

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:170
&gt;&gt; + * @extends {Resource}
&gt; 
&gt; swap lines

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:193
&gt;&gt; +        function processProperty(property) {
&gt; 
&gt; { should go on the next line.

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:222
&gt;&gt; +        return function() {
&gt; 
&gt; { on the next line

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:224
&gt;&gt; +            if (!manager || !manager.capturing)
&gt; 
&gt; When does it have no manager?

when we will be replaying, there should be no manager for the WebGL objects in the &quot;replay world&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699535</commentid>
    <comment_count>17</comment_count>
      <attachid>159434</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-20 08:27:24 -0700</bug_when>
    <thetext>Created attachment 159434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699596</commentid>
    <comment_count>18</comment_count>
      <attachid>159434</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-20 09:37:55 -0700</bug_when>
    <thetext>Comment on attachment 159434
Patch

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

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:164
&gt; +};

drop the ; from all over the place plz.

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:369
&gt; +    captureResource: function(resource)

Missing annotations.

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:374
&gt; +    addCall: function(call)

Missing annotations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699610</commentid>
    <comment_count>19</comment_count>
      <attachid>159434</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-20 09:53:40 -0700</bug_when>
    <thetext>Comment on attachment 159434
Patch

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

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:164
&gt;&gt; +};
&gt; 
&gt; drop the ; from all over the place plz.

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:369
&gt;&gt; +    captureResource: function(resource)
&gt; 
&gt; Missing annotations.

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:374
&gt;&gt; +    addCall: function(call)
&gt; 
&gt; Missing annotations.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699611</commentid>
    <comment_count>20</comment_count>
      <attachid>159457</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-20 09:54:31 -0700</bug_when>
    <thetext>Created attachment 159457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700649</commentid>
    <comment_count>21</comment_count>
      <attachid>159457</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-21 05:24:52 -0700</bug_when>
    <thetext>Comment on attachment 159457
Patch

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

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:138
&gt; +};

Remove ;

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:225
&gt; +};

Remove ;

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:307
&gt; +};

Remove ;

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:349
&gt; +};

Remove ;

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:486
&gt;  };

Remove ;

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:513
&gt; +};

Please remove ;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700689</commentid>
    <comment_count>22</comment_count>
      <attachid>159675</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-21 06:13:06 -0700</bug_when>
    <thetext>Created attachment 159675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701269</commentid>
    <comment_count>23</comment_count>
      <attachid>159675</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-21 16:24:39 -0700</bug_when>
    <thetext>Comment on attachment 159675
Patch

Rejecting attachment 159675 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
pector/InjectedScriptSource.js
Hunk #1 FAILED at 554.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebCore/inspector/InjectedScriptSource.js.rej
patching file Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js
patching file Source/WebCore/inspector/compile-front-end.py
Hunk #1 succeeded at 377 (offset -3 lines).

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Pavel Feld...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/13564041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701666</commentid>
    <comment_count>24</comment_count>
      <attachid>159878</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-22 01:25:10 -0700</bug_when>
    <thetext>Created attachment 159878
Rebased patch to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701704</commentid>
    <comment_count>25</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-22 02:18:55 -0700</bug_when>
    <thetext>Committed r126283: &lt;http://trac.webkit.org/changeset/126283&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150911</attachid>
            <date>2012-07-05 03:10:06 -0700</date>
            <delta_ts>2012-07-24 08:10:08 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-90597-20120705141005.patch</filename>
            <type>text/plain</type>
            <size>13014</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGIxMzRkYTBkMWY5ODQz
NDM3NWFhZjBkYWM2NDhlZmIxNjZjNWJmNC4uZDhiNjg3ZjFlMmNjNGIwNmVjN2Y1NmQ4MWVjMTc4
ZmQzOTY2YmU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qczoKKyAgICAgICAgKC4pOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvcldlYkdMQWdlbnQ6OmVuYWJsZWQpOgorCiAyMDEyLTA2LTI5
ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFJl
cGxhY2Ugdjg6OkludGVnZXI6Ok5ldygpIHdpdGggdjhJbnRlZ2VyKCkgaW4gYmluZGluZ3Mvdjgv
Ki57aCxjcHB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRT
b3VyY2UuanMKaW5kZXggNzllNjU2MmFlYzE2MjU3MGU4Y2MyMjM0MDIzZjI2M2RhMDE5YmExOC4u
YTRjOWFiNmQ5ZTBmMDQyYTYzODYyNmRhMzFiOGNhOGQ0ZDdhNWY2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwpAQCAtNDIwLDcgKzQy
MCwxMCBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgaW5qZWN0TW9kdWxlOiBm
dW5jdGlvbihuYW1lLCBzb3VyY2UpCiAgICAgewogICAgICAgICBkZWxldGUgdGhpcy5fbW9kdWxl
c1tuYW1lXTsKLSAgICAgICAgdmFyIG1vZHVsZSA9IGV2YWwoIigiICsgc291cmNlICsgIikiKTsK
KyAgICAgICAgdmFyIG1vZHVsZUZ1bmN0aW9uID0gZXZhbCgiKCIgKyBzb3VyY2UgKyAiKSIpOwor
ICAgICAgICBpZiAodHlwZW9mIG1vZHVsZUZ1bmN0aW9uICE9PSAiZnVuY3Rpb24iKQorICAgICAg
ICAgICAgcmV0dXJuICJBIGZ1bmN0aW9uIHdhcyBleHBlY3RlZC4iOworICAgICAgICB2YXIgbW9k
dWxlID0gbW9kdWxlRnVuY3Rpb24uY2FsbChpbnNwZWN0ZWRXaW5kb3csIEluamVjdGVkU2NyaXB0
SG9zdCwgaW5zcGVjdGVkV2luZG93LCBpbmplY3RlZFNjcmlwdElkKTsKICAgICAgICAgdGhpcy5f
bW9kdWxlc1tuYW1lXSA9IG1vZHVsZTsKICAgICAgICAgcmV0dXJuIG1vZHVsZTsKICAgICB9LApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xN
b2R1bGVTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcwppbmRleCA0NDg0YjY5OGM1ZmFmZWFjOGYwMmM0NDM4MzZmNTli
MDIxN2QwN2M3Li44ZTg5NjAwNzU4MWVkMzI4NWUzNzYxNjZkYjgxMmYzZGExZDQyNDNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZVNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcwpAQCAtMzYsNzIgKzM2LDI1OSBAQAogLyoqCiAgKiBAY29uc3Ry
dWN0b3IKICAqLwotdmFyIEluamVjdGVkU2NyaXB0ID0gZnVuY3Rpb24oKQordmFyIENhbGwgPSBm
dW5jdGlvbihvcmRpbmFsLCB0aGlzT2JqZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3MsIHJlc3VsdCkK
IHsKLSAgICB0aGlzLl9sYXN0Qm91bmRPYmplY3RJZCA9IDA7Ci0gICAgdGhpcy5faWRUb1dyYXBw
ZXJQcm94eSA9IHt9OwotICAgIHRoaXMuX2lkVG9SZWFsV2ViR0xDb250ZXh0ID0ge307Ci0gICAg
dGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID0gbnVsbDsKKyAgICB0aGlzLl9vcmRpbmFsID0gb3Jk
aW5hbDsKKyAgICB0aGlzLl90aGlzT2JqZWN0ID0gdGhpc09iamVjdDsKKyAgICB0aGlzLl9mdW5j
dGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7CisgICAgdGhp
cy5fcmVzdWx0ID0gcmVzdWx0OwogfQogCi1JbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7Ci0g
ICAgd3JhcFdlYkdMQ29udGV4dDogZnVuY3Rpb24oZ2xDb250ZXh0KQorQ2FsbC5wcm90b3R5cGUg
PSB7Cit9OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgUmVzb3VyY2UgPSBmdW5j
dGlvbih0eXBlLCB3cmFwcGVkT2JqZWN0KQoreworICAgIHRoaXMuX3R5cGUgPSB0eXBlOworICAg
IHRoaXMuX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OworfQorCitSZXNvdXJjZS5wcm90
b3R5cGUgPSB7CisgICAgZ2V0IHR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3R5
cGU7CisgICAgfSwKKworICAgIGdldCB3cmFwcGVkT2JqZWN0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl93cmFwcGVkT2JqZWN0OworICAgIH0sCisKKyAgICByZXBvcnRDYWxsOiBmdW5j
dGlvbihjYWxsKQorICAgIHsKKyAgICAgICAgLy8gSWdub3JlIGJ5IGRlZmF1bHQuCisvLyAgICAg
ICAgY29uc29sZS5sb2coIj09PT4gY2FsbCBvbiAiICsgdGhpcy5fdHlwZSArICI6ICIgKyBjYWxs
Ll9mdW5jdGlvbk5hbWUgKyAiKCIgKyBjYWxsLl9hcmdzLmpvaW4oIiwgIikgKyAiKSIpOworICAg
IH0KK307CisKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHR5cGUKKyAqIEBwYXJhbSB7RnVuY3Rp
b249fSByZXNvdXJjZUNsYXp6CisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFJlc291cmNlUHJv
dmlkZXIgPSBmdW5jdGlvbih0eXBlLCByZXNvdXJjZUNsYXp6KQoreworICAgIHRoaXMuX3R5cGUg
PSB0eXBlOworICAgIHRoaXMuX3Jlc291cmNlQ2xhenogPSByZXNvdXJjZUNsYXp6IHx8IFJlc291
cmNlOworfQorCitSZXNvdXJjZVByb3ZpZGVyLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgdHlwZSgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTsKKyAgICB9LAorCisgICAgY3JlYXRl
UmVzb3VyY2U6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgdGhp
cy5fcmVzb3VyY2VDbGF6eih0aGlzLl90eXBlLCBvYmplY3QpOworICAgIH0KK307CisKKy8qKgor
ICogQGNvbnN0cnVjdG9yCisgKi8KK3ZhciBSZXNvdXJjZVRyYWNraW5nTWFuYWdlciA9IGZ1bmN0
aW9uKCkKK3sKKyAgICB0aGlzLl9pbnRlcmNlcHRlZENhbGxzID0gMDsKKyAgICB0aGlzLl9pbnRl
cmNlcHRlZENhbGxDYWxsYmFja3MgPSBbXTsKKyAgICB0aGlzLl9yZWdpc3RlcmVkUmVzb3VyY2VQ
cm92aWRlcnMgPSB7fTsKK30KKworUmVzb3VyY2VUcmFja2luZ01hbmFnZXIucHJvdG90eXBlID0g
eworICAgIHJlZ2lzdGVyUmVzb3VyY2VQcm92aWRlcjogZnVuY3Rpb24ocmVzb3VyY2VQcm92aWRl
cikKKyAgICB7CisgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2VQcm92aWRlci50eXBlOworICAg
ICAgICB0aGlzLl9yZWdpc3RlcmVkUmVzb3VyY2VQcm92aWRlcnNbdHlwZV0gPSByZXNvdXJjZVBy
b3ZpZGVyOworICAgIH0sCisKKyAgICByZWdpc3RlckludGVyY2VwdGVkQ2FsbENhbGxiYWNrOiBm
dW5jdGlvbihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAg
ICAgIHRoaXMuX2ludGVyY2VwdGVkQ2FsbENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKKyAgICB9
LAorCisgICAgd3JhcE9iamVjdDogZnVuY3Rpb24ob2JqZWN0KQogICAgIHsKLSAgICAgICAgZm9y
ICh2YXIgaWQgaW4gdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQpIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzLl9pZFRvUmVhbFdlYkdMQ29udGV4dFtpZF0gPT09IGdsQ29udGV4dCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5faWRUb1dyYXBwZXJQcm94eVtpZF07CisgICAgICAgIGlmICgh
b2JqZWN0IHx8IHRoaXMuX3Jlc291cmNlT2JqZWN0KG9iamVjdCkpCisgICAgICAgICAgICByZXR1
cm4gb2JqZWN0OworCisgICAgICAgIHZhciBwcm94eSA9IHRoaXMuX3Byb3h5T2JqZWN0KG9iamVj
dCk7CisgICAgICAgIGlmIChwcm94eSkKKyAgICAgICAgICAgIHJldHVybiBwcm94eTsKKworICAg
ICAgICB2YXIgdHlwZSA9IHRoaXMucmVzb3VyY2VUeXBlKG9iamVjdCk7CisgICAgICAgIGlmICh0
eXBlIGluIHRoaXMuX3JlZ2lzdGVyZWRSZXNvdXJjZVByb3ZpZGVycykgeworICAgICAgICAgICAg
dmFyIHJlc291cmNlUHJvdmlkZXIgPSB0aGlzLl9yZWdpc3RlcmVkUmVzb3VyY2VQcm92aWRlcnNb
dHlwZV07CisgICAgICAgICAgICB2YXIgcmVzb3VyY2VPYmplY3QgPSByZXNvdXJjZVByb3ZpZGVy
LmNyZWF0ZVJlc291cmNlKG9iamVjdCk7CisgICAgICAgICAgICB2YXIgcHJveHkgPSB0aGlzLl9k
b1dyYXBPYmplY3QocmVzb3VyY2VPYmplY3QpOworICAgICAgICAgICAgcHJveHlbIl9fcmVzb3Vy
Y2VPYmplY3QiXSA9IHJlc291cmNlT2JqZWN0OworICAgICAgICAgICAgb2JqZWN0WyJfX3Byb3h5
T2JqZWN0Il0gPSBwcm94eTsKKyAgICAgICAgICAgIHJldHVybiBwcm94eTsKICAgICAgICAgfQog
CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfSwKKworICAgIF9yZXNvdXJjZU9iamVjdDog
ZnVuY3Rpb24ocHJveHkpCisgICAgeworICAgICAgICBpZiAocHJveHkgJiYgdHlwZW9mIHByb3h5
ID09PSAib2JqZWN0IikKKyAgICAgICAgICAgIHJldHVybiBwcm94eVsiX19yZXNvdXJjZU9iamVj
dCJdOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgX3Byb3h5T2JqZWN0OiBm
dW5jdGlvbihvYmplY3QpCisgICAgeworICAgICAgICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmpl
Y3QgPT09ICJvYmplY3QiKQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdFsiX19wcm94eU9iamVj
dCJdOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgcmVzb3VyY2VUeXBlOiBm
dW5jdGlvbihvYmplY3QpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIG5h
bWUgPSBvYmplY3QuY29uc3RydWN0b3IgKyAiIjsKKyAgICAgICAgfSBjYXRjaCAoZSkge30KKwor
ICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgICAgLy8g
ZnVuY3Rpb24gV2ViR0xUZXh0dXJlKCkgeyBbbmF0aXZlIGNvZGVdIH0KKyAgICAgICAgdmFyIHJl
c3VsdCA9IG5hbWUubWF0Y2goL15mdW5jdGlvbiAoW15cKF0qKVwoLyk7CisgICAgICAgIGlmIChy
ZXN1bHQgJiYgcmVzdWx0WzFdICYmIHJlc3VsdFsxXSAhPT0gIk9iamVjdCIpCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0WzFdOworCisgICAgICAgIC8vIFtvYmplY3QgQXJndW1lbnRzXQorICAg
ICAgICBuYW1lID0gb2JqZWN0ICsgIiI7CisgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1xb
b2JqZWN0ICguKylcXS8sICIkMSIpOworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9LAorCisg
ICAgX2RvV3JhcE9iamVjdDogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgeworICAgICAgICB2YXIg
b2JqZWN0ID0gcmVzb3VyY2Uud3JhcHBlZE9iamVjdDsKKyAgICAgICAgLy8gRklYTUU6IFVzZSBF
UzUgSGFybW9ueSBQcm94eSBBUEkgd2hlbiBpbXBsZW1lbnRlZC4KKyAgICAgICAgLy8gQnVnIGZv
ciBWODogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTU0Mwog
ICAgICAgICB2YXIgcHJveHkgPSB7fTsKICAgICAgICAgdmFyIG5hbWVQcm9jZXNzZWQgPSB7fTsK
ICAgICAgICAgbmFtZVByb2Nlc3NlZC5fX3Byb3RvX18gPSBudWxsOwogICAgICAgICBuYW1lUHJv
Y2Vzc2VkLmNvbnN0cnVjdG9yID0gdHJ1ZTsKIAorICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAg
ICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NOYW1lKG5hbWUpIHsKICAgICAgICAgICAgIGlmIChuYW1l
UHJvY2Vzc2VkW25hbWVdKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIG5h
bWVQcm9jZXNzZWRbbmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBnbENvbnRl
eHRbbmFtZV0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICAgICAgcHJveHlbbmFtZV0gPSBp
bmplY3RlZFNjcmlwdC5fd3JhcHBlZEZ1bmN0aW9uLmJpbmQoaW5qZWN0ZWRTY3JpcHQsIGdsQ29u
dGV4dCwgbmFtZSk7CisgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdFtuYW1lXSA9PT0gImZ1
bmN0aW9uIikKKyAgICAgICAgICAgICAgICBwcm94eVtuYW1lXSA9IHNlbGYuX3dyYXBwZWRGdW5j
dGlvbi5iaW5kKHNlbGYsIHJlc291cmNlLCBuYW1lKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIG5hbWUsIHsKICAgICAgICAg
ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbENvbnRleHRbbmFtZV07CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0W25hbWVdOwogICAgICAgICAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKQogICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbENvbnRleHRbbmFtZV0gPSB2YWx1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBm
b3IgKHZhciBvID0gZ2xDb250ZXh0OyBvOyBvID0gby5fX3Byb3RvX18pCisgICAgICAgIGZvciAo
dmFyIG8gPSBvYmplY3Q7IG87IG8gPSBvLl9fcHJvdG9fXykKICAgICAgICAgICAgIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLmZvckVhY2gocHJvY2Vzc05hbWUpOwogCiAgICAgICAgIC8v
IEluIG9yZGVyIHRvIGVtdWxhdGUgImluc3RhbmNlb2YiLgotICAgICAgICBwcm94eS5fX3Byb3Rv
X18gPSBnbENvbnRleHQuX19wcm90b19fOwotICAgICAgICBwcm94eS5jb25zdHJ1Y3RvciA9IGds
Q29udGV4dC5jb25zdHJ1Y3RvcjsKLQotICAgICAgICB2YXIgY29udGV4dElkID0gdGhpcy5fZ2Vu
ZXJhdGVPYmplY3RJZCgpOwotICAgICAgICB0aGlzLl9pZFRvV3JhcHBlclByb3h5W2NvbnRleHRJ
ZF0gPSBwcm94eTsKLSAgICAgICAgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbY29udGV4dElk
XSA9IGdsQ29udGV4dDsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0LndlYkdMQ29udGV4dENy
ZWF0ZWQoY29udGV4dElkKTsKKyAgICAgICAgcHJveHkuX19wcm90b19fID0gb2JqZWN0Ll9fcHJv
dG9fXzsKKyAgICAgICAgcHJveHkuY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7CiAK
ICAgICAgICAgcmV0dXJuIHByb3h5OwogICAgIH0sCiAKLSAgICBfZ2VuZXJhdGVPYmplY3RJZDog
ZnVuY3Rpb24oKQorICAgIF93cmFwcGVkRnVuY3Rpb246IGZ1bmN0aW9uKHJlc291cmNlLCBmdW5j
dGlvbk5hbWUpCiAgICAgewotICAgICAgICB2YXIgaWQgPSArK3RoaXMuX2xhc3RCb3VuZE9iamVj
dElkOwotICAgICAgICB2YXIgb2JqZWN0SWQgPSAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBp
bmplY3RlZFNjcmlwdElkICsgIixcIndlYkdMSWRcIjoiICsgaWQgKyAifSI7Ci0gICAgICAgIHJl
dHVybiBvYmplY3RJZDsKKyAgICAgICAgdmFyIG9iamVjdCA9IHJlc291cmNlLndyYXBwZWRPYmpl
Y3Q7CisgICAgICAgIHZhciBvcmRpbmFsID0gdGhpcy5faW50ZXJjZXB0ZWRDYWxscysrOworICAg
ICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7
CisKKyAgICAgICAgdmFyIHVud3JhcHBlZEFyZ3MgPSBhcmdzOworICAgICAgICB2YXIgcmVzb3Vy
Y2VzID0gW3Jlc291cmNlXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmdzLmxlbmd0
aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuX3Jlc291cmNlT2Jq
ZWN0KGFyZ3NbaV0pOworICAgICAgICAgICAgaWYgKHJlcykgeworICAgICAgICAgICAgICAgIGlm
IChyZXNvdXJjZXMuaW5kZXhPZihyZXMpICE9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcmVz
b3VyY2VzLnB1c2gocmVzKTsKKyAgICAgICAgICAgICAgICBpZiAodW53cmFwcGVkQXJncyA9PT0g
YXJncykKKyAgICAgICAgICAgICAgICAgICAgdW53cmFwcGVkQXJncyA9IGFyZ3Muc2xpY2UoMCk7
CisgICAgICAgICAgICAgICAgdW53cmFwcGVkQXJnc1tpXSA9IHJlcy53cmFwcGVkT2JqZWN0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdFtm
dW5jdGlvbk5hbWVdLmFwcGx5KG9iamVjdCwgdW53cmFwcGVkQXJncyk7CisgICAgICAgIHZhciB3
cmFwcGVkUmVzdWx0ID0gdGhpcy53cmFwT2JqZWN0KHJlc3VsdCk7CisKKyAgICAgICAgdmFyIGNh
bGwgPSBuZXcgQ2FsbChvcmRpbmFsLCByZXNvdXJjZSwgZnVuY3Rpb25OYW1lLCBhcmdzLCB3cmFw
cGVkUmVzdWx0KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSByZXNvdXJjZXMubGVuZ3Ro
OyBpIDwgbjsgKytpKQorICAgICAgICAgICAgcmVzb3VyY2VzW2ldLnJlcG9ydENhbGwoY2FsbCk7
CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGNhbGxiYWNrOyBjYWxsYmFjayA9IHRoaXMuX2lu
dGVyY2VwdGVkQ2FsbENhbGxiYWNrc1tpXTsgKytpKQorICAgICAgICAgICAgY2FsbGJhY2soY2Fs
bCk7CisKKyAgICAgICAgcmV0dXJuIHdyYXBwZWRSZXN1bHQ7CisgICAgfQorfTsKKworLyoqCisg
KiBAY29uc3RydWN0b3IKKyAqLwordmFyIEluamVjdGVkU2NyaXB0ID0gZnVuY3Rpb24oKQorewor
ICAgIHRoaXMuX21hbmFnZXIgPSBuZXcgUmVzb3VyY2VUcmFja2luZ01hbmFnZXIoKTsKKyAgICB0
aGlzLl9tYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2VQcm92aWRlcihuZXcgUmVzb3VyY2VQcm92aWRl
cigiV2ViR0xSZW5kZXJpbmdDb250ZXh0IikpOworICAgIHRoaXMuX21hbmFnZXIucmVnaXN0ZXJS
ZXNvdXJjZVByb3ZpZGVyKG5ldyBSZXNvdXJjZVByb3ZpZGVyKCJXZWJHTEJ1ZmZlciIpKTsKKyAg
ICB0aGlzLl9tYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2VQcm92aWRlcihuZXcgUmVzb3VyY2VQcm92
aWRlcigiV2ViR0xGcmFtZWJ1ZmZlciIpKTsKKyAgICB0aGlzLl9tYW5hZ2VyLnJlZ2lzdGVyUmVz
b3VyY2VQcm92aWRlcihuZXcgUmVzb3VyY2VQcm92aWRlcigiV2ViR0xQcm9ncmFtIikpOworICAg
IHRoaXMuX21hbmFnZXIucmVnaXN0ZXJSZXNvdXJjZVByb3ZpZGVyKG5ldyBSZXNvdXJjZVByb3Zp
ZGVyKCJXZWJHTFJlbmRlcmJ1ZmZlciIpKTsKKyAgICB0aGlzLl9tYW5hZ2VyLnJlZ2lzdGVyUmVz
b3VyY2VQcm92aWRlcihuZXcgUmVzb3VyY2VQcm92aWRlcigiV2ViR0xTaGFkZXIiKSk7CisgICAg
dGhpcy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNlUHJvdmlkZXIobmV3IFJlc291cmNlUHJvdmlk
ZXIoIldlYkdMVGV4dHVyZSIpKTsKKyAgICB0aGlzLl9tYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2VQ
cm92aWRlcihuZXcgUmVzb3VyY2VQcm92aWRlcigiV2ViR0xVbmlmb3JtTG9jYXRpb24iKSk7Cisg
ICAgdGhpcy5fbWFuYWdlci5yZWdpc3RlckludGVyY2VwdGVkQ2FsbENhbGxiYWNrKHRoaXMuX2lu
dGVyY2VwdGVkQ2FsbC5iaW5kKHRoaXMpKTsKKworICAgIHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5m
byA9IG51bGw7Cit9CisKK0luamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKKyAgICB3cmFwV2Vi
R0xDb250ZXh0OiBmdW5jdGlvbihnbENvbnRleHQpCisgICAgeworICAgICAgICB2YXIgcHJveHkg
PSB0aGlzLl9tYW5hZ2VyLndyYXBPYmplY3QoZ2xDb250ZXh0KTsKKworICAgICAgICAvLyBGSVhN
RTogRE8gTk9UIENPTU1JVCEgRk9SIERFQlVHR0lORyBQVVJQT1NFIQorICAgICAgICBwcm94eS5f
X2NhcHR1cmVGcmFtZSA9IHRoaXMuY2FwdHVyZUZyYW1lLmJpbmQodGhpcyk7CisgICAgICAgIHBy
b3h5Ll9fcmF3Z2wgPSBnbENvbnRleHQ7CisgICAgICAgIGluc3BlY3RlZFdpbmRvdy5JbmplY3Rl
ZFNjcmlwdCA9IHRoaXM7CisgICAgICAgIGluc3BlY3RlZFdpbmRvdy5JbmplY3RlZFNjcmlwdEhv
c3QgPSBJbmplY3RlZFNjcmlwdEhvc3Q7CisgICAgICAgIGluc3BlY3RlZFdpbmRvdy5JbmplY3Rl
ZFNjcmlwdElkID0gaW5qZWN0ZWRTY3JpcHRJZDsKKyAgICAgICAgaW5zcGVjdGVkV2luZG93Lmds
ID0gaW5zcGVjdGVkV2luZG93LmdsIHx8IHByb3h5OworICAgICAgICAvLyBFTkQgT0YgRklYTUUu
CisKKyAgICAgICAgcmV0dXJuIHByb3h5OwogICAgIH0sCiAKLSAgICBjYXB0dXJlRnJhbWU6IGZ1
bmN0aW9uKGNvbnRleHRJZCkKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mbyA9IHsKLSAgICAgICAgICAgIGNvbnRleHRJ
ZDogY29udGV4dElkLAogICAgICAgICAgICAgY2FwdHVyZWRDYWxsc051bTogMAogICAgICAgICB9
OwogICAgIH0sCkBAIC0xMTIsMjAgKzI5OSwyMSBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICB0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gPSBudWxsOwogICAgIH0s
CiAKLSAgICBfd3JhcHBlZEZ1bmN0aW9uOiBmdW5jdGlvbihnbENvbnRleHQsIGZ1bmN0aW9uTmFt
ZSkKKyAgICBfaW50ZXJjZXB0ZWRDYWxsOiBmdW5jdGlvbihjYWxsKQogICAgIHsKLSAgICAgICAg
Ly8gQ2FsbCByZWFsIFdlYkdMIGZ1bmN0aW9uLgotICAgICAgICB2YXIgYXJncyA9IEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAgICAgIHZhciByZXN1bHQgPSBn
bENvbnRleHRbZnVuY3Rpb25OYW1lXS5hcHBseShnbENvbnRleHQsIGFyZ3MpOwotCi0gICAgICAg
IGlmICh0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gJiYgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRl
eHRbdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvLmNvbnRleHRJZF0gPT09IGdsQ29udGV4dCkgewor
ICAgICAgICBpZiAodGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvKSB7CiAgICAgICAgICAgICB2YXIg
Y2FwdHVyZWRDYWxsc051bSA9ICsrdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvLmNhcHR1cmVkQ2Fs
bHNOdW07CiAgICAgICAgICAgICBpZiAoY2FwdHVyZWRDYWxsc051bSA9PT0gMSkKICAgICAgICAg
ICAgICAgICB0aGlzLl9zZXRaZXJvVGltZW91dHModGhpcy5fc3RvcENhcHR1cmluZy5iaW5kKHRo
aXMsIHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mbykpOwotICAgICAgICAgICAgSW5qZWN0ZWRTY3Jp
cHRIb3N0LndlYkdMUmVwb3J0RnVuY3Rpb25DYWxsKHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mby5j
b250ZXh0SWQsIGZ1bmN0aW9uTmFtZSwgIlsiICsgYXJncy5qb2luKCIsICIpICsgIl0iLCByZXN1
bHQgKyAiIik7Ci0gICAgICAgIH0KIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgLy8gRklYTUU6IERPIE5PVCBDT01NSVQhIEZPUiBERUJVR0dJTkcgUFVSUE9TRSEKKyAgICAg
ICAgICAgIHZhciBvcmRpbmFsID0gY2FsbC5fb3JkaW5hbDsKKyAgICAgICAgICAgIHZhciBmdW5j
dGlvbk5hbWUgPSBjYWxsLl9mdW5jdGlvbk5hbWU7CisgICAgICAgICAgICB2YXIgYXJncyA9IGNh
bGwuX2FyZ3M7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FsbC5fcmVzdWx0OworICAgICAg
ICAgICAgY29uc29sZS5sb2coIj09PT4gIiArIGNhcHR1cmVkQ2FsbHNOdW0gKyAiIENhcHR1cmVk
ICMiICsgb3JkaW5hbCArICI6ICIgKyBmdW5jdGlvbk5hbWUgKyAiKCIgKyBhcmdzLmpvaW4oIiwg
IikgKyAiKSA9PiAiICsgcmVzdWx0KTsKKyAgICAgICAgICAgIC8vIEVORCBPRiBGSVhNRS4KKyAg
ICAgICAgfQogICAgIH0sCiAKICAgICBfc2V0WmVyb1RpbWVvdXRzOiBmdW5jdGlvbihjYWxsYmFj
aykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV2ViR0xBZ2VudC5oCmlu
ZGV4IGE5MWU4YjkwNjc4YTMzMzYyZjIzM2ZhNmEzNmRkOTliNjJlMmI0ZmUuLmIwOTZiNjc0MjE5
YTFmNTRkOGY2NGY4Njk5MDE4MzcyZTA0ZDdkM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JXZWJHTEFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyRnJvbnRlbmQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9y
ZSgpOwogCi0gICAgYm9vbCBlbmFibGVkKCkgeyByZXR1cm4gbV9lbmFibGVkOyB9CisgICAgYm9v
bCBlbmFibGVkKCkgeyByZXR1cm4gdHJ1ZTsgLyptX2VuYWJsZWQ7Ki8gfQogCiAgICAgU2NyaXB0
T2JqZWN0IHdyYXBXZWJHTFJlbmRlcmluZ0NvbnRleHRGb3JJbnN0cnVtZW50YXRpb24oY29uc3Qg
U2NyaXB0T2JqZWN0Jik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154066</attachid>
            <date>2012-07-24 08:10:17 -0700</date>
            <delta_ts>2012-07-25 07:07:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90597-20120724191007.patch</filename>
            <type>text/plain</type>
            <size>19638</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGIxMzRkYTBkMWY5ODQz
NDM3NWFhZjBkYWM2NDhlZmIxNjZjNWJmNC4uZDhiNjg3ZjFlMmNjNGIwNmVjN2Y1NmQ4MWVjMTc4
ZmQzOTY2YmU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qczoKKyAgICAgICAgKC4pOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvcldlYkdMQWdlbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvcldlYkdMQWdlbnQ6OmVuYWJsZWQpOgorCiAyMDEyLTA2LTI5
ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFJl
cGxhY2Ugdjg6OkludGVnZXI6Ok5ldygpIHdpdGggdjhJbnRlZ2VyKCkgaW4gYmluZGluZ3Mvdjgv
Ki57aCxjcHB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRT
b3VyY2UuanMKaW5kZXggNzllNjU2MmFlYzE2MjU3MGU4Y2MyMjM0MDIzZjI2M2RhMDE5YmExOC4u
YTRjOWFiNmQ5ZTBmMDQyYTYzODYyNmRhMzFiOGNhOGQ0ZDdhNWY2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwpAQCAtNDIwLDcgKzQy
MCwxMCBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgaW5qZWN0TW9kdWxlOiBm
dW5jdGlvbihuYW1lLCBzb3VyY2UpCiAgICAgewogICAgICAgICBkZWxldGUgdGhpcy5fbW9kdWxl
c1tuYW1lXTsKLSAgICAgICAgdmFyIG1vZHVsZSA9IGV2YWwoIigiICsgc291cmNlICsgIikiKTsK
KyAgICAgICAgdmFyIG1vZHVsZUZ1bmN0aW9uID0gZXZhbCgiKCIgKyBzb3VyY2UgKyAiKSIpOwor
ICAgICAgICBpZiAodHlwZW9mIG1vZHVsZUZ1bmN0aW9uICE9PSAiZnVuY3Rpb24iKQorICAgICAg
ICAgICAgcmV0dXJuICJBIGZ1bmN0aW9uIHdhcyBleHBlY3RlZC4iOworICAgICAgICB2YXIgbW9k
dWxlID0gbW9kdWxlRnVuY3Rpb24uY2FsbChpbnNwZWN0ZWRXaW5kb3csIEluamVjdGVkU2NyaXB0
SG9zdCwgaW5zcGVjdGVkV2luZG93LCBpbmplY3RlZFNjcmlwdElkKTsKICAgICAgICAgdGhpcy5f
bW9kdWxlc1tuYW1lXSA9IG1vZHVsZTsKICAgICAgICAgcmV0dXJuIG1vZHVsZTsKICAgICB9LApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xN
b2R1bGVTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcwppbmRleCA0NDg0YjY5OGM1ZmFmZWFjOGYwMmM0NDM4MzZmNTli
MDIxN2QwN2M3Li4zMjUzNmJlMjA3NWMzZTZhN2Q3NDc3YTc0Mzc0MjM5YzY4MmE3NmRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZVNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcwpAQCAtMzQsOTggKzM0LDQ5MSBAQAogKGZ1bmN0aW9uIChJbmpl
Y3RlZFNjcmlwdEhvc3QsIGluc3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCkgewogCiAv
KioKKyAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBhcmdzCiAgKiBAY29uc3RydWN0b3IKICAq
LwotdmFyIEluamVjdGVkU2NyaXB0ID0gZnVuY3Rpb24oKQordmFyIENhbGwgPSBmdW5jdGlvbih0
aGlzT2JqZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3MsIHJlc3VsdCkKIHsKLSAgICB0aGlzLl9sYXN0
Qm91bmRPYmplY3RJZCA9IDA7Ci0gICAgdGhpcy5faWRUb1dyYXBwZXJQcm94eSA9IHt9OwotICAg
IHRoaXMuX2lkVG9SZWFsV2ViR0xDb250ZXh0ID0ge307Ci0gICAgdGhpcy5fY2FwdHVyaW5nRnJh
bWVJbmZvID0gbnVsbDsKKyAgICB0aGlzLl90aGlzT2JqZWN0ID0gdGhpc09iamVjdDsKKyAgICB0
aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7
CisgICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0OwogfQogCi1JbmplY3RlZFNjcmlwdC5wcm90b3R5
cGUgPSB7Ci0gICAgd3JhcFdlYkdMQ29udGV4dDogZnVuY3Rpb24oZ2xDb250ZXh0KQorQ2FsbC5w
cm90b3R5cGUgPSB7CisgICAgZ2V0IHRoaXNPYmplY3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3RoaXNPYmplY3Q7CisgICAgfSwKKworICAgIGdldCBmdW5jdGlvbk5hbWUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uTmFtZTsKKyAgICB9LAorCisgICAgZ2V0
IGFyZ3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FyZ3M7CisgICAgfSwKKworICAg
IGdldCByZXN1bHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKKyAgICB9
LAorCisgICAgZnJlZXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZnJl
ZXplZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fZnJlZXplZCA9IHRydWU7
CisgICAgICAgIHRoaXMuX2FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9h
cmdzLCAwKTsKKyAgICAgICAgLy8gRklYTUU6IGNsb25lIGFsbCBtdXRhYmxlIGFyZ3MgdG8gbWFr
ZSB0aGlzIENhbGwgaW1tdXRhYmxlLgorICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rpb24oY2Fj
aGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogQ2xvbmUgdGhpcyBjYWxsIHRvIGJlIHJlcGxh
eWFibGUgb24gdGhlIGNhY2hlZCByZXNvdXJjZXMuCisgICAgICAgIC8vIHZhciByZXN1bHQgPSBh
cmd1bWVudHNbMV0gfHwgT2JqZWN0LmNyZWF0ZShDYWxsLnByb3RvdHlwZSk7CisgICAgICAgIC8v
IHZhciB0aGlzT2JqZWN0ID0gUmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMuX3RoaXNPYmplY3QpLmNs
b25lKGNhY2hlKS53cmFwcGVkT2JqZWN0OworICAgICAgICByZXR1cm4gbmV3IENhbGwoKTsKKyAg
ICB9Cit9OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgUmVzb3VyY2VDYWNoZSA9
IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLl9yZXNvdXJjZXMgPSB7fTsKKyAgICB0aGlzLl9yZXNv
dXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VUcmFja2luZ01hbmFnZXIoKTsKK30KKworUmVzb3Vy
Y2VDYWNoZS5wcm90b3R5cGUgPSB7CisgICAgcmVzb3VyY2VCeUlkOiBmdW5jdGlvbihpZCkKICAg
ICB7Ci0gICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2lkVG9SZWFsV2ViR0xDb250ZXh0KSB7
Ci0gICAgICAgICAgICBpZiAodGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbaWRdID09PSBnbENv
bnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9XcmFwcGVyUHJveHlbaWRd
OworICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VzW2lkXTsKKyAgICB9LAorCisgICAgcHV0
UmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsKKyAgICAgICAgdmFyIGlkID0gcmVz
b3VyY2UuaWQ7CisgICAgICAgIHRoaXMuX3Jlc291cmNlc1tpZF0gPSByZXNvdXJjZTsKKyAgICAg
ICAgdGhpcy5fcmVzb3VyY2VNYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2UocmVzb3VyY2UpOworICAg
IH0KK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK3ZhciBSZXNvdXJjZSA9IGZ1bmN0
aW9uKHdyYXBwZWRPYmplY3QpCit7CisgICAgdGhpcy5faWQgPSArK1Jlc291cmNlLl91bmlxdWVJ
ZDsKKyAgICB0aGlzLl9yZXNvdXJjZU1hbmFnZXIgPSBudWxsOworICAgIHRoaXMuX2NhbGxzID0g
W107CisgICAgdGhpcy5fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7CisgICAgdGhpcy5f
YmluZE9iamVjdFRvUmVzb3VyY2Uod3JhcHBlZE9iamVjdCk7Cit9CisKK1Jlc291cmNlLl91bmlx
dWVJZCA9IDA7CisKK1Jlc291cmNlLmZvck9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCkKK3sKKyAg
ICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT09ICJvYmplY3QiKQorICAgICAgICByZXR1
cm4gb2JqZWN0WyJfX3Jlc291cmNlT2JqZWN0Il07CisgICAgcmV0dXJuIG51bGw7Cit9OworCitS
ZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgZ2V0IGlkKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9pZDsKKyAgICB9LAorCisgICAgZ2V0IHdyYXBwZWRPYmplY3QoKQorICAgIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl93cmFwcGVkT2JqZWN0KSB7CisgICAgICAgICAgICB0aGlzLl93cmFw
cGVkT2JqZWN0ID0gdGhpcy5fcmVwbGF5KCk7CisgICAgICAgICAgICB0aGlzLl9iaW5kT2JqZWN0
VG9SZXNvdXJjZSh0aGlzLl93cmFwcGVkT2JqZWN0KTsKICAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGhpcy5fd3JhcHBlZE9iamVjdDsKKyAgICB9LAorCisgICAgZ2V0IHByb3h5T2JqZWN0KCkK
KyAgICB7CisgICAgICAgIC8vIE5vIHByb3h5IHdyYXBwaW5nIGJ5IGRlZmF1bHQuCisgICAgICAg
IHJldHVybiB0aGlzLndyYXBwZWRPYmplY3Q7CisgICAgfSwKKworICAgIGdldCBtYW5hZ2VyKCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fcmVzb3VyY2VNYW5hZ2VyKQorICAgICAgICAgICAg
dGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0gbmV3IFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCk7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZU1hbmFnZXI7CisgICAgfSwKKworICAgIHNldCBt
YW5hZ2VyKHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0gdmFs
dWU7CisgICAgfSwKKworICAgIGNsb25lOiBmdW5jdGlvbihjYWNoZSkKKyAgICB7CisgICAgICAg
IHZhciBjYWNoZWQgPSBjYWNoZS5yZXNvdXJjZUJ5SWQodGhpcy5faWQpOworICAgICAgICBpZiAo
Y2FjaGVkKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IGFyZ3VtZW50c1sxXSB8fCBPYmplY3QuY3JlYXRlKFJlc291cmNlLnByb3RvdHlwZSk7CisgICAg
ICAgIHJlc3VsdC5faWQgPSB0aGlzLl9pZDsKKyAgICAgICAgcmVzdWx0Ll9yZXNvdXJjZU1hbmFn
ZXIgPSBudWxsOworICAgICAgICByZXN1bHQuX2NhbGxzID0gdGhpcy5fY2FsbHMuc2xpY2UoMCk7
CisgICAgICAgIHJlc3VsdC5fd3JhcHBlZE9iamVjdCA9IG51bGw7CisgICAgICAgIGNhY2hlLnB1
dFJlc291cmNlKHJlc3VsdCk7CisgICAgICAgIC8vIEZJWE1FOiBjbG9uZSBhbGwgcmVzb3VyY2Vz
IGluIHRoZSByZXN1bHQncyBjYWxscycgYXJndW1lbnRzLgorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0sCisKKyAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAg
IGNhbGwuZnJlZXplKCk7CisgICAgICAgIHRoaXMuX2NhbGxzLnB1c2goY2FsbCk7CisgICAgfSwK
KworICAgIF9yZXBsYXk6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBSZWNv
bnN0cnVjdCB0aGUgYWN0dWFsIHJlc291cmNlIGZyb20gdGhlIGxvZy4gTWF5IGJlIG92ZXJyaWRk
ZW4uCisgICAgfSwKKworICAgIF9iaW5kT2JqZWN0VG9SZXNvdXJjZTogZnVuY3Rpb24ob2JqZWN0
KQorICAgIHsKKyAgICAgICAgb2JqZWN0WyJfX3Jlc291cmNlT2JqZWN0Il0gPSB0aGlzOworICAg
IH0sCit9OworCisvKioKKyAqIEBleHRlbmRzIHtSZXNvdXJjZX0KKyAqIEBjb25zdHJ1Y3Rvcgor
ICovCit2YXIgV2ViR0xUZXh0dXJlUmVzb3VyY2UgPSBmdW5jdGlvbih0ZXh0dXJlKQoreworICAg
IFJlc291cmNlLmNhbGwodGhpcywgdGV4dHVyZSk7Cit9CisKK1dlYkdMVGV4dHVyZVJlc291cmNl
LnByb3RvdHlwZSA9IHsKKyAgICBjbG9uZTogZnVuY3Rpb24oY2FjaGUpCisgICAgeworICAgICAg
ICB2YXIgcmVzdWx0ID0gYXJndW1lbnRzWzFdIHx8IE9iamVjdC5jcmVhdGUoV2ViR0xUZXh0dXJl
UmVzb3VyY2UucHJvdG90eXBlKTsKKyAgICAgICAgcmVzdWx0ID0gUmVzb3VyY2UucHJvdG90eXBl
LmNsb25lLmNhbGwodGhpcywgY2FjaGUsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfSwKKworICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQorICAgIHsKKyAgICAgICAg
Ly8gRklYTUU6IHB1c2ggcGl4ZWxTdG9yZWkgY2FsbHMgb25seSBpZiBub3QgYWxyZWFkeSBpbiB0
aGUgbGlzdC4KKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBu
byBsb25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUuCisgICAgICAgIC8vIEZJ
WE1FOiBvcHRpbWl6ZSBtZW1vcnkgdXNhZ2U6IG1heWJlIGl0J3MgbW9yZSBlZmZpY2llbnQgdG8g
c3RvcmUgb25lIHRleEltYWdlMkQgY2FsbCBpbnN0ZWFkIG9mIG1hbnkgdGV4U3ViSW1hZ2UyRC4K
KyAgICAgICAgUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2FsbCk7Cisg
ICAgfSwKK307CisKK1dlYkdMVGV4dHVyZVJlc291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBS
ZXNvdXJjZS5wcm90b3R5cGU7CisKKy8qKgorICogQGV4dGVuZHMge1Jlc291cmNlfQorICogQGNv
bnN0cnVjdG9yCisgKi8KK3ZhciBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZSA9IGZ1bmN0
aW9uKGdsQ29udGV4dCwgZ2xDb250ZXh0QXR0cmlidXRlcykKK3sKKyAgICBSZXNvdXJjZS5jYWxs
KHRoaXMsIGdsQ29udGV4dCk7CisgICAgdGhpcy5fcHJveHlPYmplY3QgPSBudWxsOworfQorCitX
ZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHByb3h5
T2JqZWN0KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fcHJveHlPYmplY3QpCisgICAgICAg
ICAgICB0aGlzLl9wcm94eU9iamVjdCA9IHRoaXMuX3dyYXBPYmplY3QoKTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3Byb3h5T2JqZWN0OworICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rpb24oY2Fj
aGUpCisgICAgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJndW1lbnRzWzFdIHx8IE9iamVjdC5j
cmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UucHJvdG90eXBlKTsKKyAgICAgICAg
cmVzdWx0ID0gUmVzb3VyY2UucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcywgY2FjaGUsIHJlc3Vs
dCk7CisgICAgICAgIHJlc3VsdC5fcHJveHlPYmplY3QgPSBudWxsOworICAgICAgICAvLyBGSVhN
RTogVGFrZSBhIGZ1bGwgR0wgc3RhdGUgc25hcHNob3QgYW5kIGNsb25lIGl0LiBBbHNvIGNsb25l
IGFsbCByZXNvdXJjZXMgaW4gY3VycmVudCBiaW5kaW5ncy4KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9LAogCisgICAgY3VycmVudFRleHR1cmVCaW5kaW5nOiBmdW5jdGlvbih0YXJnZXQp
CisgICAgeworICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBwZWRPYmplY3Q7CisgICAgICAgIHZh
ciBiaW5kaW5nRW51bTsKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICAgICAgICAgIGNh
c2UgZ2wuVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICBiaW5kaW5nRW51bSA9IGdsLlRFWFRV
UkVfQklORElOR18yRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Z2wuVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YOgorICAgICAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6CisgICAgICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
KyAgICAgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAg
ICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICBj
YXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgICAgICBiaW5k
aW5nRW51bSA9IGdsLlRFWFRVUkVfQklORElOR19DVUJFX01BUDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
cigiV2ViR0wgSW5zdHJ1bWVudGF0aW9uOiBVbmtvd24gdGV4dHVyZSBiaW5kaW5nIHRhcmdldDog
IiArIHRhcmdldCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGdsdGV4dHVyZSA9IGdsLmdldFBhcmFtZXRlcihiaW5kaW5nRW51bSk7CisgICAgICAgIHJl
dHVybiBSZXNvdXJjZS5mb3JPYmplY3QoZ2x0ZXh0dXJlKTsKKyAgICB9LAorCisgICAgX3dyYXBP
YmplY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CiAgICAgICAgIHZhciBwcm94eSA9IHt9OwotICAgICAg
ICB2YXIgbmFtZVByb2Nlc3NlZCA9IHt9OwotICAgICAgICBuYW1lUHJvY2Vzc2VkLl9fcHJvdG9f
XyA9IG51bGw7Ci0gICAgICAgIG5hbWVQcm9jZXNzZWQuY29uc3RydWN0b3IgPSB0cnVlOwotCi0g
ICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NOYW1lKG5hbWUpIHsKLSAgICAgICAgICAgIGlmIChuYW1l
UHJvY2Vzc2VkW25hbWVdKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG5h
bWVQcm9jZXNzZWRbbmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBnbENvbnRl
eHRbbmFtZV0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICAgICAgcHJveHlbbmFtZV0gPSBp
bmplY3RlZFNjcmlwdC5fd3JhcHBlZEZ1bmN0aW9uLmJpbmQoaW5qZWN0ZWRTY3JpcHQsIGdsQ29u
dGV4dCwgbmFtZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHByb3h5LCBuYW1lLCB7CisgICAgICAgIHZhciBnbENvbnRleHQgPSB0aGlz
LndyYXBwZWRPYmplY3Q7CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBmdW5j
dGlvbiBwcm9jZXNzUHJvcGVydHkocHJvcGVydHkpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Yg
Z2xDb250ZXh0W3Byb3BlcnR5XSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgICAgIHZh
ciBjdXN0b21XcmFwRnVuY3Rpb24gPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5XcmFw
RnVuY3Rpb24ucHJvdG90eXBlW3Byb3BlcnR5XTsKKyAgICAgICAgICAgICAgICBpZiAoY3VzdG9t
V3JhcEZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICBwcm94eVtwcm9wZXJ0eV0gPSBzZWxm
Ll93cmFwQ3VzdG9tRnVuY3Rpb24oc2VsZi5tYW5hZ2VyLCBnbENvbnRleHQsIGdsQ29udGV4dFtw
cm9wZXJ0eV0sIHByb3BlcnR5LCBjdXN0b21XcmFwRnVuY3Rpb24pOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJveHlbcHJvcGVydHldID0gc2VsZi5fd3JhcEZ1
bmN0aW9uKHNlbGYubWFuYWdlciwgZ2xDb250ZXh0LCBnbENvbnRleHRbcHJvcGVydHldLCBwcm9w
ZXJ0eSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKC9eW0EtWjAtOV9dKyQvLnRlc3QocHJvcGVy
dHkpKSB7CisgICAgICAgICAgICAgICAgLy8gRmFzdCBhY2Nlc3MgdG8gZW51bXMgYW5kIGNvbnN0
YW50cy4KKyAgICAgICAgICAgICAgICBwcm94eVtwcm9wZXJ0eV0gPSBnbENvbnRleHRbcHJvcGVy
dHldOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KHByb3h5LCBwcm9wZXJ0eSwgewogICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsQ29udGV4dFtuYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbENv
bnRleHRbcHJvcGVydHldOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAg
ICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBnbENvbnRleHRbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdsQ29udGV4dFtwcm9wZXJ0eV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yICh2YXIg
byA9IGdsQ29udGV4dDsgbzsgbyA9IG8uX19wcm90b19fKQotICAgICAgICAgICAgT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMobykuZm9yRWFjaChwcm9jZXNzTmFtZSk7CisgICAgICAgIGZvciAo
dmFyIHByb3BlcnR5IGluIGdsQ29udGV4dCkKKyAgICAgICAgICAgIHByb2Nlc3NQcm9wZXJ0eShw
cm9wZXJ0eSk7CiAKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSAiaW5zdGFuY2VvZiIu
CiAgICAgICAgIHByb3h5Ll9fcHJvdG9fXyA9IGdsQ29udGV4dC5fX3Byb3RvX187CiAgICAgICAg
IHByb3h5LmNvbnN0cnVjdG9yID0gZ2xDb250ZXh0LmNvbnN0cnVjdG9yOwogCi0gICAgICAgIHZh
ciBjb250ZXh0SWQgPSB0aGlzLl9nZW5lcmF0ZU9iamVjdElkKCk7Ci0gICAgICAgIHRoaXMuX2lk
VG9XcmFwcGVyUHJveHlbY29udGV4dElkXSA9IHByb3h5OwotICAgICAgICB0aGlzLl9pZFRvUmVh
bFdlYkdMQ29udGV4dFtjb250ZXh0SWRdID0gZ2xDb250ZXh0OwotICAgICAgICBJbmplY3RlZFNj
cmlwdEhvc3Qud2ViR0xDb250ZXh0Q3JlYXRlZChjb250ZXh0SWQpOwotCiAgICAgICAgIHJldHVy
biBwcm94eTsKICAgICB9LAogCi0gICAgX2dlbmVyYXRlT2JqZWN0SWQ6IGZ1bmN0aW9uKCkKKyAg
ICBfd3JhcEN1c3RvbUZ1bmN0aW9uOiBmdW5jdGlvbihtYW5hZ2VyLCBvcmlnaW5hbE9iamVjdCwg
b3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rpb25OYW1lLCBjdXN0b21XcmFwRnVuY3Rpb24pCiAgICAg
ewotICAgICAgICB2YXIgaWQgPSArK3RoaXMuX2xhc3RCb3VuZE9iamVjdElkOwotICAgICAgICB2
YXIgb2JqZWN0SWQgPSAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElk
ICsgIixcIndlYkdMSWRcIjoiICsgaWQgKyAifSI7Ci0gICAgICAgIHJldHVybiBvYmplY3RJZDsK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRC
ZWZvcmVDYWxsKG9yaWdpbmFsT2JqZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cyk7CisgICAg
ICAgICAgICB2YXIgd3JhcEZ1bmN0aW9uID0gbmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291
cmNlLldyYXBGdW5jdGlvbihvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rp
b25OYW1lLCBhcmd1bWVudHMpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uLmFwcGx5
KHdyYXBGdW5jdGlvbiwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIG1hbmFnZXIucmVwb3J0Q2Fs
bCh3cmFwRnVuY3Rpb24uY2FsbCk7CisgICAgICAgICAgICByZXR1cm4gd3JhcEZ1bmN0aW9uLnJl
c3VsdDsKKyAgICAgICAgfTsKICAgICB9LAogCi0gICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbihj
b250ZXh0SWQpCisgICAgX3dyYXBGdW5jdGlvbjogZnVuY3Rpb24obWFuYWdlciwgb3JpZ2luYWxP
YmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSkKICAgICB7Ci0gICAgICAgIHRo
aXMuX2NhcHR1cmluZ0ZyYW1lSW5mbyA9IHsKLSAgICAgICAgICAgIGNvbnRleHRJZDogY29udGV4
dElkLAotICAgICAgICAgICAgY2FwdHVyZWRDYWxsc051bTogMAorICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIW1hbmFnZXIuY2FwdHVyaW5nKQorICAgICAgICAg
ICAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KG9yaWdpbmFsT2JqZWN0LCBhcmd1
bWVudHMpOworICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRCZWZvcmVDYWxsKG9yaWdpbmFsT2Jq
ZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0g
b3JpZ2luYWxGdW5jdGlvbi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIHZhciBjYWxsID0gbmV3IENhbGwob3JpZ2luYWxPYmplY3QsIGZ1bmN0aW9uTmFtZSwg
YXJndW1lbnRzLCByZXN1bHQpOworICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRDYWxsKGNhbGwp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfTsKKyAgICB9Cit9OworCitX
ZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gUmVzb3Vy
Y2UucHJvdG90eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCitXZWJHTFJlbmRlcmlu
Z0NvbnRleHRSZXNvdXJjZS5XcmFwRnVuY3Rpb24gPSBmdW5jdGlvbihvcmlnaW5hbE9iamVjdCwg
b3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rpb25OYW1lLCBhcmdzKQoreworICAgIHRoaXMuX29yaWdp
bmFsT2JqZWN0ID0gb3JpZ2luYWxPYmplY3Q7CisgICAgdGhpcy5fb3JpZ2luYWxGdW5jdGlvbiA9
IG9yaWdpbmFsRnVuY3Rpb247CisgICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1l
OworICAgIHRoaXMuX2FyZ3MgPSBhcmdzOworICAgIHRoaXMuX2dsUmVzb3VyY2UgPSBSZXNvdXJj
ZS5mb3JPYmplY3Qob3JpZ2luYWxPYmplY3QpOworfTsKKworV2ViR0xSZW5kZXJpbmdDb250ZXh0
UmVzb3VyY2UuV3JhcEZ1bmN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgcmVzdWx0KCkKKyAg
ICB7CisgICAgICAgIGlmICghdGhpcy5fZXhlY3V0ZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4
ZWN1dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX29yaWdpbmFs
RnVuY3Rpb24uYXBwbHkodGhpcy5fb3JpZ2luYWxPYmplY3QsIHRoaXMuX2FyZ3MpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7CiAgICAgfSwKIAotICAgIF9zdG9wQ2Fw
dHVyaW5nOiBmdW5jdGlvbihpbmZvKQorICAgIGdldCBjYWxsKCkKICAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gPT09IGluZm8pCi0gICAgICAgICAgICB0aGlzLl9j
YXB0dXJpbmdGcmFtZUluZm8gPSBudWxsOworICAgICAgICBpZiAoIXRoaXMuX2NhbGwpCisgICAg
ICAgICAgICB0aGlzLl9jYWxsID0gbmV3IENhbGwodGhpcy5fb3JpZ2luYWxPYmplY3QsIHRoaXMu
X2Z1bmN0aW9uTmFtZSwgdGhpcy5fYXJncywgdGhpcy5yZXN1bHQpOworICAgICAgICByZXR1cm4g
dGhpcy5fY2FsbDsKICAgICB9LAogCi0gICAgX3dyYXBwZWRGdW5jdGlvbjogZnVuY3Rpb24oZ2xD
b250ZXh0LCBmdW5jdGlvbk5hbWUpCisgICAgLy8gV2ViR0xUZXh0dXJlPyBjcmVhdGVUZXh0dXJl
KCkKKyAgICBjcmVhdGVUZXh0dXJlOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICAvLyBDYWxs
IHJlYWwgV2ViR0wgZnVuY3Rpb24uCi0gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBl
LnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IGdsQ29udGV4
dFtmdW5jdGlvbk5hbWVdLmFwcGx5KGdsQ29udGV4dCwgYXJncyk7CisgICAgICAgIHZhciB0ZXh0
dXJlID0gdGhpcy5yZXN1bHQ7CisgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgdGhp
cy5fZ2xSZXNvdXJjZS5tYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2UobmV3IFdlYkdMVGV4dHVyZVJl
c291cmNlKHRleHR1cmUpKTsKKyAgICB9LAogCi0gICAgICAgIGlmICh0aGlzLl9jYXB0dXJpbmdG
cmFtZUluZm8gJiYgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbdGhpcy5fY2FwdHVyaW5nRnJh
bWVJbmZvLmNvbnRleHRJZF0gPT09IGdsQ29udGV4dCkgewotICAgICAgICAgICAgdmFyIGNhcHR1
cmVkQ2FsbHNOdW0gPSArK3RoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mby5jYXB0dXJlZENhbGxzTnVt
OwotICAgICAgICAgICAgaWYgKGNhcHR1cmVkQ2FsbHNOdW0gPT09IDEpCi0gICAgICAgICAgICAg
ICAgdGhpcy5fc2V0WmVyb1RpbWVvdXRzKHRoaXMuX3N0b3BDYXB0dXJpbmcuYmluZCh0aGlzLCB0
aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8pKTsKLSAgICAgICAgICAgIEluamVjdGVkU2NyaXB0SG9z
dC53ZWJHTFJlcG9ydEZ1bmN0aW9uQ2FsbCh0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8uY29udGV4
dElkLCBmdW5jdGlvbk5hbWUsICJbIiArIGFyZ3Muam9pbigiLCAiKSArICJdIiwgcmVzdWx0ICsg
IiIpOworICAgIC8vIHZvaWQgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xp
bnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBw
aXhlbHMpOworICAgIC8vIHZvaWQgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1h
Z2VEYXRhPyBwaXhlbHMpOworICAgIC8vIHZvaWQgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgSFRNTEltYWdlRWxlbWVudCBpbWFnZSk7IC8vIE1heSB0aHJvdyBET01FeGNlcHRpb24K
KyAgICAvLyB2b2lkIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNF
bGVtZW50IGNhbnZhcyk7IC8vIE1heSB0aHJvdyBET01FeGNlcHRpb24KKyAgICAvLyB2b2lkIHRl
eEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQgdmlkZW8pOyAv
LyBNYXkgdGhyb3cgRE9NRXhjZXB0aW9uCisgICAgdGV4SW1hZ2UyRDogZnVuY3Rpb24odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZhcl9hcmdzKQorICAgIHsKKyAgICAgICAgdmFyIHRl
eHR1cmUgPSB0aGlzLl9nbFJlc291cmNlLmN1cnJlbnRUZXh0dXJlQmluZGluZyh0YXJnZXQpOwor
ICAgICAgICBpZiAodGV4dHVyZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IHB1c2ggR0wgcGl4
ZWxTdG9yZSBzdGF0ZSBmaXJzdC4KKyAgICAgICAgICAgIHRleHR1cmUucHVzaENhbGwodGhpcy5j
YWxsKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIC8v
IEZJWE1FOiBvdmVycmlkZSBvdGhlciBHTCBjYWxscyBhZmZlY3RpbmcgcmVzb3VyY2VzIHN0YXRl
LgorfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFRyYWNlTG9nID0gZnVuY3Rp
b24oKQoreworICAgIHRoaXMuX2NhbGxzID0gW107CisgICAgdGhpcy5fcmVzb3VyY2VDYWNoZSA9
IG5ldyBSZXNvdXJjZUNhY2hlKCk7Cit9CisKK1RyYWNlTG9nLnByb3RvdHlwZSA9IHsKKyAgICBn
ZXQgbGVuZ3RoKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jYWxscy5sZW5ndGg7Cisg
ICAgfSwKKworICAgIGNhcHR1cmVSZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgewor
ICAgICAgICByZXNvdXJjZS5jbG9uZSh0aGlzLl9yZXNvdXJjZUNhY2hlKTsKKyAgICB9LAorCisg
ICAgYWRkQ2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIGNhbGwuZnJlZXplKCk7
CisgICAgICAgIHRoaXMuX2NhbGxzLnB1c2goY2FsbCk7CisgICAgICAgIC8vIEZJWE1FOiBJZiBj
YWxsJ3MgcmVzdWx0IGlzIGEgcmVzb3VyY2UsIGFkZCBpdCB0byBjYWNoZS4KKyAgICB9LAorCisg
ICAgcmVwbGF5OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9
IHRoaXMuX2NhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgdmFyIGNhbGwg
PSB0aGlzLl9jYWxsc1tpXTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBcHBseSBjYWxscyBvbnRv
IGNhY2hlZCByZXNvdXJjZXMuIElmIGNhbGwncyByZXN1bHQgaXMgYSByZXNvdXJjZSwgYmluZCB0
aGUgcmVwbGF5ZWQgY2FsbCdzIHJlc3VsdCB0byB0aGUgY2FjaGVkIHJlc291cmNlLgorICAgICAg
ICB9CisgICAgfQorfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFJlc291cmNl
VHJhY2tpbmdNYW5hZ2VyID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX2NhcHR1cmluZyA9IGZh
bHNlOworICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAgdGhp
cy5fdHJhY2VMb2cgPSBudWxsOworfQorCitSZXNvdXJjZVRyYWNraW5nTWFuYWdlci5wcm90b3R5
cGUgPSB7CisgICAgZ2V0IGNhcHR1cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
Y2FwdHVyaW5nOworICAgIH0sCisKKyAgICBnZXQgdHJhY2VMb2coKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3RyYWNlTG9nOworICAgIH0sCisKKyAgICByZWdpc3RlclJlc291cmNlOiBm
dW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJlc291cmNlLm1hbmFnZXIgPSB0aGlz
OworICAgIH0sCisKKyAgICBzdGFydENhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcpCisgICAgICAgICAgICB0aGlzLl90cmFjZUxvZyA9IG5l
dyBUcmFjZUxvZygpOworICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICB0
aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOworICAgIH0sCisKKyAgICBzdG9w
Q2FwdHVyaW5nOiBmdW5jdGlvbih0cmFjZUxvZykKKyAgICB7CisgICAgICAgIGlmICh0cmFjZUxv
ZyAmJiB0aGlzLl90cmFjZUxvZyAhPT0gdHJhY2VMb2cpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVy
aW5nT25GcmFtZUVuZCA9IGZhbHNlOworICAgIH0sCisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3RyYWNlTG9nID0gbmV3IFRyYWNlTG9nKCk7Cisg
ICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IHRydWU7CisgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJp
bmdPbkZyYW1lRW5kID0gdHJ1ZTsKKyAgICB9LAorCisgICAgcmVwb3J0QmVmb3JlQ2FsbDogZnVu
Y3Rpb24odGhpc09iamVjdCwgZnVuY3Rpb25OYW1lLCBhcmdzKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9jYXB0dXJpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0aGlz
T2JqZWN0IGluc3RhbmNlb2YgUmVzb3VyY2UpCisgICAgICAgICAgICB0aGlzLl90cmFjZUxvZy5j
YXB0dXJlUmVzb3VyY2UodGhpc09iamVjdCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0g
YXJncy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhcmdzW2ldIGluc3Rh
bmNlb2YgUmVzb3VyY2UpCisgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2cuY2FwdHVyZVJl
c291cmNlKGFyZ3NbaV0pOworICAgICAgICB9CisgICAgfSwKKworICAgIHJlcG9ydENhbGw6IGZ1
bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fdHJhY2VMb2cuYWRkQ2FsbChjYWxsKTsKKyAg
ICAgICAgaWYgKHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kICYmIHRoaXMuX3RyYWNlTG9n
Lmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVF
bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX3NldFplcm9UaW1lb3V0cyh0aGlzLnN0b3BD
YXB0dXJpbmcuYmluZCh0aGlzLCB0aGlzLl90cmFjZUxvZykpOworICAgICAgICB9CisgICAgfSwK
KworICAgIHJlc291cmNlVHlwZTogZnVuY3Rpb24ob2JqZWN0KQorICAgIHsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIHZhciBuYW1lID0gb2JqZWN0LmNvbnN0cnVjdG9yICsgIiI7CisgICAg
ICAgIH0gY2F0Y2ggKGUpIHt9CisKKyAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgcmV0
dXJuICIiOworCisgICAgICAgIC8vIGZ1bmN0aW9uIFdlYkdMVGV4dHVyZSgpIHsgW25hdGl2ZSBj
b2RlXSB9CisgICAgICAgIHZhciByZXN1bHQgPSBuYW1lLm1hdGNoKC9eZnVuY3Rpb24gKFteXChd
KilcKC8pOworICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdFsxXSAmJiByZXN1bHRbMV0gIT09
ICJPYmplY3QiKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTsKKworICAgICAgICAvLyBb
b2JqZWN0IEFyZ3VtZW50c10KKyAgICAgICAgbmFtZSA9IG9iamVjdCArICIiOworICAgICAgICBu
YW1lID0gbmFtZS5yZXBsYWNlKC9cW29iamVjdCAoLispXF0vLCAiJDEiKTsKKyAgICAgICAgcmV0
dXJuIG5hbWU7CiAgICAgfSwKIAogICAgIF9zZXRaZXJvVGltZW91dHM6IGZ1bmN0aW9uKGNhbGxi
YWNrKQpAQCAtMTM5LDYgKzUzMiwyOSBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAg
ICAgfQogfTsKIAorLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIEluamVjdGVkU2NyaXB0
ID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX21hbmFnZXIgPSBuZXcgUmVzb3VyY2VUcmFja2lu
Z01hbmFnZXIoKTsKK30KKworSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0geworICAgIHdyYXBX
ZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkKKyAgICB7CisgICAgICAgIHZhciByZXNv
dXJjZSA9IFJlc291cmNlLmZvck9iamVjdChnbENvbnRleHQpIHx8IG5ldyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQpOworICAgICAgICB0aGlzLl9tYW5hZ2VyLnJlZ2lz
dGVyUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICB2YXIgcHJveHkgPSByZXNvdXJjZS5wcm94
eU9iamVjdDsKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICBjYXB0dXJlRnJh
bWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX21hbmFnZXIuY2FwdHVyZUZyYW1l
KCk7CisgICAgfQorfTsKKwogdmFyIGluamVjdGVkU2NyaXB0ID0gbmV3IEluamVjdGVkU2NyaXB0
KCk7CiByZXR1cm4gaW5qZWN0ZWRTY3JpcHQ7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154344</attachid>
            <date>2012-07-25 07:07:31 -0700</date>
            <delta_ts>2012-07-30 03:50:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90597-20120725180721.patch</filename>
            <type>text/plain</type>
            <size>18105</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI2NzNlMWRkYzdmOTYy
YWZkNmU3ZmZlZmRiNTIyMDg2MmIzYTYwOS4uYjBiNmQyYzdjNTNiNWE5MzExMzRlNWI4NmY1ZTU3
YjRlN2JhNWJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
cmFwIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMgYW5kIGNvbGxlY3QgYSB0cmFjZSBs
b2cgaWYgd2UgYXJlIGluIGNhcHR1cmluZyBtb2RlLgorICAgICAgICBTdHViYmVkIGNvZGUgZm9y
IGNvbGxlY3RpbmcgY2FsbHMgY29udHJpYnV0aW5nIHRvIGEgV2ViR0wgcmVzb3VyY2Ugc3RhdGUg
c28gdGhhdCB3ZSBjb3VsZCByZXBsYXkgdGhlbSBsYXRlci4KKworICAgICAgICBUeXBpY2FsIHNj
ZW5hcmlvOgorICAgICAgICAtIHdlIHdyYXAgYSBHTCBjb250ZXh0IHdpdGggSW5qZWN0ZWRTY3Jp
cHQud3JhcFdlYkdMQ29udGV4dCgpIGFuZCByZXR1cm4gYSBwcm94eSB0byB0aGUgaW5zcGVjdGVk
IHBhZ2UKKyAgICAgICAgLSB0aGUgcHJveHkgc2F2ZXMgYWxsIGNhbGxzIG5lY2Vzc2FyeSB0byBk
byBhIHJlcGxheSBsYXRlciAtIG9ubHkgdGhvc2UgdGhhdCBtb2RpZnkgYSByZXNvdXJjZSdzIHN0
YXRlCisgICAgICAgIC0gd2hlbiB3ZSB0dXJuIG9uIGNhcHR1cmluZyBtb2RlIChJbmplY3RlZFNj
cmlwdC5jYXB0dXJlRnJhbWUpLCB3ZSBzYXZlIGFsbCBXZWJHTCBjYWxscyB0byBhIHRyYWNlIGxv
ZworCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wNy0yNCAgRG9taW5payBSw7Z0dHNjaGVzICA8
ZG9taW5pay5yb3R0c2NoZXNAaW50ZWwuY29tPgogCiAgICAgICAgIEhhcmZCdXp6RmFjZU5HLmgg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMgY29uZmxpY3Qgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBIYXJm
YnV6egpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
U291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNl
LmpzCmluZGV4IDc5ZTY1NjJhZWMxNjI1NzBlOGNjMjIzNDAyM2YyNjNkYTAxOWJhMTguLjI1MjJl
OGNkZjkzY2VhYWNhMGU5N2MxNWExYTE5ZjFhZjJiOWQ5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTQxMiwxNSArNDEyLDI5
IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG9iamVjdDsK
ICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAgKiBA
cmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAgIG1vZHVsZTogZnVuY3Rpb24obmFtZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGVzW25hbWVdOwogICAgIH0sCi0gCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBzb3VyY2UKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAgIGluamVjdE1v
ZHVsZTogZnVuY3Rpb24obmFtZSwgc291cmNlKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMu
X21vZHVsZXNbbmFtZV07Ci0gICAgICAgIHZhciBtb2R1bGUgPSBldmFsKCIoIiArIHNvdXJjZSAr
ICIpIik7CisgICAgICAgIHZhciBtb2R1bGVGdW5jdGlvbiA9IGV2YWwoIigiICsgc291cmNlICsg
IikiKTsKKyAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGVGdW5jdGlvbiAhPT0gImZ1bmN0aW9uIikg
eworICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93LmNvbnNvbGUuZXJyb3IoIldlYiBJbnNwZWN0
b3IgZXJyb3I6IEEgZnVuY3Rpb24gd2FzIGV4cGVjdGVkIGZvciBtb2R1bGUgJXMgZXZhbHVhdGlv
biIsIG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIG1vZHVsZSA9IG1vZHVsZUZ1bmN0aW9uLmNhbGwoaW5zcGVjdGVkV2luZG93LCBJbmplY3Rl
ZFNjcmlwdEhvc3QsIGluc3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCk7CiAgICAgICAg
IHRoaXMuX21vZHVsZXNbbmFtZV0gPSBtb2R1bGU7CiAgICAgICAgIHJldHVybiBtb2R1bGU7CiAg
ICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlU291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKaW5kZXggNDQ4NGI2OThjNWZhZmVhYzhmMDJjNDQz
ODM2ZjU5YjAyMTdkMDdjNy4uZTgwYWRlMmYyMjFkZWMzY2I5ZmM5NjRkNjFmNmUzYzU4MmIxNTg5
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2Vi
R0xNb2R1bGVTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKQEAgLTM0LDk4ICszNCw0MTkgQEAKIChmdW5jdGlv
biAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQp
IHsKIAogLyoqCisgKiBAcGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncwogICogQGNvbnN0cnVj
dG9yCiAgKi8KLXZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKK3ZhciBDYWxsID0gZnVu
Y3Rpb24odGhpc09iamVjdCwgZnVuY3Rpb25OYW1lLCBhcmdzLCByZXN1bHQpCiB7Ci0gICAgdGhp
cy5fbGFzdEJvdW5kT2JqZWN0SWQgPSAwOwotICAgIHRoaXMuX2lkVG9XcmFwcGVyUHJveHkgPSB7
fTsKLSAgICB0aGlzLl9pZFRvUmVhbFdlYkdMQ29udGV4dCA9IHt9OwotICAgIHRoaXMuX2NhcHR1
cmluZ0ZyYW1lSW5mbyA9IG51bGw7CisgICAgdGhpcy5fdGhpc09iamVjdCA9IHRoaXNPYmplY3Q7
CisgICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMuX2FyZ3Mg
PSBhcmdzOworICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsKIH0KIAotSW5qZWN0ZWRTY3JpcHQu
cHJvdG90eXBlID0gewotICAgIHdyYXBXZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkK
K0NhbGwucHJvdG90eXBlID0geworICAgIGdldCB0aGlzT2JqZWN0KCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl90aGlzT2JqZWN0OworICAgIH0sCisKKyAgICBnZXQgZnVuY3Rpb25OYW1l
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbk5hbWU7CisgICAgfSwKKwor
ICAgIGdldCBhcmdzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9hcmdzOworICAgIH0s
CisKKyAgICBnZXQgcmVzdWx0KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7
CisgICAgfSwKKworICAgIGZyZWV6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuX2ZyZWV6ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2ZyZWV6ZWQg
PSB0cnVlOworICAgICAgICB0aGlzLl9hcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo
dGhpcy5fYXJncywgMCk7CisgICAgICAgIC8vIEZJWE1FOiBjbG9uZSBhbGwgbXV0YWJsZSBhcmdz
IHRvIG1ha2UgdGhpcyBDYWxsIGltbXV0YWJsZS4KKyAgICB9Cit9OworCisvKioKKyAqIEBjb25z
dHJ1Y3RvcgorICovCit2YXIgUmVzb3VyY2VDYWNoZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlz
Ll9yZXNvdXJjZXMgPSB7fTsKKyAgICB0aGlzLl9yZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3Vy
Y2VUcmFja2luZ01hbmFnZXIoKTsKK30KKworUmVzb3VyY2VDYWNoZS5wcm90b3R5cGUgPSB7Cisg
ICAgcmVzb3VyY2VCeUlkOiBmdW5jdGlvbihpZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9yZXNvdXJjZXNbaWRdOworICAgIH0sCisKKyAgICBwdXRSZXNvdXJjZTogZnVuY3Rpb24ocmVz
b3VyY2UpCisgICAgeworICAgICAgICB2YXIgaWQgPSByZXNvdXJjZS5pZDsKKyAgICAgICAgdGhp
cy5fcmVzb3VyY2VzW2lkXSA9IHJlc291cmNlOworICAgICAgICB0aGlzLl9yZXNvdXJjZU1hbmFn
ZXIucmVnaXN0ZXJSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfQorfTsKKworLyoqCisgKiBAY29u
c3RydWN0b3IKKyAqLwordmFyIFJlc291cmNlID0gZnVuY3Rpb24od3JhcHBlZE9iamVjdCkKK3sK
KyAgICB0aGlzLl9pZCA9ICsrUmVzb3VyY2UuX3VuaXF1ZUlkOworICAgIHRoaXMuX3Jlc291cmNl
TWFuYWdlciA9IG51bGw7CisgICAgdGhpcy5fY2FsbHMgPSBbXTsKKyAgICB0aGlzLl93cmFwcGVk
T2JqZWN0ID0gd3JhcHBlZE9iamVjdDsKKyAgICB0aGlzLl9iaW5kT2JqZWN0VG9SZXNvdXJjZSh3
cmFwcGVkT2JqZWN0KTsKK30KKworUmVzb3VyY2UuX3VuaXF1ZUlkID0gMDsKKworUmVzb3VyY2Uu
Zm9yT2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0KQoreworICAgIGlmIChvYmplY3QgJiYgdHlwZW9m
IG9iamVjdCA9PT0gIm9iamVjdCIpCisgICAgICAgIHJldHVybiBvYmplY3RbIl9fcmVzb3VyY2VP
YmplY3QiXTsKKyAgICByZXR1cm4gbnVsbDsKK307CisKK1Jlc291cmNlLnByb3RvdHlwZSA9IHsK
KyAgICBnZXQgaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lkOworICAgIH0sCisK
KyAgICBnZXQgd3JhcHBlZE9iamVjdCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fd3Jh
cHBlZE9iamVjdDsKKyAgICB9LAorCisgICAgZ2V0IHByb3h5T2JqZWN0KCkKKyAgICB7CisgICAg
ICAgIC8vIE5vIHByb3h5IHdyYXBwaW5nIGJ5IGRlZmF1bHQuCisgICAgICAgIHJldHVybiB0aGlz
LndyYXBwZWRPYmplY3Q7CisgICAgfSwKKworICAgIGdldCBtYW5hZ2VyKCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fcmVzb3VyY2VNYW5hZ2VyKQorICAgICAgICAgICAgdGhpcy5fcmVzb3Vy
Y2VNYW5hZ2VyID0gbmV3IFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCk7CisgICAgICAgIHJldHVy
biB0aGlzLl9yZXNvdXJjZU1hbmFnZXI7CisgICAgfSwKKworICAgIHNldCBtYW5hZ2VyKHZhbHVl
KQogICAgIHsKLSAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5faWRUb1JlYWxXZWJHTENvbnRl
eHQpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9pZFRvUmVhbFdlYkdMQ29udGV4dFtpZF0gPT09
IGdsQ29udGV4dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faWRUb1dyYXBwZXJQcm94
eVtpZF07CisgICAgICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IHZhbHVlOworICAgIH0sCisK
KyAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIGNhbGwuZnJlZXpl
KCk7CisgICAgICAgIHRoaXMuX2NhbGxzLnB1c2goY2FsbCk7CisgICAgfSwKKworICAgIF9iaW5k
T2JqZWN0VG9SZXNvdXJjZTogZnVuY3Rpb24ob2JqZWN0KQorICAgIHsKKyAgICAgICAgb2JqZWN0
WyJfX3Jlc291cmNlT2JqZWN0Il0gPSB0aGlzOworICAgIH0sCit9OworCisvKioKKyAqIEBleHRl
bmRzIHtSZXNvdXJjZX0KKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgV2ViR0xUZXh0dXJlUmVz
b3VyY2UgPSBmdW5jdGlvbih0ZXh0dXJlKQoreworICAgIFJlc291cmNlLmNhbGwodGhpcywgdGV4
dHVyZSk7Cit9CisKK1dlYkdMVGV4dHVyZVJlc291cmNlLnByb3RvdHlwZSA9IHsKKyAgICBwdXNo
Q2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBwdXNoIHBpeGVs
U3RvcmVpIGNhbGxzIG9ubHkgaWYgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QuCisgICAgICAgIC8v
IEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNhbGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUg
dG8gdGhlIHJlc291cmNlIHN0YXRlLgorICAgICAgICAvLyBGSVhNRTogb3B0aW1pemUgbWVtb3J5
IHVzYWdlOiBtYXliZSBpdCdzIG1vcmUgZWZmaWNpZW50IHRvIHN0b3JlIG9uZSB0ZXhJbWFnZTJE
IGNhbGwgaW5zdGVhZCBvZiBtYW55IHRleFN1YkltYWdlMkQuCisgICAgICAgIFJlc291cmNlLnBy
b3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOworICAgIH0sCit9OworCitXZWJHTFRl
eHR1cmVSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gUmVzb3VyY2UucHJvdG90eXBlOwor
CisvKioKKyAqIEBleHRlbmRzIHtSZXNvdXJjZX0KKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIg
V2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UgPSBmdW5jdGlvbihnbENvbnRleHQsIGdsQ29u
dGV4dEF0dHJpYnV0ZXMpCit7CisgICAgUmVzb3VyY2UuY2FsbCh0aGlzLCBnbENvbnRleHQpOwor
ICAgIHRoaXMuX3Byb3h5T2JqZWN0ID0gbnVsbDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0
UmVzb3VyY2UucHJvdG90eXBlID0geworICAgIGdldCBwcm94eU9iamVjdCgpCisgICAgeworICAg
ICAgICBpZiAoIXRoaXMuX3Byb3h5T2JqZWN0KQorICAgICAgICAgICAgdGhpcy5fcHJveHlPYmpl
Y3QgPSB0aGlzLl93cmFwT2JqZWN0KCk7CisgICAgICAgIHJldHVybiB0aGlzLl9wcm94eU9iamVj
dDsKKyAgICB9LAorCisgICAgY3VycmVudFRleHR1cmVCaW5kaW5nOiBmdW5jdGlvbih0YXJnZXQp
CisgICAgeworICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBwZWRPYmplY3Q7CisgICAgICAgIHZh
ciBiaW5kaW5nRW51bTsKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICAgICAgICAgIGNh
c2UgZ2wuVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICBiaW5kaW5nRW51bSA9IGdsLlRFWFRV
UkVfQklORElOR18yRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Z2wuVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YOgorICAgICAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6CisgICAgICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
KyAgICAgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAg
ICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICBj
YXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgICAgICBiaW5k
aW5nRW51bSA9IGdsLlRFWFRVUkVfQklORElOR19DVUJFX01BUDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
cigiV2ViR0wgSW5zdHJ1bWVudGF0aW9uOiBVbmtvd24gdGV4dHVyZSBiaW5kaW5nIHRhcmdldDog
IiArIHRhcmdldCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAg
dmFyIGdsdGV4dHVyZSA9IGdsLmdldFBhcmFtZXRlcihiaW5kaW5nRW51bSk7CisgICAgICAgIHJl
dHVybiBSZXNvdXJjZS5mb3JPYmplY3QoZ2x0ZXh0dXJlKTsKKyAgICB9LAogCisgICAgX3dyYXBP
YmplY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CiAgICAgICAgIHZhciBwcm94eSA9IHt9OwotICAgICAg
ICB2YXIgbmFtZVByb2Nlc3NlZCA9IHt9OwotICAgICAgICBuYW1lUHJvY2Vzc2VkLl9fcHJvdG9f
XyA9IG51bGw7Ci0gICAgICAgIG5hbWVQcm9jZXNzZWQuY29uc3RydWN0b3IgPSB0cnVlOwotCi0g
ICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NOYW1lKG5hbWUpIHsKLSAgICAgICAgICAgIGlmIChuYW1l
UHJvY2Vzc2VkW25hbWVdKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG5h
bWVQcm9jZXNzZWRbbmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBnbENvbnRl
eHRbbmFtZV0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICAgICAgcHJveHlbbmFtZV0gPSBp
bmplY3RlZFNjcmlwdC5fd3JhcHBlZEZ1bmN0aW9uLmJpbmQoaW5qZWN0ZWRTY3JpcHQsIGdsQ29u
dGV4dCwgbmFtZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHByb3h5LCBuYW1lLCB7CisgICAgICAgIHZhciBnbENvbnRleHQgPSB0aGlz
LndyYXBwZWRPYmplY3Q7CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBmdW5j
dGlvbiBwcm9jZXNzUHJvcGVydHkocHJvcGVydHkpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Yg
Z2xDb250ZXh0W3Byb3BlcnR5XSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgICAgIHZh
ciBjdXN0b21XcmFwRnVuY3Rpb24gPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5XcmFw
RnVuY3Rpb25zW3Byb3BlcnR5XTsKKyAgICAgICAgICAgICAgICBpZiAoY3VzdG9tV3JhcEZ1bmN0
aW9uKQorICAgICAgICAgICAgICAgICAgICBwcm94eVtwcm9wZXJ0eV0gPSBzZWxmLl93cmFwQ3Vz
dG9tRnVuY3Rpb24oc2VsZi5tYW5hZ2VyLCBnbENvbnRleHQsIGdsQ29udGV4dFtwcm9wZXJ0eV0s
IHByb3BlcnR5LCBjdXN0b21XcmFwRnVuY3Rpb24pOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgcHJveHlbcHJvcGVydHldID0gc2VsZi5fd3JhcEZ1bmN0aW9uKHNl
bGYubWFuYWdlciwgZ2xDb250ZXh0LCBnbENvbnRleHRbcHJvcGVydHldLCBwcm9wZXJ0eSk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKC9eW0EtWjAtOV9dKyQvLnRlc3QocHJvcGVydHkpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gRmFzdCBhY2Nlc3MgdG8gZW51bXMgYW5kIGNvbnN0YW50cy4KKyAg
ICAgICAgICAgICAgICBwcm94eVtwcm9wZXJ0eV0gPSBnbENvbnRleHRbcHJvcGVydHldOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBy
b3h5LCBwcm9wZXJ0eSwgewogICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkKICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsQ29u
dGV4dFtuYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbENvbnRleHRbcHJv
cGVydHldOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBzZXQ6
IGZ1bmN0aW9uKHZhbHVlKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBnbENvbnRleHRbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdsQ29udGV4dFtwcm9wZXJ0eV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yICh2YXIgbyA9IGdsQ29u
dGV4dDsgbzsgbyA9IG8uX19wcm90b19fKQotICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3Bl
cnR5TmFtZXMobykuZm9yRWFjaChwcm9jZXNzTmFtZSk7CisgICAgICAgIGZvciAodmFyIHByb3Bl
cnR5IGluIGdsQ29udGV4dCkKKyAgICAgICAgICAgIHByb2Nlc3NQcm9wZXJ0eShwcm9wZXJ0eSk7
CiAKICAgICAgICAgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSAiaW5zdGFuY2VvZiIuCiAgICAgICAg
IHByb3h5Ll9fcHJvdG9fXyA9IGdsQ29udGV4dC5fX3Byb3RvX187CiAgICAgICAgIHByb3h5LmNv
bnN0cnVjdG9yID0gZ2xDb250ZXh0LmNvbnN0cnVjdG9yOwogCi0gICAgICAgIHZhciBjb250ZXh0
SWQgPSB0aGlzLl9nZW5lcmF0ZU9iamVjdElkKCk7Ci0gICAgICAgIHRoaXMuX2lkVG9XcmFwcGVy
UHJveHlbY29udGV4dElkXSA9IHByb3h5OwotICAgICAgICB0aGlzLl9pZFRvUmVhbFdlYkdMQ29u
dGV4dFtjb250ZXh0SWRdID0gZ2xDb250ZXh0OwotICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3Qu
d2ViR0xDb250ZXh0Q3JlYXRlZChjb250ZXh0SWQpOwotCiAgICAgICAgIHJldHVybiBwcm94eTsK
ICAgICB9LAogCi0gICAgX2dlbmVyYXRlT2JqZWN0SWQ6IGZ1bmN0aW9uKCkKKyAgICBfd3JhcEN1
c3RvbUZ1bmN0aW9uOiBmdW5jdGlvbihtYW5hZ2VyLCBvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxG
dW5jdGlvbiwgZnVuY3Rpb25OYW1lLCBjdXN0b21XcmFwRnVuY3Rpb24pCiAgICAgewotICAgICAg
ICB2YXIgaWQgPSArK3RoaXMuX2xhc3RCb3VuZE9iamVjdElkOwotICAgICAgICB2YXIgb2JqZWN0
SWQgPSAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIixcIndl
YkdMSWRcIjoiICsgaWQgKyAifSI7Ci0gICAgICAgIHJldHVybiBvYmplY3RJZDsKKyAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRCZWZvcmVDYWxs
KG9yaWdpbmFsT2JqZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB2
YXIgd3JhcEZ1bmN0aW9uID0gbmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLldyYXBG
dW5jdGlvbihvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rpb25OYW1lLCBh
cmd1bWVudHMpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uLmFwcGx5KHdyYXBGdW5j
dGlvbiwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIG1hbmFnZXIucmVwb3J0Q2FsbCh3cmFwRnVu
Y3Rpb24uY2FsbCk7CisgICAgICAgICAgICByZXR1cm4gd3JhcEZ1bmN0aW9uLnJlc3VsdDsKKyAg
ICAgICAgfTsKICAgICB9LAogCi0gICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbihjb250ZXh0SWQp
CisgICAgX3dyYXBGdW5jdGlvbjogZnVuY3Rpb24obWFuYWdlciwgb3JpZ2luYWxPYmplY3QsIG9y
aWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSkKICAgICB7Ci0gICAgICAgIHRoaXMuX2NhcHR1
cmluZ0ZyYW1lSW5mbyA9IHsKLSAgICAgICAgICAgIGNvbnRleHRJZDogY29udGV4dElkLAotICAg
ICAgICAgICAgY2FwdHVyZWRDYWxsc051bTogMAorICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBpZiAoIW1hbmFnZXIuY2FwdHVyaW5nKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KG9yaWdpbmFsT2JqZWN0LCBhcmd1bWVudHMpOwor
ICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRCZWZvcmVDYWxsKG9yaWdpbmFsT2JqZWN0LCBmdW5j
dGlvbk5hbWUsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWxG
dW5jdGlvbi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHZh
ciBjYWxsID0gbmV3IENhbGwob3JpZ2luYWxPYmplY3QsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRz
LCByZXN1bHQpOworICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRDYWxsKGNhbGwpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfTsKKyAgICB9Cit9OworCitXZWJHTFJlbmRl
cmluZ0NvbnRleHRSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gUmVzb3VyY2UucHJvdG90
eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCitXZWJHTFJlbmRlcmluZ0NvbnRleHRS
ZXNvdXJjZS5XcmFwRnVuY3Rpb24gPSBmdW5jdGlvbihvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxG
dW5jdGlvbiwgZnVuY3Rpb25OYW1lLCBhcmdzKQoreworICAgIHRoaXMuX29yaWdpbmFsT2JqZWN0
ID0gb3JpZ2luYWxPYmplY3Q7CisgICAgdGhpcy5fb3JpZ2luYWxGdW5jdGlvbiA9IG9yaWdpbmFs
RnVuY3Rpb247CisgICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRo
aXMuX2FyZ3MgPSBhcmdzOworICAgIHRoaXMuX2dsUmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmpl
Y3Qob3JpZ2luYWxPYmplY3QpOworfTsKKworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Uu
V3JhcEZ1bmN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgcmVzdWx0KCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fZXhlY3V0ZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX29yaWdpbmFsRnVuY3Rpb24u
YXBwbHkodGhpcy5fb3JpZ2luYWxPYmplY3QsIHRoaXMuX2FyZ3MpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7CiAgICAgfSwKIAotICAgIF9zdG9wQ2FwdHVyaW5nOiBm
dW5jdGlvbihpbmZvKQorICAgIGdldCBjYWxsKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9j
YXB0dXJpbmdGcmFtZUluZm8gPT09IGluZm8pCi0gICAgICAgICAgICB0aGlzLl9jYXB0dXJpbmdG
cmFtZUluZm8gPSBudWxsOworICAgICAgICBpZiAoIXRoaXMuX2NhbGwpCisgICAgICAgICAgICB0
aGlzLl9jYWxsID0gbmV3IENhbGwodGhpcy5fb3JpZ2luYWxPYmplY3QsIHRoaXMuX2Z1bmN0aW9u
TmFtZSwgdGhpcy5fYXJncywgdGhpcy5yZXN1bHQpOworICAgICAgICByZXR1cm4gdGhpcy5fY2Fs
bDsKKyAgICB9Cit9OworCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5XcmFwRnVuY3Rp
b25zID0geworICAgIF9fcHJvdG9fXzogbnVsbCwKKworICAgIC8vIFdlYkdMVGV4dHVyZT8gY3Jl
YXRlVGV4dHVyZSgpCisgICAgY3JlYXRlVGV4dHVyZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdmFyIHRleHR1cmUgPSB0aGlzLnJlc3VsdDsKKyAgICAgICAgaWYgKHRleHR1cmUpCisgICAg
ICAgICAgICB0aGlzLl9nbFJlc291cmNlLm1hbmFnZXIucmVnaXN0ZXJSZXNvdXJjZShuZXcgV2Vi
R0xUZXh0dXJlUmVzb3VyY2UodGV4dHVyZSkpOwogICAgIH0sCiAKLSAgICBfd3JhcHBlZEZ1bmN0
aW9uOiBmdW5jdGlvbihnbENvbnRleHQsIGZ1bmN0aW9uTmFtZSkKKyAgICAvLyB2b2lkIHRleElt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKKyAgICAvLyB2b2lkIHRl
eEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKKyAgICAv
LyB2b2lkIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQg
aW1hZ2UpOyAvLyBNYXkgdGhyb3cgRE9NRXhjZXB0aW9uCisgICAgLy8gdm9pZCB0ZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCBjYW52YXMpOyAvLyBNYXkg
dGhyb3cgRE9NRXhjZXB0aW9uCisgICAgLy8gdm9pZCB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50IHZpZGVvKTsgLy8gTWF5IHRocm93IERPTUV4Y2VwdGlv
bgorICAgIHRleEltYWdlMkQ6IGZ1bmN0aW9uKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB2YXJfYXJncykKICAgICB7Ci0gICAgICAgIC8vIENhbGwgcmVhbCBXZWJHTCBmdW5jdGlvbi4K
LSAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs
IDIpOwotICAgICAgICB2YXIgcmVzdWx0ID0gZ2xDb250ZXh0W2Z1bmN0aW9uTmFtZV0uYXBwbHko
Z2xDb250ZXh0LCBhcmdzKTsKKyAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nbFJlc291cmNl
LmN1cnJlbnRUZXh0dXJlQmluZGluZyh0YXJnZXQpOworICAgICAgICBpZiAodGV4dHVyZSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IHB1c2ggR0wgcGl4ZWxTdG9yZSBzdGF0ZSBmaXJzdC4KKyAg
ICAgICAgICAgIHRleHR1cmUucHVzaENhbGwodGhpcy5jYWxsKTsKKyAgICAgICAgfQorICAgIH0K
IAotICAgICAgICBpZiAodGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvICYmIHRoaXMuX2lkVG9SZWFs
V2ViR0xDb250ZXh0W3RoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mby5jb250ZXh0SWRdID09PSBnbENv
bnRleHQpIHsKLSAgICAgICAgICAgIHZhciBjYXB0dXJlZENhbGxzTnVtID0gKyt0aGlzLl9jYXB0
dXJpbmdGcmFtZUluZm8uY2FwdHVyZWRDYWxsc051bTsKLSAgICAgICAgICAgIGlmIChjYXB0dXJl
ZENhbGxzTnVtID09PSAxKQotICAgICAgICAgICAgICAgIHRoaXMuX3NldFplcm9UaW1lb3V0cyh0
aGlzLl9zdG9wQ2FwdHVyaW5nLmJpbmQodGhpcywgdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvKSk7
Ci0gICAgICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3Qud2ViR0xSZXBvcnRGdW5jdGlvbkNhbGwo
dGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvLmNvbnRleHRJZCwgZnVuY3Rpb25OYW1lLCAiWyIgKyBh
cmdzLmpvaW4oIiwgIikgKyAiXSIsIHJlc3VsdCArICIiKTsKKyAgICAvLyBGSVhNRTogb3ZlcnJp
ZGUgb3RoZXIgR0wgY2FsbHMgYWZmZWN0aW5nIHJlc291cmNlcyBzdGF0ZS4KK307CisKKy8qKgor
ICogQGNvbnN0cnVjdG9yCisgKi8KK3ZhciBUcmFjZUxvZyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0
aGlzLl9jYWxscyA9IFtdOworICAgIHRoaXMuX3Jlc291cmNlQ2FjaGUgPSBuZXcgUmVzb3VyY2VD
YWNoZSgpOworfQorCitUcmFjZUxvZy5wcm90b3R5cGUgPSB7CisgICAgZ2V0IGxlbmd0aCgpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY2FsbHMubGVuZ3RoOworICAgIH0sCisKKyAgICBj
YXB0dXJlUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IENhcHR1cmUgY3VycmVudCByZXNvdXJjZSBzdGF0ZSB0byBzdGFydCB0aGUgcmVwbGF5IGZy
b20uCisgICAgfSwKKworICAgIGFkZENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAg
ICBjYWxsLmZyZWV6ZSgpOworICAgICAgICB0aGlzLl9jYWxscy5wdXNoKGNhbGwpOworICAgICAg
ICAvLyBGSVhNRTogSWYgY2FsbCdzIHJlc3VsdCBpcyBhIHJlc291cmNlLCBhZGQgaXQgdG8gY2Fj
aGUuCisgICAgfQorfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFJlc291cmNl
VHJhY2tpbmdNYW5hZ2VyID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX2NhcHR1cmluZyA9IGZh
bHNlOworICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAgdGhp
cy5fdHJhY2VMb2cgPSBudWxsOworfQorCitSZXNvdXJjZVRyYWNraW5nTWFuYWdlci5wcm90b3R5
cGUgPSB7CisgICAgZ2V0IGNhcHR1cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
Y2FwdHVyaW5nOworICAgIH0sCisKKyAgICBnZXQgdHJhY2VMb2coKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3RyYWNlTG9nOworICAgIH0sCisKKyAgICByZWdpc3RlclJlc291cmNlOiBm
dW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJlc291cmNlLm1hbmFnZXIgPSB0aGlz
OworICAgIH0sCisKKyAgICBzdGFydENhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcpCisgICAgICAgICAgICB0aGlzLl90cmFjZUxvZyA9IG5l
dyBUcmFjZUxvZygpOworICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICB0
aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOworICAgIH0sCisKKyAgICBzdG9w
Q2FwdHVyaW5nOiBmdW5jdGlvbih0cmFjZUxvZykKKyAgICB7CisgICAgICAgIGlmICh0cmFjZUxv
ZyAmJiB0aGlzLl90cmFjZUxvZyAhPT0gdHJhY2VMb2cpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVy
aW5nT25GcmFtZUVuZCA9IGZhbHNlOworICAgIH0sCisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3RyYWNlTG9nID0gbmV3IFRyYWNlTG9nKCk7Cisg
ICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IHRydWU7CisgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJp
bmdPbkZyYW1lRW5kID0gdHJ1ZTsKKyAgICB9LAorCisgICAgcmVwb3J0QmVmb3JlQ2FsbDogZnVu
Y3Rpb24odGhpc09iamVjdCwgZnVuY3Rpb25OYW1lLCBhcmdzKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9jYXB0dXJpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0aGlz
T2JqZWN0IGluc3RhbmNlb2YgUmVzb3VyY2UpCisgICAgICAgICAgICB0aGlzLl90cmFjZUxvZy5j
YXB0dXJlUmVzb3VyY2UodGhpc09iamVjdCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0g
YXJncy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhcmdzW2ldIGluc3Rh
bmNlb2YgUmVzb3VyY2UpCisgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2cuY2FwdHVyZVJl
c291cmNlKGFyZ3NbaV0pOwogICAgICAgICB9CisgICAgfSwKIAotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIHJlcG9ydENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICBpZiAo
IXRoaXMuX2NhcHR1cmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fdHJh
Y2VMb2cuYWRkQ2FsbChjYWxsKTsKKyAgICAgICAgaWYgKHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZy
YW1lRW5kICYmIHRoaXMuX3RyYWNlTG9nLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgdGhp
cy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX3Nl
dFplcm9UaW1lb3V0cyh0aGlzLnN0b3BDYXB0dXJpbmcuYmluZCh0aGlzLCB0aGlzLl90cmFjZUxv
ZykpOworICAgICAgICB9CiAgICAgfSwKIAogICAgIF9zZXRaZXJvVGltZW91dHM6IGZ1bmN0aW9u
KGNhbGxiYWNrKQpAQCAtMTM5LDYgKzQ2MCwyOSBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUg
PSB7CiAgICAgfQogfTsKIAorLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIEluamVjdGVk
U2NyaXB0ID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX21hbmFnZXIgPSBuZXcgUmVzb3VyY2VU
cmFja2luZ01hbmFnZXIoKTsKK30KKworSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0geworICAg
IHdyYXBXZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkKKyAgICB7CisgICAgICAgIHZh
ciByZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChnbENvbnRleHQpIHx8IG5ldyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQpOworICAgICAgICB0aGlzLl9tYW5hZ2Vy
LnJlZ2lzdGVyUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICB2YXIgcHJveHkgPSByZXNvdXJj
ZS5wcm94eU9iamVjdDsKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICBjYXB0
dXJlRnJhbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX21hbmFnZXIuY2FwdHVy
ZUZyYW1lKCk7CisgICAgfQorfTsKKwogdmFyIGluamVjdGVkU2NyaXB0ID0gbmV3IEluamVjdGVk
U2NyaXB0KCk7CiByZXR1cm4gaW5qZWN0ZWRTY3JpcHQ7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155247</attachid>
            <date>2012-07-30 03:50:37 -0700</date>
            <delta_ts>2012-07-30 06:02:55 -0700</delta_ts>
            <desc>less code</desc>
            <filename>bug-90597-20120730145021.patch</filename>
            <type>text/plain</type>
            <size>15405</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI2NzNlMWRkYzdmOTYy
YWZkNmU3ZmZlZmRiNTIyMDg2MmIzYTYwOS4uYjBiNmQyYzdjNTNiNWE5MzExMzRlNWI4NmY1ZTU3
YjRlN2JhNWJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
cmFwIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMgYW5kIGNvbGxlY3QgYSB0cmFjZSBs
b2cgaWYgd2UgYXJlIGluIGNhcHR1cmluZyBtb2RlLgorICAgICAgICBTdHViYmVkIGNvZGUgZm9y
IGNvbGxlY3RpbmcgY2FsbHMgY29udHJpYnV0aW5nIHRvIGEgV2ViR0wgcmVzb3VyY2Ugc3RhdGUg
c28gdGhhdCB3ZSBjb3VsZCByZXBsYXkgdGhlbSBsYXRlci4KKworICAgICAgICBUeXBpY2FsIHNj
ZW5hcmlvOgorICAgICAgICAtIHdlIHdyYXAgYSBHTCBjb250ZXh0IHdpdGggSW5qZWN0ZWRTY3Jp
cHQud3JhcFdlYkdMQ29udGV4dCgpIGFuZCByZXR1cm4gYSBwcm94eSB0byB0aGUgaW5zcGVjdGVk
IHBhZ2UKKyAgICAgICAgLSB0aGUgcHJveHkgc2F2ZXMgYWxsIGNhbGxzIG5lY2Vzc2FyeSB0byBk
byBhIHJlcGxheSBsYXRlciAtIG9ubHkgdGhvc2UgdGhhdCBtb2RpZnkgYSByZXNvdXJjZSdzIHN0
YXRlCisgICAgICAgIC0gd2hlbiB3ZSB0dXJuIG9uIGNhcHR1cmluZyBtb2RlIChJbmplY3RlZFNj
cmlwdC5jYXB0dXJlRnJhbWUpLCB3ZSBzYXZlIGFsbCBXZWJHTCBjYWxscyB0byBhIHRyYWNlIGxv
ZworCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wNy0yNCAgRG9taW5payBSw7Z0dHNjaGVzICA8
ZG9taW5pay5yb3R0c2NoZXNAaW50ZWwuY29tPgogCiAgICAgICAgIEhhcmZCdXp6RmFjZU5HLmgg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMgY29uZmxpY3Qgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBIYXJm
YnV6egpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
U291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNl
LmpzCmluZGV4IDc5ZTY1NjJhZWMxNjI1NzBlOGNjMjIzNDAyM2YyNjNkYTAxOWJhMTguLjI1MjJl
OGNkZjkzY2VhYWNhMGU5N2MxNWExYTE5ZjFhZjJiOWQ5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTQxMiwxNSArNDEyLDI5
IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG9iamVjdDsK
ICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAgKiBA
cmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAgIG1vZHVsZTogZnVuY3Rpb24obmFtZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGVzW25hbWVdOwogICAgIH0sCi0gCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBzb3VyY2UKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAgIGluamVjdE1v
ZHVsZTogZnVuY3Rpb24obmFtZSwgc291cmNlKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMu
X21vZHVsZXNbbmFtZV07Ci0gICAgICAgIHZhciBtb2R1bGUgPSBldmFsKCIoIiArIHNvdXJjZSAr
ICIpIik7CisgICAgICAgIHZhciBtb2R1bGVGdW5jdGlvbiA9IGV2YWwoIigiICsgc291cmNlICsg
IikiKTsKKyAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGVGdW5jdGlvbiAhPT0gImZ1bmN0aW9uIikg
eworICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93LmNvbnNvbGUuZXJyb3IoIldlYiBJbnNwZWN0
b3IgZXJyb3I6IEEgZnVuY3Rpb24gd2FzIGV4cGVjdGVkIGZvciBtb2R1bGUgJXMgZXZhbHVhdGlv
biIsIG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIG1vZHVsZSA9IG1vZHVsZUZ1bmN0aW9uLmNhbGwoaW5zcGVjdGVkV2luZG93LCBJbmplY3Rl
ZFNjcmlwdEhvc3QsIGluc3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCk7CiAgICAgICAg
IHRoaXMuX21vZHVsZXNbbmFtZV0gPSBtb2R1bGU7CiAgICAgICAgIHJldHVybiBtb2R1bGU7CiAg
ICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlU291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKaW5kZXggNDQ4NGI2OThjNWZhZmVhYzhmMDJjNDQz
ODM2ZjU5YjAyMTdkMDdjNy4uZTk3YWVkMDNhYzI4MGRlZWQwYzhhNTg0NzNmOWY1MGZmNjRmMWE3
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2Vi
R0xNb2R1bGVTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKQEAgLTM0LDk4ICszNCwzNTMgQEAKIChmdW5jdGlv
biAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQp
IHsKIAogLyoqCisgKiBAcGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncwogICogQGNvbnN0cnVj
dG9yCiAgKi8KLXZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKK3ZhciBDYWxsID0gZnVu
Y3Rpb24ocmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSwgYXJncywgcmVzdWx0KQogewotICAgIHRoaXMu
X2xhc3RCb3VuZE9iamVjdElkID0gMDsKLSAgICB0aGlzLl9pZFRvV3JhcHBlclByb3h5ID0ge307
Ci0gICAgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQgPSB7fTsKLSAgICB0aGlzLl9jYXB0dXJp
bmdGcmFtZUluZm8gPSBudWxsOworICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7CisgICAg
dGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMuX3Jlc3VsdCA9IFJl
c291cmNlLmZvck9iamVjdChyZXN1bHQpIHx8IHJlc3VsdDsKKyAgICB0aGlzLl9hcmdzID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMCk7CisgICAgZm9yICh2YXIgaSA9IDAsIG4g
PSB0aGlzLl9hcmdzLmxlbmd0aDsgaSA8IG47ICsraSkKKyAgICAgICAgdGhpcy5fYXJnc1tpXSA9
IFJlc291cmNlLmZvck9iamVjdCh0aGlzLl9hcmdzW2ldKSB8fCB0aGlzLl9hcmdzW2ldOwogfQog
Ci1JbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7Ci0gICAgd3JhcFdlYkdMQ29udGV4dDogZnVu
Y3Rpb24oZ2xDb250ZXh0KQorQ2FsbC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHJlc291cmNlKCkK
ICAgICB7Ci0gICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2lkVG9SZWFsV2ViR0xDb250ZXh0
KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbaWRdID09PSBn
bENvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9XcmFwcGVyUHJveHlb
aWRdOwotICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZTsKKyAgICB9LAor
CisgICAgZ2V0IGZ1bmN0aW9uTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZnVu
Y3Rpb25OYW1lOworICAgIH0sCisKKyAgICBnZXQgYXJncygpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fYXJnczsKKyAgICB9LAorCisgICAgZ2V0IHJlc3VsdCgpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fcmVzdWx0OworICAgIH0sCisKKyAgICBmcmVlemU6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGlmICh0aGlzLl9mcmVlemVkKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLl9mcmVlemVkID0gdHJ1ZTsKKyAgICAgICAgLy8gRklYTUU6IGNsb25lIGFs
bCBtdXRhYmxlIGFyZ3MgdG8gbWFrZSB0aGlzIENhbGwgaW1tdXRhYmxlLgorICAgIH0KK307CisK
Ky8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK3ZhciBSZXNvdXJjZUNhY2hlID0gZnVuY3Rpb24o
KQoreworICAgIHRoaXMuX3Jlc291cmNlcyA9IHt9OworICAgIHRoaXMuX3Jlc291cmNlTWFuYWdl
ciA9IG5ldyBSZXNvdXJjZVRyYWNraW5nTWFuYWdlcigpOworfQorCitSZXNvdXJjZUNhY2hlLnBy
b3RvdHlwZSA9IHsKKyAgICByZXNvdXJjZUJ5SWQ6IGZ1bmN0aW9uKGlkKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlc1tpZF07CisgICAgfSwKKworICAgIHB1dFJlc291cmNl
OiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHZhciBpZCA9IHJlc291cmNlLmlk
OworICAgICAgICB0aGlzLl9yZXNvdXJjZXNbaWRdID0gcmVzb3VyY2U7CisgICAgICAgIHRoaXMu
X3Jlc291cmNlTWFuYWdlci5yZWdpc3RlclJlc291cmNlKHJlc291cmNlKTsKKyAgICB9Cit9Owor
CisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgUmVzb3VyY2UgPSBmdW5jdGlvbih3cmFw
cGVkT2JqZWN0KQoreworICAgIHRoaXMuX2lkID0gKytSZXNvdXJjZS5fdW5pcXVlSWQ7CisgICAg
dGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0gbnVsbDsKKyAgICB0aGlzLl93cmFwcGVkT2JqZWN0ID0g
d3JhcHBlZE9iamVjdDsKKyAgICB0aGlzLl9iaW5kT2JqZWN0VG9SZXNvdXJjZSh3cmFwcGVkT2Jq
ZWN0KTsKK30KKworUmVzb3VyY2UuX3VuaXF1ZUlkID0gMDsKIAorUmVzb3VyY2UuZm9yT2JqZWN0
ID0gZnVuY3Rpb24ob2JqZWN0KQoreworICAgIGlmICghb2JqZWN0IHx8IG9iamVjdCBpbnN0YW5j
ZW9mIFJlc291cmNlKQorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIGlmICh0eXBlb2Ygb2Jq
ZWN0ID09PSAib2JqZWN0IikKKyAgICAgICAgcmV0dXJuIG9iamVjdFsiX19yZXNvdXJjZU9iamVj
dCJdOworICAgIHJldHVybiBudWxsOworfTsKKworUmVzb3VyY2UucHJvdG90eXBlID0geworICAg
IGdldCBpZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5faWQ7CisgICAgfSwKKworICAg
IGdldCB3cmFwcGVkT2JqZWN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl93cmFwcGVk
T2JqZWN0OworICAgIH0sCisKKyAgICBnZXQgcHJveHlPYmplY3QoKQorICAgIHsKKyAgICAgICAg
Ly8gTm8gcHJveHkgd3JhcHBpbmcgYnkgZGVmYXVsdC4KKyAgICAgICAgcmV0dXJuIHRoaXMud3Jh
cHBlZE9iamVjdDsKKyAgICB9LAorCisgICAgZ2V0IG1hbmFnZXIoKQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9yZXNvdXJjZU1hbmFnZXIpCisgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZU1h
bmFnZXIgPSBuZXcgUmVzb3VyY2VUcmFja2luZ01hbmFnZXIoKTsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3Jlc291cmNlTWFuYWdlcjsKKyAgICB9LAorCisgICAgc2V0IG1hbmFnZXIodmFsdWUpCisg
ICAgeworICAgICAgICB0aGlzLl9yZXNvdXJjZU1hbmFnZXIgPSB2YWx1ZTsKKyAgICB9LAorCisg
ICAgX2JpbmRPYmplY3RUb1Jlc291cmNlOiBmdW5jdGlvbihvYmplY3QpCisgICAgeworICAgICAg
ICBvYmplY3RbIl9fcmVzb3VyY2VPYmplY3QiXSA9IHRoaXM7CisgICAgfSwKK307CisKKy8qKgor
ICogQGV4dGVuZHMge1Jlc291cmNlfQorICogQGNvbnN0cnVjdG9yCisgKi8KK3ZhciBXZWJHTFJl
bmRlcmluZ0NvbnRleHRSZXNvdXJjZSA9IGZ1bmN0aW9uKGdsQ29udGV4dCwgZ2xDb250ZXh0QXR0
cmlidXRlcykKK3sKKyAgICBSZXNvdXJjZS5jYWxsKHRoaXMsIGdsQ29udGV4dCk7CisgICAgdGhp
cy5fcHJveHlPYmplY3QgPSBudWxsOworfQorCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJj
ZS5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHByb3h5T2JqZWN0KCkKKyAgICB7CisgICAgICAgIGlm
ICghdGhpcy5fcHJveHlPYmplY3QpCisgICAgICAgICAgICB0aGlzLl9wcm94eU9iamVjdCA9IHRo
aXMuX3dyYXBPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3h5T2JqZWN0OworICAg
IH0sCisKKyAgICBfd3JhcE9iamVjdDogZnVuY3Rpb24oKQorICAgIHsKICAgICAgICAgdmFyIHBy
b3h5ID0ge307Ci0gICAgICAgIHZhciBuYW1lUHJvY2Vzc2VkID0ge307Ci0gICAgICAgIG5hbWVQ
cm9jZXNzZWQuX19wcm90b19fID0gbnVsbDsKLSAgICAgICAgbmFtZVByb2Nlc3NlZC5jb25zdHJ1
Y3RvciA9IHRydWU7Ci0KLSAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc05hbWUobmFtZSkgewotICAg
ICAgICAgICAgaWYgKG5hbWVQcm9jZXNzZWRbbmFtZV0pCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgbmFtZVByb2Nlc3NlZFtuYW1lXSA9IHRydWU7Ci0gICAgICAgICAgICBp
ZiAodHlwZW9mIGdsQ29udGV4dFtuYW1lXSA9PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgICAg
ICBwcm94eVtuYW1lXSA9IGluamVjdGVkU2NyaXB0Ll93cmFwcGVkRnVuY3Rpb24uYmluZChpbmpl
Y3RlZFNjcmlwdCwgZ2xDb250ZXh0LCBuYW1lKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIG5hbWUsIHsKKyAgICAgICAgdmFy
IGdsQ29udGV4dCA9IHRoaXMud3JhcHBlZE9iamVjdDsKKworICAgICAgICB2YXIgc2VsZiA9IHRo
aXM7CisgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0eShwcm9wZXJ0eSkgeworICAgICAg
ICAgICAgaWYgKHR5cGVvZiBnbENvbnRleHRbcHJvcGVydHldID09PSAnZnVuY3Rpb24nKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGN1c3RvbVdyYXBGdW5jdGlvbiA9IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dFJlc291cmNlLldyYXBGdW5jdGlvbnNbcHJvcGVydHldOworICAgICAgICAgICAgICAgIGlm
IChjdXN0b21XcmFwRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5
XSA9IHNlbGYuX3dyYXBDdXN0b21GdW5jdGlvbihzZWxmLm1hbmFnZXIsIGdsQ29udGV4dCwgZ2xD
b250ZXh0W3Byb3BlcnR5XSwgcHJvcGVydHksIGN1c3RvbVdyYXBGdW5jdGlvbik7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm94eVtwcm9wZXJ0eV0gPSBzZWxm
Ll93cmFwRnVuY3Rpb24oc2VsZi5tYW5hZ2VyLCBnbENvbnRleHQsIGdsQ29udGV4dFtwcm9wZXJ0
eV0sIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoL15bQS1aMC05X10rJC8udGVz
dChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICAvLyBGYXN0IGFjY2VzcyB0byBlbnVtcyBh
bmQgY29uc3RhbnRzLgorICAgICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IGdsQ29udGV4
dFtwcm9wZXJ0eV07CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkocHJveHksIHByb3BlcnR5LCB7CiAgICAgICAgICAgICAgICAgICAgIGdl
dDogZnVuY3Rpb24oKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2xDb250ZXh0W25hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsQ29udGV4dFtwcm9wZXJ0eV07CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICAgICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGdsQ29udGV4dFtuYW1lXSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xDb250ZXh0W3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBm
b3IgKHZhciBvID0gZ2xDb250ZXh0OyBvOyBvID0gby5fX3Byb3RvX18pCi0gICAgICAgICAgICBP
YmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5mb3JFYWNoKHByb2Nlc3NOYW1lKTsKKyAgICAg
ICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZ2xDb250ZXh0KQorICAgICAgICAgICAgcHJvY2Vzc1By
b3BlcnR5KHByb3BlcnR5KTsKIAogICAgICAgICAvLyBJbiBvcmRlciB0byBlbXVsYXRlICJpbnN0
YW5jZW9mIi4KICAgICAgICAgcHJveHkuX19wcm90b19fID0gZ2xDb250ZXh0Ll9fcHJvdG9fXzsK
ICAgICAgICAgcHJveHkuY29uc3RydWN0b3IgPSBnbENvbnRleHQuY29uc3RydWN0b3I7CiAKLSAg
ICAgICAgdmFyIGNvbnRleHRJZCA9IHRoaXMuX2dlbmVyYXRlT2JqZWN0SWQoKTsKLSAgICAgICAg
dGhpcy5faWRUb1dyYXBwZXJQcm94eVtjb250ZXh0SWRdID0gcHJveHk7Ci0gICAgICAgIHRoaXMu
X2lkVG9SZWFsV2ViR0xDb250ZXh0W2NvbnRleHRJZF0gPSBnbENvbnRleHQ7Ci0gICAgICAgIElu
amVjdGVkU2NyaXB0SG9zdC53ZWJHTENvbnRleHRDcmVhdGVkKGNvbnRleHRJZCk7Ci0KICAgICAg
ICAgcmV0dXJuIHByb3h5OwogICAgIH0sCiAKLSAgICBfZ2VuZXJhdGVPYmplY3RJZDogZnVuY3Rp
b24oKQorICAgIF93cmFwQ3VzdG9tRnVuY3Rpb246IGZ1bmN0aW9uKG1hbmFnZXIsIG9yaWdpbmFs
T2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGN1c3RvbVdyYXBGdW5jdGlv
bikKICAgICB7Ci0gICAgICAgIHZhciBpZCA9ICsrdGhpcy5fbGFzdEJvdW5kT2JqZWN0SWQ7Ci0g
ICAgICAgIHZhciBvYmplY3RJZCA9ICJ7XCJpbmplY3RlZFNjcmlwdElkXCI6IiArIGluamVjdGVk
U2NyaXB0SWQgKyAiLFwid2ViR0xJZFwiOiIgKyBpZCArICJ9IjsKLSAgICAgICAgcmV0dXJuIG9i
amVjdElkOworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBtYW5hZ2Vy
LnJlcG9ydEJlZm9yZUNhbGwoUmVzb3VyY2UuZm9yT2JqZWN0KG9yaWdpbmFsT2JqZWN0KSwgZnVu
Y3Rpb25OYW1lLCBhcmd1bWVudHMpOworICAgICAgICAgICAgdmFyIHdyYXBGdW5jdGlvbiA9IG5l
dyBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5XcmFwRnVuY3Rpb24ob3JpZ2luYWxPYmpl
Y3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzKTsKKyAgICAgICAg
ICAgIGN1c3RvbVdyYXBGdW5jdGlvbi5hcHBseSh3cmFwRnVuY3Rpb24sIGFyZ3VtZW50cyk7Cisg
ICAgICAgICAgICBtYW5hZ2VyLnJlcG9ydENhbGwod3JhcEZ1bmN0aW9uLmNhbGwpOworICAgICAg
ICAgICAgcmV0dXJuIHdyYXBGdW5jdGlvbi5yZXN1bHQ7CisgICAgICAgIH07CiAgICAgfSwKIAot
ICAgIGNhcHR1cmVGcmFtZTogZnVuY3Rpb24oY29udGV4dElkKQorICAgIF93cmFwRnVuY3Rpb246
IGZ1bmN0aW9uKG1hbmFnZXIsIG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5j
dGlvbk5hbWUpCiAgICAgewotICAgICAgICB0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gPSB7Ci0g
ICAgICAgICAgICBjb250ZXh0SWQ6IGNvbnRleHRJZCwKLSAgICAgICAgICAgIGNhcHR1cmVkQ2Fs
bHNOdW06IDAKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCFt
YW5hZ2VyLmNhcHR1cmluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlv
bi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHZhciByZXNv
dXJjZSA9IFJlc291cmNlLmZvck9iamVjdChvcmlnaW5hbE9iamVjdCk7CisgICAgICAgICAgICBt
YW5hZ2VyLnJlcG9ydEJlZm9yZUNhbGwocmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRz
KTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KG9yaWdp
bmFsT2JqZWN0LCBhcmd1bWVudHMpOworICAgICAgICAgICAgdmFyIGNhbGwgPSBuZXcgQ2FsbChy
ZXNvdXJjZSwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHMsIHJlc3VsdCk7CisgICAgICAgICAgICBt
YW5hZ2VyLnJlcG9ydENhbGwoY2FsbCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9OworICAgIH0KK307CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLnByb3Rv
dHlwZS5fX3Byb3RvX18gPSBSZXNvdXJjZS5wcm90b3R5cGU7CisKKy8qKgorICogQGNvbnN0cnVj
dG9yCisgKi8KK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLldyYXBGdW5jdGlvbiA9IGZ1
bmN0aW9uKG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGFy
Z3MpCit7CisgICAgdGhpcy5fb3JpZ2luYWxPYmplY3QgPSBvcmlnaW5hbE9iamVjdDsKKyAgICB0
aGlzLl9vcmlnaW5hbEZ1bmN0aW9uID0gb3JpZ2luYWxGdW5jdGlvbjsKKyAgICB0aGlzLl9mdW5j
dGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7CisgICAgdGhp
cy5fZ2xSZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChvcmlnaW5hbE9iamVjdCk7Cit9Owor
CitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5XcmFwRnVuY3Rpb24ucHJvdG90eXBlID0g
eworICAgIGdldCByZXN1bHQoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRlZCkg
eworICAgICAgICAgICAgdGhpcy5fZXhlY3V0ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5f
cmVzdWx0ID0gdGhpcy5fb3JpZ2luYWxGdW5jdGlvbi5hcHBseSh0aGlzLl9vcmlnaW5hbE9iamVj
dCwgdGhpcy5fYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsK
KyAgICB9LAorCisgICAgZ2V0IGNhbGwoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYWxs
KQorICAgICAgICAgICAgdGhpcy5fY2FsbCA9IG5ldyBDYWxsKHRoaXMuX2dsUmVzb3VyY2UsIHRo
aXMuX2Z1bmN0aW9uTmFtZSwgdGhpcy5fYXJncywgdGhpcy5yZXN1bHQpOworICAgICAgICByZXR1
cm4gdGhpcy5fY2FsbDsKKyAgICB9Cit9OworCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJj
ZS5XcmFwRnVuY3Rpb25zID0geworICAgIF9fcHJvdG9fXzogbnVsbCwKKyAgICAKKyAgICAvLyBG
SVhNRTogb3ZlcnJpZGUgR0wgY2FsbHMgYWZmZWN0aW5nIHJlc291cmNlcyBzdGF0ZXMgaGVyZS4K
K307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK3ZhciBUcmFjZUxvZyA9IGZ1bmN0aW9u
KCkKK3sKKyAgICB0aGlzLl9jYWxscyA9IFtdOworICAgIHRoaXMuX3Jlc291cmNlQ2FjaGUgPSBu
ZXcgUmVzb3VyY2VDYWNoZSgpOworfQorCitUcmFjZUxvZy5wcm90b3R5cGUgPSB7CisgICAgZ2V0
IGxlbmd0aCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY2FsbHMubGVuZ3RoOwogICAg
IH0sCiAKLSAgICBfc3RvcENhcHR1cmluZzogZnVuY3Rpb24oaW5mbykKKyAgICBnZXQgcmVzb3Vy
Y2VDYWNoZSgpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID09
PSBpbmZvKQotICAgICAgICAgICAgdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID0gbnVsbDsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlQ2FjaGU7CiAgICAgfSwKIAotICAgIF93cmFwcGVk
RnVuY3Rpb246IGZ1bmN0aW9uKGdsQ29udGV4dCwgZnVuY3Rpb25OYW1lKQorICAgIGNhcHR1cmVS
ZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCiAgICAgewotICAgICAgICAvLyBDYWxsIHJlYWwg
V2ViR0wgZnVuY3Rpb24uCi0gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwoYXJndW1lbnRzLCAyKTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IGdsQ29udGV4dFtmdW5j
dGlvbk5hbWVdLmFwcGx5KGdsQ29udGV4dCwgYXJncyk7CisgICAgICAgIC8vIEZJWE1FOiBDYXB0
dXJlIGN1cnJlbnQgcmVzb3VyY2Ugc3RhdGUgdG8gc3RhcnQgdGhlIHJlcGxheSBmcm9tLgorICAg
IH0sCiAKLSAgICAgICAgaWYgKHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mbyAmJiB0aGlzLl9pZFRv
UmVhbFdlYkdMQ29udGV4dFt0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8uY29udGV4dElkXSA9PT0g
Z2xDb250ZXh0KSB7Ci0gICAgICAgICAgICB2YXIgY2FwdHVyZWRDYWxsc051bSA9ICsrdGhpcy5f
Y2FwdHVyaW5nRnJhbWVJbmZvLmNhcHR1cmVkQ2FsbHNOdW07Ci0gICAgICAgICAgICBpZiAoY2Fw
dHVyZWRDYWxsc051bSA9PT0gMSkKLSAgICAgICAgICAgICAgICB0aGlzLl9zZXRaZXJvVGltZW91
dHModGhpcy5fc3RvcENhcHR1cmluZy5iaW5kKHRoaXMsIHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5m
bykpOwotICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0LndlYkdMUmVwb3J0RnVuY3Rpb25D
YWxsKHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mby5jb250ZXh0SWQsIGZ1bmN0aW9uTmFtZSwgIlsi
ICsgYXJncy5qb2luKCIsICIpICsgIl0iLCByZXN1bHQgKyAiIik7CisgICAgYWRkQ2FsbDogZnVu
Y3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBDbG9uZSBjYWxsIGFuZCBwdXNo
IHRoZSBjbG9uZS4KKyAgICAgICAgY2FsbC5mcmVlemUoKTsKKyAgICAgICAgdGhpcy5fY2FsbHMu
cHVzaChjYWxsKTsKKyAgICB9Cit9OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIg
UmVzb3VyY2VUcmFja2luZ01hbmFnZXIgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5fY2FwdHVy
aW5nID0gZmFsc2U7CisgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsK
KyAgICB0aGlzLl90cmFjZUxvZyA9IG51bGw7Cit9CisKK1Jlc291cmNlVHJhY2tpbmdNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKKyAgICBnZXQgY2FwdHVyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9jYXB0dXJpbmc7CisgICAgfSwKKworICAgIGdldCB0cmFjZUxvZygpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2VMb2c7CisgICAgfSwKKworICAgIHJlZ2lzdGVyUmVz
b3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsKKyAgICAgICAgcmVzb3VyY2UubWFuYWdl
ciA9IHRoaXM7CisgICAgfSwKKworICAgIHN0YXJ0Q2FwdHVyaW5nOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAgICAgICAgIHRoaXMuX3RyYWNl
TG9nID0gbmV3IFRyYWNlTG9nKCk7CisgICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IHRydWU7Cisg
ICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAgfSwKKwor
ICAgIHN0b3BDYXB0dXJpbmc6IGZ1bmN0aW9uKHRyYWNlTG9nKQorICAgIHsKKyAgICAgICAgaWYg
KHRyYWNlTG9nICYmIHRoaXMuX3RyYWNlTG9nICE9PSB0cmFjZUxvZykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3N0
b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAgfSwKKworICAgIGNhcHR1cmVGcmFt
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdHJhY2VMb2cgPSBuZXcgVHJhY2VM
b2coKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc3Rv
cENhcHR1cmluZ09uRnJhbWVFbmQgPSB0cnVlOworICAgIH0sCisKKyAgICByZXBvcnRCZWZvcmVD
YWxsOiBmdW5jdGlvbihyZXNvdXJjZSwgZnVuY3Rpb25OYW1lLCBhcmdzKQorICAgIHsKKyAgICAg
ICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRo
aXMuX3RyYWNlTG9nLmNhcHR1cmVSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgICAgIGZvciAodmFy
IGkgPSAwLCBuID0gYXJncy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBy
ZXMgPSBSZXNvdXJjZS5mb3JPYmplY3QoYXJnc1tpXSk7CisgICAgICAgICAgICBpZiAocmVzKQor
ICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNlTG9nLmNhcHR1cmVSZXNvdXJjZShyZXMpOwogICAg
ICAgICB9CisgICAgfSwKIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJlcG9ydENhbGw6
IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fdHJhY2VMb2cuYWRkQ2FsbChjYWxsKTsK
KyAgICAgICAgaWYgKHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kICYmIHRoaXMuX3RyYWNl
TG9nLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJh
bWVFbmQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX3NldFplcm9UaW1lb3V0cyh0aGlzLnN0
b3BDYXB0dXJpbmcuYmluZCh0aGlzLCB0aGlzLl90cmFjZUxvZykpOworICAgICAgICB9CiAgICAg
fSwKIAogICAgIF9zZXRaZXJvVGltZW91dHM6IGZ1bmN0aW9uKGNhbGxiYWNrKQpAQCAtMTM5LDYg
KzM5NCwyOSBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAorLyoq
CisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIEluamVjdGVkU2NyaXB0ID0gZnVuY3Rpb24oKQor
eworICAgIHRoaXMuX21hbmFnZXIgPSBuZXcgUmVzb3VyY2VUcmFja2luZ01hbmFnZXIoKTsKK30K
KworSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0geworICAgIHdyYXBXZWJHTENvbnRleHQ6IGZ1
bmN0aW9uKGdsQ29udGV4dCkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IFJlc291cmNl
LmZvck9iamVjdChnbENvbnRleHQpIHx8IG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJj
ZShnbENvbnRleHQpOworICAgICAgICB0aGlzLl9tYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2UocmVz
b3VyY2UpOworICAgICAgICB2YXIgcHJveHkgPSByZXNvdXJjZS5wcm94eU9iamVjdDsKKyAgICAg
ICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHRoaXMuX21hbmFnZXIuY2FwdHVyZUZyYW1lKCk7CisgICAgfQorfTsK
KwogdmFyIGluamVjdGVkU2NyaXB0ID0gbmV3IEluamVjdGVkU2NyaXB0KCk7CiByZXR1cm4gaW5q
ZWN0ZWRTY3JpcHQ7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155277</attachid>
            <date>2012-07-30 06:03:01 -0700</date>
            <delta_ts>2012-07-30 07:19:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90597-20120730170245.patch</filename>
            <type>text/plain</type>
            <size>15239</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJlZTRlOTM2YTg2NDAw
NDZmZDdkYzgzNzkzZGU2MjllMzNmY2VhMC4uMmMzZThiZDczODM5Yjc2NGM4NjBhMjQ4YzBjNGE1
ZWJlMWQ2MDg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
cmFwIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMgYW5kIGNvbGxlY3QgYSB0cmFjZSBs
b2cgaWYgd2UgYXJlIGluIGNhcHR1cmluZyBtb2RlLgorICAgICAgICBTdHViYmVkIGNvZGUgZm9y
IGNvbGxlY3RpbmcgY2FsbHMgY29udHJpYnV0aW5nIHRvIGEgV2ViR0wgcmVzb3VyY2Ugc3RhdGUg
c28gdGhhdCB3ZSBjb3VsZCByZXBsYXkgdGhlbSBsYXRlci4KKworICAgICAgICBUeXBpY2FsIHNj
ZW5hcmlvOgorICAgICAgICAtIHdlIHdyYXAgYSBHTCBjb250ZXh0IHdpdGggSW5qZWN0ZWRTY3Jp
cHQud3JhcFdlYkdMQ29udGV4dCgpIGFuZCByZXR1cm4gYSBwcm94eSB0byB0aGUgaW5zcGVjdGVk
IHBhZ2UKKyAgICAgICAgLSB0aGUgcHJveHkgc2F2ZXMgYWxsIGNhbGxzIG5lY2Vzc2FyeSB0byBk
byBhIHJlcGxheSBsYXRlciAtIG9ubHkgdGhvc2UgdGhhdCBtb2RpZnkgYSByZXNvdXJjZSdzIHN0
YXRlCisgICAgICAgIC0gd2hlbiB3ZSB0dXJuIG9uIGNhcHR1cmluZyBtb2RlIChJbmplY3RlZFNj
cmlwdC5jYXB0dXJlRnJhbWUpLCB3ZSBzYXZlIGFsbCBXZWJHTCBjYWxscyB0byBhIHRyYWNlIGxv
ZworCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wNy0zMCAgQWxleGFuZGVyIFBhdmxvdiAgPGFw
YXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtTdHlsZXNdIE5v
IGNvbG9yIHN3YXRjaCBmb3IgdGhlIFNWRyAiZmlsbCIgYW5kICJzdHJva2UiIHByb3BlcnR5IHZh
bHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
U291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNl
LmpzCmluZGV4IDAzMzVjOTg2ODY0YmY4Njg4NDVmZThhYzRlOWNhOTM3ZDdiYWU0MjIuLmVjZGQy
NTdlYjM5M2FlNzVmNjI0NTcwZWNiOGZmYTliYjM4NDYwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTU0OCwxNSArNTQ4LDI5
IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG9iamVjdDsK
ICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAgKiBA
cmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAgIG1vZHVsZTogZnVuY3Rpb24obmFtZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGVzW25hbWVdOwogICAgIH0sCi0gCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBzb3VyY2UKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAgIGluamVjdE1v
ZHVsZTogZnVuY3Rpb24obmFtZSwgc291cmNlKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMu
X21vZHVsZXNbbmFtZV07Ci0gICAgICAgIHZhciBtb2R1bGUgPSBldmFsKCIoIiArIHNvdXJjZSAr
ICIpIik7CisgICAgICAgIHZhciBtb2R1bGVGdW5jdGlvbiA9IGV2YWwoIigiICsgc291cmNlICsg
IikiKTsKKyAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGVGdW5jdGlvbiAhPT0gImZ1bmN0aW9uIikg
eworICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93LmNvbnNvbGUuZXJyb3IoIldlYiBJbnNwZWN0
b3IgZXJyb3I6IEEgZnVuY3Rpb24gd2FzIGV4cGVjdGVkIGZvciBtb2R1bGUgJXMgZXZhbHVhdGlv
biIsIG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIG1vZHVsZSA9IG1vZHVsZUZ1bmN0aW9uLmNhbGwoaW5zcGVjdGVkV2luZG93LCBJbmplY3Rl
ZFNjcmlwdEhvc3QsIGluc3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCk7CiAgICAgICAg
IHRoaXMuX21vZHVsZXNbbmFtZV0gPSBtb2R1bGU7CiAgICAgICAgIHJldHVybiBtb2R1bGU7CiAg
ICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlU291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKaW5kZXggNDQ4NGI2OThjNWZhZmVhYzhmMDJjNDQz
ODM2ZjU5YjAyMTdkMDdjNy4uYjVlMTQxNTMzMjViODBlOTBkNDBhZDU0MzhjOTI0M2M5MDkyMzNh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2Vi
R0xNb2R1bGVTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKQEAgLTM0LDk4ICszNCwzNTIgQEAKIChmdW5jdGlv
biAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQp
IHsKIAogLyoqCisgKiBAcGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncwogICogQGNvbnN0cnVj
dG9yCiAgKi8KLXZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKK3ZhciBDYWxsID0gZnVu
Y3Rpb24ocmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSwgYXJncywgcmVzdWx0KQogewotICAgIHRoaXMu
X2xhc3RCb3VuZE9iamVjdElkID0gMDsKLSAgICB0aGlzLl9pZFRvV3JhcHBlclByb3h5ID0ge307
Ci0gICAgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQgPSB7fTsKLSAgICB0aGlzLl9jYXB0dXJp
bmdGcmFtZUluZm8gPSBudWxsOworICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7CisgICAg
dGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMuX3Jlc3VsdCA9IFJl
c291cmNlLmZvck9iamVjdChyZXN1bHQpIHx8IHJlc3VsdDsKKyAgICB0aGlzLl9hcmdzID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMCk7CisgICAgZm9yICh2YXIgaSA9IDAsIG4g
PSB0aGlzLl9hcmdzLmxlbmd0aDsgaSA8IG47ICsraSkKKyAgICAgICAgdGhpcy5fYXJnc1tpXSA9
IFJlc291cmNlLmZvck9iamVjdCh0aGlzLl9hcmdzW2ldKSB8fCB0aGlzLl9hcmdzW2ldOwogfQog
Ci1JbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7Ci0gICAgd3JhcFdlYkdMQ29udGV4dDogZnVu
Y3Rpb24oZ2xDb250ZXh0KQorQ2FsbC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHJlc291cmNlKCkK
ICAgICB7Ci0gICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2lkVG9SZWFsV2ViR0xDb250ZXh0
KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbaWRdID09PSBn
bENvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9XcmFwcGVyUHJveHlb
aWRdOwotICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZTsKKyAgICB9LAor
CisgICAgZ2V0IGZ1bmN0aW9uTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZnVu
Y3Rpb25OYW1lOworICAgIH0sCisKKyAgICBnZXQgYXJncygpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fYXJnczsKKyAgICB9LAorCisgICAgZ2V0IHJlc3VsdCgpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fcmVzdWx0OworICAgIH0sCisKKyAgICBmcmVlemU6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGlmICh0aGlzLl9mcmVlemVkKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLl9mcmVlemVkID0gdHJ1ZTsKKyAgICAgICAgLy8gRklYTUU6IGNsb25lIGFs
bCBtdXRhYmxlIGFyZ3MgdG8gbWFrZSB0aGlzIENhbGwgaW1tdXRhYmxlLgorICAgIH0KK307CisK
Ky8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK3ZhciBSZXNvdXJjZUNhY2hlID0gZnVuY3Rpb24o
KQoreworICAgIHRoaXMuX3Jlc291cmNlcyA9IHt9OworfQorCitSZXNvdXJjZUNhY2hlLnByb3Rv
dHlwZSA9IHsKKyAgICByZXNvdXJjZUJ5SWQ6IGZ1bmN0aW9uKGlkKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3Jlc291cmNlc1tpZF07CisgICAgfSwKKworICAgIHB1dFJlc291cmNlOiBm
dW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHZhciBpZCA9IHJlc291cmNlLmlkOwor
ICAgICAgICB0aGlzLl9yZXNvdXJjZXNbaWRdID0gcmVzb3VyY2U7CisgICAgfQorfTsKKworLyoq
CisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFJlc291cmNlID0gZnVuY3Rpb24od3JhcHBlZE9i
amVjdCkKK3sKKyAgICB0aGlzLl9pZCA9ICsrUmVzb3VyY2UuX3VuaXF1ZUlkOworICAgIHRoaXMu
X3Jlc291cmNlTWFuYWdlciA9IG51bGw7CisgICAgdGhpcy5fd3JhcHBlZE9iamVjdCA9IHdyYXBw
ZWRPYmplY3Q7CisgICAgdGhpcy5fYmluZE9iamVjdFRvUmVzb3VyY2Uod3JhcHBlZE9iamVjdCk7
Cit9CisKK1Jlc291cmNlLl91bmlxdWVJZCA9IDA7CiAKK1Jlc291cmNlLmZvck9iamVjdCA9IGZ1
bmN0aW9uKG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdCB8fCBvYmplY3QgaW5zdGFuY2VvZiBS
ZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICBpZiAodHlwZW9mIG9iamVjdCA9
PT0gIm9iamVjdCIpCisgICAgICAgIHJldHVybiBvYmplY3RbIl9fcmVzb3VyY2VPYmplY3QiXTsK
KyAgICByZXR1cm4gbnVsbDsKK307CisKK1Jlc291cmNlLnByb3RvdHlwZSA9IHsKKyAgICBnZXQg
aWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lkOworICAgIH0sCisKKyAgICBnZXQg
d3JhcHBlZE9iamVjdCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fd3JhcHBlZE9iamVj
dDsKKyAgICB9LAorCisgICAgZ2V0IHByb3h5T2JqZWN0KCkKKyAgICB7CisgICAgICAgIC8vIE5v
IHByb3h5IHdyYXBwaW5nIGJ5IGRlZmF1bHQuCisgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRP
YmplY3Q7CisgICAgfSwKKworICAgIGdldCBtYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9yZXNvdXJjZU1hbmFnZXI7CisgICAgfSwKKworICAgIHNldCBtYW5hZ2VyKHZhbHVl
KQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0gdmFsdWU7CisgICAgfSwK
KworICAgIF9iaW5kT2JqZWN0VG9SZXNvdXJjZTogZnVuY3Rpb24ob2JqZWN0KQorICAgIHsKKyAg
ICAgICAgb2JqZWN0WyJfX3Jlc291cmNlT2JqZWN0Il0gPSB0aGlzOworICAgIH0sCit9OworCisv
KioKKyAqIEBleHRlbmRzIHtSZXNvdXJjZX0KKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UgPSBmdW5jdGlvbihnbENvbnRleHQsIGdsQ29udGV4
dEF0dHJpYnV0ZXMpCit7CisgICAgUmVzb3VyY2UuY2FsbCh0aGlzLCBnbENvbnRleHQpOworICAg
IHRoaXMuX3Byb3h5T2JqZWN0ID0gbnVsbDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
b3VyY2UucHJvdG90eXBlID0geworICAgIGdldCBwcm94eU9iamVjdCgpCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX3Byb3h5T2JqZWN0KQorICAgICAgICAgICAgdGhpcy5fcHJveHlPYmplY3Qg
PSB0aGlzLl93cmFwT2JqZWN0KCk7CisgICAgICAgIHJldHVybiB0aGlzLl9wcm94eU9iamVjdDsK
KyAgICB9LAorCisgICAgX3dyYXBPYmplY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CiAgICAgICAgIHZh
ciBwcm94eSA9IHt9OwotICAgICAgICB2YXIgbmFtZVByb2Nlc3NlZCA9IHt9OwotICAgICAgICBu
YW1lUHJvY2Vzc2VkLl9fcHJvdG9fXyA9IG51bGw7Ci0gICAgICAgIG5hbWVQcm9jZXNzZWQuY29u
c3RydWN0b3IgPSB0cnVlOwotCi0gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NOYW1lKG5hbWUpIHsK
LSAgICAgICAgICAgIGlmIChuYW1lUHJvY2Vzc2VkW25hbWVdKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIG5hbWVQcm9jZXNzZWRbbmFtZV0gPSB0cnVlOwotICAgICAgICAg
ICAgaWYgKHR5cGVvZiBnbENvbnRleHRbbmFtZV0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAg
ICAgICAgcHJveHlbbmFtZV0gPSBpbmplY3RlZFNjcmlwdC5fd3JhcHBlZEZ1bmN0aW9uLmJpbmQo
aW5qZWN0ZWRTY3JpcHQsIGdsQ29udGV4dCwgbmFtZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBuYW1lLCB7CisgICAgICAg
IHZhciBnbENvbnRleHQgPSB0aGlzLndyYXBwZWRPYmplY3Q7CisKKyAgICAgICAgdmFyIHNlbGYg
PSB0aGlzOworICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUHJvcGVydHkocHJvcGVydHkpIHsKKyAg
ICAgICAgICAgIGlmICh0eXBlb2YgZ2xDb250ZXh0W3Byb3BlcnR5XSA9PT0gJ2Z1bmN0aW9uJykg
eworICAgICAgICAgICAgICAgIHZhciBjdXN0b21XcmFwRnVuY3Rpb24gPSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRSZXNvdXJjZS5XcmFwRnVuY3Rpb25zW3Byb3BlcnR5XTsKKyAgICAgICAgICAgICAg
ICBpZiAoY3VzdG9tV3JhcEZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICBwcm94eVtwcm9w
ZXJ0eV0gPSBzZWxmLl93cmFwQ3VzdG9tRnVuY3Rpb24oc2VsZiwgZ2xDb250ZXh0LCBnbENvbnRl
eHRbcHJvcGVydHldLCBwcm9wZXJ0eSwgY3VzdG9tV3JhcEZ1bmN0aW9uKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IHNlbGYuX3dy
YXBGdW5jdGlvbihzZWxmLCBnbENvbnRleHQsIGdsQ29udGV4dFtwcm9wZXJ0eV0sIHByb3BlcnR5
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoL15bQS1aMC05X10rJC8udGVzdChwcm9wZXJ0eSkp
IHsKKyAgICAgICAgICAgICAgICAvLyBGYXN0IGFjY2VzcyB0byBlbnVtcyBhbmQgY29uc3RhbnRz
LgorICAgICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IGdsQ29udGV4dFtwcm9wZXJ0eV07
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkocHJveHksIHByb3BlcnR5LCB7CiAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24o
KQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2xDb250ZXh0W25hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsQ29udGV4
dFtwcm9wZXJ0eV07CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAg
IHNldDogZnVuY3Rpb24odmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdsQ29udGV4dFtuYW1lXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xDb250ZXh0W3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKHZhciBvID0g
Z2xDb250ZXh0OyBvOyBvID0gby5fX3Byb3RvX18pCi0gICAgICAgICAgICBPYmplY3QuZ2V0T3du
UHJvcGVydHlOYW1lcyhvKS5mb3JFYWNoKHByb2Nlc3NOYW1lKTsKKyAgICAgICAgZm9yICh2YXIg
cHJvcGVydHkgaW4gZ2xDb250ZXh0KQorICAgICAgICAgICAgcHJvY2Vzc1Byb3BlcnR5KHByb3Bl
cnR5KTsKIAogICAgICAgICAvLyBJbiBvcmRlciB0byBlbXVsYXRlICJpbnN0YW5jZW9mIi4KICAg
ICAgICAgcHJveHkuX19wcm90b19fID0gZ2xDb250ZXh0Ll9fcHJvdG9fXzsKICAgICAgICAgcHJv
eHkuY29uc3RydWN0b3IgPSBnbENvbnRleHQuY29uc3RydWN0b3I7CiAKLSAgICAgICAgdmFyIGNv
bnRleHRJZCA9IHRoaXMuX2dlbmVyYXRlT2JqZWN0SWQoKTsKLSAgICAgICAgdGhpcy5faWRUb1dy
YXBwZXJQcm94eVtjb250ZXh0SWRdID0gcHJveHk7Ci0gICAgICAgIHRoaXMuX2lkVG9SZWFsV2Vi
R0xDb250ZXh0W2NvbnRleHRJZF0gPSBnbENvbnRleHQ7Ci0gICAgICAgIEluamVjdGVkU2NyaXB0
SG9zdC53ZWJHTENvbnRleHRDcmVhdGVkKGNvbnRleHRJZCk7Ci0KICAgICAgICAgcmV0dXJuIHBy
b3h5OwogICAgIH0sCiAKLSAgICBfZ2VuZXJhdGVPYmplY3RJZDogZnVuY3Rpb24oKQorICAgIF93
cmFwQ3VzdG9tRnVuY3Rpb246IGZ1bmN0aW9uKHJlc291cmNlLCBvcmlnaW5hbE9iamVjdCwgb3Jp
Z2luYWxGdW5jdGlvbiwgZnVuY3Rpb25OYW1lLCBjdXN0b21XcmFwRnVuY3Rpb24pCiAgICAgewot
ICAgICAgICB2YXIgaWQgPSArK3RoaXMuX2xhc3RCb3VuZE9iamVjdElkOwotICAgICAgICB2YXIg
b2JqZWN0SWQgPSAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsg
IixcIndlYkdMSWRcIjoiICsgaWQgKyAifSI7Ci0gICAgICAgIHJldHVybiBvYmplY3RJZDsKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNv
dXJjZS5tYW5hZ2VyOworICAgICAgICAgICAgaWYgKG1hbmFnZXIpCisgICAgICAgICAgICAgICAg
bWFuYWdlci5yZXBvcnRCZWZvcmVDYWxsKHJlc291cmNlLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50
cyk7CisgICAgICAgICAgICB2YXIgd3JhcEZ1bmN0aW9uID0gbmV3IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dFJlc291cmNlLldyYXBGdW5jdGlvbihvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxGdW5jdGlv
biwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHMpOworICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0
aW9uLmFwcGx5KHdyYXBGdW5jdGlvbiwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIGlmIChtYW5h
Z2VyKQorICAgICAgICAgICAgICAgIG1hbmFnZXIucmVwb3J0Q2FsbCh3cmFwRnVuY3Rpb24uY2Fs
bCk7CisgICAgICAgICAgICByZXR1cm4gd3JhcEZ1bmN0aW9uLnJlc3VsdDsKKyAgICAgICAgfTsK
ICAgICB9LAogCi0gICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbihjb250ZXh0SWQpCisgICAgX3dy
YXBGdW5jdGlvbjogZnVuY3Rpb24ocmVzb3VyY2UsIG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1
bmN0aW9uLCBmdW5jdGlvbk5hbWUpCiAgICAgewotICAgICAgICB0aGlzLl9jYXB0dXJpbmdGcmFt
ZUluZm8gPSB7Ci0gICAgICAgICAgICBjb250ZXh0SWQ6IGNvbnRleHRJZCwKLSAgICAgICAgICAg
IGNhcHR1cmVkQ2FsbHNOdW06IDAKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5tYW5hZ2VyOworICAgICAgICAgICAgaWYgKCFt
YW5hZ2VyIHx8ICFtYW5hZ2VyLmNhcHR1cmluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Jp
Z2luYWxGdW5jdGlvbi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKKyAgICAgICAg
ICAgIG1hbmFnZXIucmVwb3J0QmVmb3JlQ2FsbChyZXNvdXJjZSwgZnVuY3Rpb25OYW1lLCBhcmd1
bWVudHMpOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9yaWdpbmFsRnVuY3Rpb24uYXBwbHko
b3JpZ2luYWxPYmplY3QsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB2YXIgY2FsbCA9IG5ldyBD
YWxsKHJlc291cmNlLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cywgcmVzdWx0KTsKKyAgICAgICAg
ICAgIG1hbmFnZXIucmVwb3J0Q2FsbChjYWxsKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH07CisgICAgfQorfTsKKworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Uu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFJlc291cmNlLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29u
c3RydWN0b3IKKyAqLworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuV3JhcEZ1bmN0aW9u
ID0gZnVuY3Rpb24ob3JpZ2luYWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFt
ZSwgYXJncykKK3sKKyAgICB0aGlzLl9vcmlnaW5hbE9iamVjdCA9IG9yaWdpbmFsT2JqZWN0Owor
ICAgIHRoaXMuX29yaWdpbmFsRnVuY3Rpb24gPSBvcmlnaW5hbEZ1bmN0aW9uOworICAgIHRoaXMu
X2Z1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTsKKyAgICB0aGlzLl9hcmdzID0gYXJnczsKKyAg
ICB0aGlzLl9nbFJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KG9yaWdpbmFsT2JqZWN0KTsK
K307CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLldyYXBGdW5jdGlvbi5wcm90b3R5
cGUgPSB7CisgICAgZ2V0IHJlc3VsdCgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2V4ZWN1
dGVkKSB7CisgICAgICAgICAgICB0aGlzLl9leGVjdXRlZCA9IHRydWU7CisgICAgICAgICAgICB0
aGlzLl9yZXN1bHQgPSB0aGlzLl9vcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KHRoaXMuX29yaWdpbmFs
T2JqZWN0LCB0aGlzLl9hcmdzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fcmVz
dWx0OworICAgIH0sCisKKyAgICBnZXQgY2FsbCgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMu
X2NhbGwpCisgICAgICAgICAgICB0aGlzLl9jYWxsID0gbmV3IENhbGwodGhpcy5fZ2xSZXNvdXJj
ZSwgdGhpcy5fZnVuY3Rpb25OYW1lLCB0aGlzLl9hcmdzLCB0aGlzLnJlc3VsdCk7CisgICAgICAg
IHJldHVybiB0aGlzLl9jYWxsOworICAgIH0KK307CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJl
c291cmNlLldyYXBGdW5jdGlvbnMgPSB7CisgICAgX19wcm90b19fOiBudWxsLAorICAgIAorICAg
IC8vIEZJWE1FOiBvdmVycmlkZSBHTCBjYWxscyBhZmZlY3RpbmcgcmVzb3VyY2VzIHN0YXRlcyBo
ZXJlLgorfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFRyYWNlTG9nID0gZnVu
Y3Rpb24oKQoreworICAgIHRoaXMuX2NhbGxzID0gW107CisgICAgdGhpcy5fcmVzb3VyY2VDYWNo
ZSA9IG5ldyBSZXNvdXJjZUNhY2hlKCk7Cit9CisKK1RyYWNlTG9nLnByb3RvdHlwZSA9IHsKKyAg
ICBnZXQgbGVuZ3RoKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jYWxscy5sZW5ndGg7
CiAgICAgfSwKIAotICAgIF9zdG9wQ2FwdHVyaW5nOiBmdW5jdGlvbihpbmZvKQorICAgIGdldCBy
ZXNvdXJjZUNhY2hlKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jYXB0dXJpbmdGcmFtZUlu
Zm8gPT09IGluZm8pCi0gICAgICAgICAgICB0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gPSBudWxs
OworICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VDYWNoZTsKICAgICB9LAogCi0gICAgX3dy
YXBwZWRGdW5jdGlvbjogZnVuY3Rpb24oZ2xDb250ZXh0LCBmdW5jdGlvbk5hbWUpCisgICAgY2Fw
dHVyZVJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKICAgICB7Ci0gICAgICAgIC8vIENhbGwg
cmVhbCBXZWJHTCBmdW5jdGlvbi4KLSAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwotICAgICAgICB2YXIgcmVzdWx0ID0gZ2xDb250ZXh0
W2Z1bmN0aW9uTmFtZV0uYXBwbHkoZ2xDb250ZXh0LCBhcmdzKTsKKyAgICAgICAgLy8gRklYTUU6
IENhcHR1cmUgY3VycmVudCByZXNvdXJjZSBzdGF0ZSB0byBzdGFydCB0aGUgcmVwbGF5IGZyb20u
CisgICAgfSwKIAotICAgICAgICBpZiAodGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvICYmIHRoaXMu
X2lkVG9SZWFsV2ViR0xDb250ZXh0W3RoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mby5jb250ZXh0SWRd
ID09PSBnbENvbnRleHQpIHsKLSAgICAgICAgICAgIHZhciBjYXB0dXJlZENhbGxzTnVtID0gKyt0
aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8uY2FwdHVyZWRDYWxsc051bTsKLSAgICAgICAgICAgIGlm
IChjYXB0dXJlZENhbGxzTnVtID09PSAxKQotICAgICAgICAgICAgICAgIHRoaXMuX3NldFplcm9U
aW1lb3V0cyh0aGlzLl9zdG9wQ2FwdHVyaW5nLmJpbmQodGhpcywgdGhpcy5fY2FwdHVyaW5nRnJh
bWVJbmZvKSk7Ci0gICAgICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3Qud2ViR0xSZXBvcnRGdW5j
dGlvbkNhbGwodGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvLmNvbnRleHRJZCwgZnVuY3Rpb25OYW1l
LCAiWyIgKyBhcmdzLmpvaW4oIiwgIikgKyAiXSIsIHJlc3VsdCArICIiKTsKKyAgICBhZGRDYWxs
OiBmdW5jdGlvbihjYWxsKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IENsb25lIGNhbGwgYW5k
IHB1c2ggdGhlIGNsb25lLgorICAgICAgICBjYWxsLmZyZWV6ZSgpOworICAgICAgICB0aGlzLl9j
YWxscy5wdXNoKGNhbGwpOworICAgIH0KK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8K
K3ZhciBSZXNvdXJjZVRyYWNraW5nTWFuYWdlciA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLl9j
YXB0dXJpbmcgPSBmYWxzZTsKKyAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZh
bHNlOworICAgIHRoaXMuX3RyYWNlTG9nID0gbnVsbDsKK30KKworUmVzb3VyY2VUcmFja2luZ01h
bmFnZXIucHJvdG90eXBlID0geworICAgIGdldCBjYXB0dXJpbmcoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2NhcHR1cmluZzsKKyAgICB9LAorCisgICAgZ2V0IHRyYWNlTG9nKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl90cmFjZUxvZzsKKyAgICB9LAorCisgICAgcmVnaXN0
ZXJSZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgeworICAgICAgICByZXNvdXJjZS5t
YW5hZ2VyID0gdGhpczsKKyAgICB9LAorCisgICAgc3RhcnRDYXB0dXJpbmc6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQorICAgICAgICAgICAgdGhpcy5f
dHJhY2VMb2cgPSBuZXcgVHJhY2VMb2coKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0gdHJ1
ZTsKKyAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsKKyAgICB9
LAorCisgICAgc3RvcENhcHR1cmluZzogZnVuY3Rpb24odHJhY2VMb2cpCisgICAgeworICAgICAg
ICBpZiAodHJhY2VMb2cgJiYgdGhpcy5fdHJhY2VMb2cgIT09IHRyYWNlTG9nKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsKKyAgICB9LAorCisgICAgY2FwdHVy
ZUZyYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl90cmFjZUxvZyA9IG5ldyBU
cmFjZUxvZygpOworICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICB0aGlz
Ll9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IHRydWU7CisgICAgfSwKKworICAgIHJlcG9ydEJl
Zm9yZUNhbGw6IGZ1bmN0aW9uKHJlc291cmNlLCBmdW5jdGlvbk5hbWUsIGFyZ3MpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdGhpcy5fdHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIG4gPSBhcmdzLmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAg
dmFyIHJlcyA9IFJlc291cmNlLmZvck9iamVjdChhcmdzW2ldKTsKKyAgICAgICAgICAgIGlmIChy
ZXMpCisgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJlcyk7
CiAgICAgICAgIH0KKyAgICB9LAogCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmVwb3J0
Q2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY2FwdHVyaW5n
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl90cmFjZUxvZy5hZGRDYWxsKGNh
bGwpOworICAgICAgICBpZiAodGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgJiYgdGhpcy5f
dHJhY2VMb2cubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5n
T25GcmFtZUVuZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fc2V0WmVyb1RpbWVvdXRzKHRo
aXMuc3RvcENhcHR1cmluZy5iaW5kKHRoaXMsIHRoaXMuX3RyYWNlTG9nKSk7CisgICAgICAgIH0K
ICAgICB9LAogCiAgICAgX3NldFplcm9UaW1lb3V0czogZnVuY3Rpb24oY2FsbGJhY2spCkBAIC0x
MzksNiArMzkzLDI5IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICB9CiB9Owog
CisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgSW5qZWN0ZWRTY3JpcHQgPSBmdW5jdGlv
bigpCit7CisgICAgdGhpcy5fbWFuYWdlciA9IG5ldyBSZXNvdXJjZVRyYWNraW5nTWFuYWdlcigp
OworfQorCitJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CisgICAgd3JhcFdlYkdMQ29udGV4
dDogZnVuY3Rpb24oZ2xDb250ZXh0KQorICAgIHsKKyAgICAgICAgdmFyIHJlc291cmNlID0gUmVz
b3VyY2UuZm9yT2JqZWN0KGdsQ29udGV4dCkgfHwgbmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJl
c291cmNlKGdsQ29udGV4dCk7CisgICAgICAgIHRoaXMuX21hbmFnZXIucmVnaXN0ZXJSZXNvdXJj
ZShyZXNvdXJjZSk7CisgICAgICAgIHZhciBwcm94eSA9IHJlc291cmNlLnByb3h5T2JqZWN0Owor
ICAgICAgICByZXR1cm4gcHJveHk7CisgICAgfSwKKworICAgIGNhcHR1cmVGcmFtZTogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFuYWdlci5jYXB0dXJlRnJhbWUoKTsKKyAgICB9
Cit9OworCiB2YXIgaW5qZWN0ZWRTY3JpcHQgPSBuZXcgSW5qZWN0ZWRTY3JpcHQoKTsKIHJldHVy
biBpbmplY3RlZFNjcmlwdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155286</attachid>
            <date>2012-07-30 07:19:42 -0700</date>
            <delta_ts>2012-07-30 07:58:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90597-20120730181926.patch</filename>
            <type>text/plain</type>
            <size>14010</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJlZTRlOTM2YTg2NDAw
NDZmZDdkYzgzNzkzZGU2MjllMzNmY2VhMC4uMmMzZThiZDczODM5Yjc2NGM4NjBhMjQ4YzBjNGE1
ZWJlMWQ2MDg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
cmFwIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMgYW5kIGNvbGxlY3QgYSB0cmFjZSBs
b2cgaWYgd2UgYXJlIGluIGNhcHR1cmluZyBtb2RlLgorICAgICAgICBTdHViYmVkIGNvZGUgZm9y
IGNvbGxlY3RpbmcgY2FsbHMgY29udHJpYnV0aW5nIHRvIGEgV2ViR0wgcmVzb3VyY2Ugc3RhdGUg
c28gdGhhdCB3ZSBjb3VsZCByZXBsYXkgdGhlbSBsYXRlci4KKworICAgICAgICBUeXBpY2FsIHNj
ZW5hcmlvOgorICAgICAgICAtIHdlIHdyYXAgYSBHTCBjb250ZXh0IHdpdGggSW5qZWN0ZWRTY3Jp
cHQud3JhcFdlYkdMQ29udGV4dCgpIGFuZCByZXR1cm4gYSBwcm94eSB0byB0aGUgaW5zcGVjdGVk
IHBhZ2UKKyAgICAgICAgLSB0aGUgcHJveHkgc2F2ZXMgYWxsIGNhbGxzIG5lY2Vzc2FyeSB0byBk
byBhIHJlcGxheSBsYXRlciAtIG9ubHkgdGhvc2UgdGhhdCBtb2RpZnkgYSByZXNvdXJjZSdzIHN0
YXRlCisgICAgICAgIC0gd2hlbiB3ZSB0dXJuIG9uIGNhcHR1cmluZyBtb2RlIChJbmplY3RlZFNj
cmlwdC5jYXB0dXJlRnJhbWUpLCB3ZSBzYXZlIGFsbCBXZWJHTCBjYWxscyB0byBhIHRyYWNlIGxv
ZworCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wNy0zMCAgQWxleGFuZGVyIFBhdmxvdiAgPGFw
YXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtTdHlsZXNdIE5v
IGNvbG9yIHN3YXRjaCBmb3IgdGhlIFNWRyAiZmlsbCIgYW5kICJzdHJva2UiIHByb3BlcnR5IHZh
bHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
U291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNl
LmpzCmluZGV4IDAzMzVjOTg2ODY0YmY4Njg4NDVmZThhYzRlOWNhOTM3ZDdiYWU0MjIuLmVjZGQy
NTdlYjM5M2FlNzVmNjI0NTcwZWNiOGZmYTliYjM4NDYwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTU0OCwxNSArNTQ4LDI5
IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG9iamVjdDsK
ICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAgKiBA
cmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAgIG1vZHVsZTogZnVuY3Rpb24obmFtZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGVzW25hbWVdOwogICAgIH0sCi0gCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBzb3VyY2UKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAgIGluamVjdE1v
ZHVsZTogZnVuY3Rpb24obmFtZSwgc291cmNlKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMu
X21vZHVsZXNbbmFtZV07Ci0gICAgICAgIHZhciBtb2R1bGUgPSBldmFsKCIoIiArIHNvdXJjZSAr
ICIpIik7CisgICAgICAgIHZhciBtb2R1bGVGdW5jdGlvbiA9IGV2YWwoIigiICsgc291cmNlICsg
IikiKTsKKyAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGVGdW5jdGlvbiAhPT0gImZ1bmN0aW9uIikg
eworICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93LmNvbnNvbGUuZXJyb3IoIldlYiBJbnNwZWN0
b3IgZXJyb3I6IEEgZnVuY3Rpb24gd2FzIGV4cGVjdGVkIGZvciBtb2R1bGUgJXMgZXZhbHVhdGlv
biIsIG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIG1vZHVsZSA9IG1vZHVsZUZ1bmN0aW9uLmNhbGwoaW5zcGVjdGVkV2luZG93LCBJbmplY3Rl
ZFNjcmlwdEhvc3QsIGluc3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCk7CiAgICAgICAg
IHRoaXMuX21vZHVsZXNbbmFtZV0gPSBtb2R1bGU7CiAgICAgICAgIHJldHVybiBtb2R1bGU7CiAg
ICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dFdlYkdMTW9kdWxlU291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKaW5kZXggNDQ4NGI2OThjNWZhZmVhYzhmMDJjNDQz
ODM2ZjU5YjAyMTdkMDdjNy4uYjdkMmExM2Y1MzNhODZkMGIzZWQwMzM5MGI3YTBkYzhlNjFkZDRm
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2Vi
R0xNb2R1bGVTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMKQEAgLTM0LDk4ICszNCwzMjAgQEAKIChmdW5jdGlv
biAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQp
IHsKIAogLyoqCisgKiBAcGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncwogICogQGNvbnN0cnVj
dG9yCiAgKi8KLXZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKK3ZhciBDYWxsID0gZnVu
Y3Rpb24ocmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSwgYXJncywgcmVzdWx0KQogewotICAgIHRoaXMu
X2xhc3RCb3VuZE9iamVjdElkID0gMDsKLSAgICB0aGlzLl9pZFRvV3JhcHBlclByb3h5ID0ge307
Ci0gICAgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQgPSB7fTsKLSAgICB0aGlzLl9jYXB0dXJp
bmdGcmFtZUluZm8gPSBudWxsOworICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7CisgICAg
dGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMuX3Jlc3VsdCA9IFJl
c291cmNlLmZvck9iamVjdChyZXN1bHQpIHx8IHJlc3VsdDsKKyAgICB0aGlzLl9hcmdzID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMCk7CisgICAgZm9yICh2YXIgaSA9IDAsIG4g
PSB0aGlzLl9hcmdzLmxlbmd0aDsgaSA8IG47ICsraSkKKyAgICAgICAgdGhpcy5fYXJnc1tpXSA9
IFJlc291cmNlLmZvck9iamVjdCh0aGlzLl9hcmdzW2ldKSB8fCB0aGlzLl9hcmdzW2ldOwogfQog
Ci1JbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7Ci0gICAgd3JhcFdlYkdMQ29udGV4dDogZnVu
Y3Rpb24oZ2xDb250ZXh0KQorQ2FsbC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHJlc291cmNlKCkK
ICAgICB7Ci0gICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2lkVG9SZWFsV2ViR0xDb250ZXh0
KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbaWRdID09PSBn
bENvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9XcmFwcGVyUHJveHlb
aWRdOwotICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZTsKKyAgICB9LAor
CisgICAgZ2V0IGZ1bmN0aW9uTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZnVu
Y3Rpb25OYW1lOworICAgIH0sCisKKyAgICBnZXQgYXJncygpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fYXJnczsKKyAgICB9LAorCisgICAgZ2V0IHJlc3VsdCgpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fcmVzdWx0OworICAgIH0KK307CisKKy8qKgorICogQGNvbnN0cnVjdG9y
CisgKi8KK3ZhciBSZXNvdXJjZUNhY2hlID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX3Jlc291
cmNlcyA9IHt9OworfQorCitSZXNvdXJjZUNhY2hlLnByb3RvdHlwZSA9IHsKKyAgICByZXNvdXJj
ZUJ5SWQ6IGZ1bmN0aW9uKGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNl
c1tpZF07CisgICAgfSwKKworICAgIHB1dFJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKKyAg
ICB7CisgICAgICAgIHZhciBpZCA9IHJlc291cmNlLmlkOworICAgICAgICB0aGlzLl9yZXNvdXJj
ZXNbaWRdID0gcmVzb3VyY2U7CisgICAgfQorfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAq
LwordmFyIFJlc291cmNlID0gZnVuY3Rpb24od3JhcHBlZE9iamVjdCkKK3sKKyAgICB0aGlzLl9p
ZCA9ICsrUmVzb3VyY2UuX3VuaXF1ZUlkOworICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IG51
bGw7CisgICAgdGhpcy5fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7CisgICAgdGhpcy5f
YmluZE9iamVjdFRvUmVzb3VyY2Uod3JhcHBlZE9iamVjdCk7Cit9CisKK1Jlc291cmNlLl91bmlx
dWVJZCA9IDA7CisKK1Jlc291cmNlLmZvck9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCkKK3sKKyAg
ICBpZiAoIW9iamVjdCB8fCBvYmplY3QgaW5zdGFuY2VvZiBSZXNvdXJjZSkKKyAgICAgICAgcmV0
dXJuIG9iamVjdDsKKyAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gIm9iamVjdCIpCisgICAgICAg
IHJldHVybiBvYmplY3RbIl9fcmVzb3VyY2VPYmplY3QiXTsKKyAgICByZXR1cm4gbnVsbDsKK307
CisKK1Jlc291cmNlLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgaWQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2lkOworICAgIH0sCisKKyAgICBnZXQgd3JhcHBlZE9iamVjdCgpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fd3JhcHBlZE9iamVjdDsKKyAgICB9LAorCisgICAgZ2V0
IHByb3h5T2JqZWN0KCkKKyAgICB7CisgICAgICAgIC8vIE5vIHByb3h5IHdyYXBwaW5nIGJ5IGRl
ZmF1bHQuCisgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRPYmplY3Q7CisgICAgfSwKKworICAg
IGdldCBtYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZU1hbmFn
ZXI7CisgICAgfSwKKworICAgIHNldCBtYW5hZ2VyKHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhp
cy5fcmVzb3VyY2VNYW5hZ2VyID0gdmFsdWU7CisgICAgfSwKKworICAgIF9iaW5kT2JqZWN0VG9S
ZXNvdXJjZTogZnVuY3Rpb24ob2JqZWN0KQorICAgIHsKKyAgICAgICAgb2JqZWN0WyJfX3Jlc291
cmNlT2JqZWN0Il0gPSB0aGlzOworICAgIH0sCit9OworCisvKioKKyAqIEBleHRlbmRzIHtSZXNv
dXJjZX0KKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
b3VyY2UgPSBmdW5jdGlvbihnbENvbnRleHQsIGdsQ29udGV4dEF0dHJpYnV0ZXMpCit7CisgICAg
UmVzb3VyY2UuY2FsbCh0aGlzLCBnbENvbnRleHQpOworICAgIHRoaXMuX3Byb3h5T2JqZWN0ID0g
bnVsbDsKK30KIAorV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UucHJvdG90eXBlID0gewor
ICAgIGdldCBwcm94eU9iamVjdCgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Byb3h5T2Jq
ZWN0KQorICAgICAgICAgICAgdGhpcy5fcHJveHlPYmplY3QgPSB0aGlzLl93cmFwT2JqZWN0KCk7
CisgICAgICAgIHJldHVybiB0aGlzLl9wcm94eU9iamVjdDsKKyAgICB9LAorCisgICAgX3dyYXBP
YmplY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CiAgICAgICAgIHZhciBwcm94eSA9IHt9OwotICAgICAg
ICB2YXIgbmFtZVByb2Nlc3NlZCA9IHt9OwotICAgICAgICBuYW1lUHJvY2Vzc2VkLl9fcHJvdG9f
XyA9IG51bGw7Ci0gICAgICAgIG5hbWVQcm9jZXNzZWQuY29uc3RydWN0b3IgPSB0cnVlOwotCi0g
ICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NOYW1lKG5hbWUpIHsKLSAgICAgICAgICAgIGlmIChuYW1l
UHJvY2Vzc2VkW25hbWVdKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG5h
bWVQcm9jZXNzZWRbbmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBnbENvbnRl
eHRbbmFtZV0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICAgICAgcHJveHlbbmFtZV0gPSBp
bmplY3RlZFNjcmlwdC5fd3JhcHBlZEZ1bmN0aW9uLmJpbmQoaW5qZWN0ZWRTY3JpcHQsIGdsQ29u
dGV4dCwgbmFtZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHByb3h5LCBuYW1lLCB7CisgICAgICAgIHZhciBnbENvbnRleHQgPSB0aGlz
LndyYXBwZWRPYmplY3Q7CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBmdW5j
dGlvbiBwcm9jZXNzUHJvcGVydHkocHJvcGVydHkpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Yg
Z2xDb250ZXh0W3Byb3BlcnR5XSA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBvdmVycmlkZSBHTCBjYWxscyBhZmZlY3RpbmcgcmVzb3VyY2VzIHN0YXRlcyBoZXJl
LgorICAgICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IHNlbGYuX3dyYXBGdW5jdGlvbihz
ZWxmLCBnbENvbnRleHQsIGdsQ29udGV4dFtwcm9wZXJ0eV0sIHByb3BlcnR5KTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoL15bQS1aMC05X10rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGYXN0IGFjY2VzcyB0byBlbnVtcyBhbmQgY29uc3RhbnRzLgorICAgICAgICAg
ICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IGdsQ29udGV4dFtwcm9wZXJ0eV07CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwg
cHJvcGVydHksIHsKICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbENvbnRleHRb
bmFtZV07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2xDb250ZXh0W3Byb3BlcnR5
XTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5j
dGlvbih2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xDb250ZXh0W25hbWVdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBnbENv
bnRleHRbcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZvciAodmFy
IG8gPSBnbENvbnRleHQ7IG87IG8gPSBvLl9fcHJvdG9fXykKLSAgICAgICAgICAgIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG8pLmZvckVhY2gocHJvY2Vzc05hbWUpOworICAgICAgICBmb3Ig
KHZhciBwcm9wZXJ0eSBpbiBnbENvbnRleHQpCisgICAgICAgICAgICBwcm9jZXNzUHJvcGVydHko
cHJvcGVydHkpOwogCiAgICAgICAgIC8vIEluIG9yZGVyIHRvIGVtdWxhdGUgImluc3RhbmNlb2Yi
LgogICAgICAgICBwcm94eS5fX3Byb3RvX18gPSBnbENvbnRleHQuX19wcm90b19fOwotICAgICAg
ICBwcm94eS5jb25zdHJ1Y3RvciA9IGdsQ29udGV4dC5jb25zdHJ1Y3RvcjsKLQotICAgICAgICB2
YXIgY29udGV4dElkID0gdGhpcy5fZ2VuZXJhdGVPYmplY3RJZCgpOwotICAgICAgICB0aGlzLl9p
ZFRvV3JhcHBlclByb3h5W2NvbnRleHRJZF0gPSBwcm94eTsKLSAgICAgICAgdGhpcy5faWRUb1Jl
YWxXZWJHTENvbnRleHRbY29udGV4dElkXSA9IGdsQ29udGV4dDsKLSAgICAgICAgSW5qZWN0ZWRT
Y3JpcHRIb3N0LndlYkdMQ29udGV4dENyZWF0ZWQoY29udGV4dElkKTsKIAogICAgICAgICByZXR1
cm4gcHJveHk7CiAgICAgfSwKIAotICAgIF9nZW5lcmF0ZU9iamVjdElkOiBmdW5jdGlvbigpCisg
ICAgX3dyYXBGdW5jdGlvbjogZnVuY3Rpb24ocmVzb3VyY2UsIG9yaWdpbmFsT2JqZWN0LCBvcmln
aW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUpCiAgICAgewotICAgICAgICB2YXIgaWQgPSArK3Ro
aXMuX2xhc3RCb3VuZE9iamVjdElkOwotICAgICAgICB2YXIgb2JqZWN0SWQgPSAie1wiaW5qZWN0
ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIixcIndlYkdMSWRcIjoiICsgaWQg
KyAifSI7Ci0gICAgICAgIHJldHVybiBvYmplY3RJZDsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5tYW5hZ2VyOworICAgICAg
ICAgICAgaWYgKCFtYW5hZ2VyIHx8ICFtYW5hZ2VyLmNhcHR1cmluZykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvbi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRz
KTsKKyAgICAgICAgICAgIG1hbmFnZXIuY2FwdHVyZUFyZ3VtZW50cyhyZXNvdXJjZSwgYXJndW1l
bnRzKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KG9y
aWdpbmFsT2JqZWN0LCBhcmd1bWVudHMpOworICAgICAgICAgICAgdmFyIGNhbGwgPSBuZXcgQ2Fs
bChyZXNvdXJjZSwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHMsIHJlc3VsdCk7CisgICAgICAgICAg
ICBtYW5hZ2VyLnJlcG9ydENhbGwoY2FsbCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9OworICAgIH0KK307CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBSZXNvdXJjZS5wcm90b3R5cGU7CisKKy8qKgorICogQGNvbnN0
cnVjdG9yCisgKi8KK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLldyYXBGdW5jdGlvbiA9
IGZ1bmN0aW9uKG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUs
IGFyZ3MpCit7CisgICAgdGhpcy5fb3JpZ2luYWxPYmplY3QgPSBvcmlnaW5hbE9iamVjdDsKKyAg
ICB0aGlzLl9vcmlnaW5hbEZ1bmN0aW9uID0gb3JpZ2luYWxGdW5jdGlvbjsKKyAgICB0aGlzLl9m
dW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7CisgICAg
dGhpcy5fZ2xSZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChvcmlnaW5hbE9iamVjdCk7Cit9
OworCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5XcmFwRnVuY3Rpb24ucHJvdG90eXBl
ID0geworICAgIGdldCByZXN1bHQoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRl
ZCkgeworICAgICAgICAgICAgdGhpcy5fZXhlY3V0ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhp
cy5fcmVzdWx0ID0gdGhpcy5fb3JpZ2luYWxGdW5jdGlvbi5hcHBseSh0aGlzLl9vcmlnaW5hbE9i
amVjdCwgdGhpcy5fYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3Vs
dDsKICAgICB9LAogCi0gICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbihjb250ZXh0SWQpCisgICAg
Z2V0IGNhbGwoKQogICAgIHsKLSAgICAgICAgdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID0gewot
ICAgICAgICAgICAgY29udGV4dElkOiBjb250ZXh0SWQsCi0gICAgICAgICAgICBjYXB0dXJlZENh
bGxzTnVtOiAwCi0gICAgICAgIH07CisgICAgICAgIGlmICghdGhpcy5fY2FsbCkKKyAgICAgICAg
ICAgIHRoaXMuX2NhbGwgPSBuZXcgQ2FsbCh0aGlzLl9nbFJlc291cmNlLCB0aGlzLl9mdW5jdGlv
bk5hbWUsIHRoaXMuX2FyZ3MsIHRoaXMucmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Nh
bGw7CisgICAgfQorfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFRyYWNlTG9n
ID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX2NhbGxzID0gW107CisgICAgdGhpcy5fcmVzb3Vy
Y2VDYWNoZSA9IG5ldyBSZXNvdXJjZUNhY2hlKCk7Cit9CisKK1RyYWNlTG9nLnByb3RvdHlwZSA9
IHsKKyAgICBnZXQgbGVuZ3RoKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jYWxscy5s
ZW5ndGg7CiAgICAgfSwKIAotICAgIF9zdG9wQ2FwdHVyaW5nOiBmdW5jdGlvbihpbmZvKQorICAg
IGdldCByZXNvdXJjZUNhY2hlKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jYXB0dXJpbmdG
cmFtZUluZm8gPT09IGluZm8pCi0gICAgICAgICAgICB0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8g
PSBudWxsOworICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VDYWNoZTsKICAgICB9LAogCi0g
ICAgX3dyYXBwZWRGdW5jdGlvbjogZnVuY3Rpb24oZ2xDb250ZXh0LCBmdW5jdGlvbk5hbWUpCisg
ICAgY2FwdHVyZVJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBDYXB0dXJlIGN1cnJlbnQgcmVzb3VyY2Ugc3RhdGUgdG8gc3RhcnQgdGhlIHJlcGxh
eSBmcm9tLgorICAgIH0sCisKKyAgICBhZGRDYWxsOiBmdW5jdGlvbihjYWxsKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IENsb25lIGNhbGwgYW5kIHB1c2ggdGhlIGNsb25lLgorICAgICAgICB0
aGlzLl9jYWxscy5wdXNoKGNhbGwpOworICAgIH0KK307CisKKy8qKgorICogQGNvbnN0cnVjdG9y
CisgKi8KK3ZhciBSZXNvdXJjZVRyYWNraW5nTWFuYWdlciA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0
aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVu
ZCA9IGZhbHNlOworICAgIHRoaXMuX3RyYWNlTG9nID0gbnVsbDsKK30KKworUmVzb3VyY2VUcmFj
a2luZ01hbmFnZXIucHJvdG90eXBlID0geworICAgIGdldCBjYXB0dXJpbmcoKQogICAgIHsKLSAg
ICAgICAgLy8gQ2FsbCByZWFsIFdlYkdMIGZ1bmN0aW9uLgotICAgICAgICB2YXIgYXJncyA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAgICAgIHZhciByZXN1
bHQgPSBnbENvbnRleHRbZnVuY3Rpb25OYW1lXS5hcHBseShnbENvbnRleHQsIGFyZ3MpOworICAg
ICAgICByZXR1cm4gdGhpcy5fY2FwdHVyaW5nOworICAgIH0sCiAKLSAgICAgICAgaWYgKHRoaXMu
X2NhcHR1cmluZ0ZyYW1lSW5mbyAmJiB0aGlzLl9pZFRvUmVhbFdlYkdMQ29udGV4dFt0aGlzLl9j
YXB0dXJpbmdGcmFtZUluZm8uY29udGV4dElkXSA9PT0gZ2xDb250ZXh0KSB7Ci0gICAgICAgICAg
ICB2YXIgY2FwdHVyZWRDYWxsc051bSA9ICsrdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvLmNhcHR1
cmVkQ2FsbHNOdW07Ci0gICAgICAgICAgICBpZiAoY2FwdHVyZWRDYWxsc051bSA9PT0gMSkKLSAg
ICAgICAgICAgICAgICB0aGlzLl9zZXRaZXJvVGltZW91dHModGhpcy5fc3RvcENhcHR1cmluZy5i
aW5kKHRoaXMsIHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mbykpOwotICAgICAgICAgICAgSW5qZWN0
ZWRTY3JpcHRIb3N0LndlYkdMUmVwb3J0RnVuY3Rpb25DYWxsKHRoaXMuX2NhcHR1cmluZ0ZyYW1l
SW5mby5jb250ZXh0SWQsIGZ1bmN0aW9uTmFtZSwgIlsiICsgYXJncy5qb2luKCIsICIpICsgIl0i
LCByZXN1bHQgKyAiIik7CisgICAgZ2V0IHRyYWNlTG9nKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl90cmFjZUxvZzsKKyAgICB9LAorCisgICAgcmVnaXN0ZXJSZXNvdXJjZTogZnVuY3Rp
b24ocmVzb3VyY2UpCisgICAgeworICAgICAgICByZXNvdXJjZS5tYW5hZ2VyID0gdGhpczsKKyAg
ICB9LAorCisgICAgc3RhcnRDYXB0dXJpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlm
ICghdGhpcy5fY2FwdHVyaW5nKQorICAgICAgICAgICAgdGhpcy5fdHJhY2VMb2cgPSBuZXcgVHJh
Y2VMb2coKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5f
c3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsKKyAgICB9LAorCisgICAgc3RvcENhcHR1
cmluZzogZnVuY3Rpb24odHJhY2VMb2cpCisgICAgeworICAgICAgICBpZiAodHJhY2VMb2cgJiYg
dGhpcy5fdHJhY2VMb2cgIT09IHRyYWNlTG9nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09u
RnJhbWVFbmQgPSBmYWxzZTsKKyAgICB9LAorCisgICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB0aGlzLl90cmFjZUxvZyA9IG5ldyBUcmFjZUxvZygpOworICAgICAg
ICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25G
cmFtZUVuZCA9IHRydWU7CisgICAgfSwKKworICAgIGNhcHR1cmVBcmd1bWVudHM6IGZ1bmN0aW9u
KHJlc291cmNlLCBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX3RyYWNlTG9nLmNhcHR1cmVSZXNvdXJj
ZShyZXNvdXJjZSk7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gYXJncy5sZW5ndGg7IGkg
PCBuOyArK2kpIHsKKyAgICAgICAgICAgIHZhciByZXMgPSBSZXNvdXJjZS5mb3JPYmplY3QoYXJn
c1tpXSk7CisgICAgICAgICAgICBpZiAocmVzKQorICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNl
TG9nLmNhcHR1cmVSZXNvdXJjZShyZXMpOwogICAgICAgICB9CisgICAgfSwKIAotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJlcG9ydENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAgeworICAg
ICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
dGhpcy5fdHJhY2VMb2cuYWRkQ2FsbChjYWxsKTsKKyAgICAgICAgaWYgKHRoaXMuX3N0b3BDYXB0
dXJpbmdPbkZyYW1lRW5kICYmIHRoaXMuX3RyYWNlTG9nLmxlbmd0aCA9PT0gMSkgeworICAgICAg
ICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsKKyAgICAgICAgICAg
IHRoaXMuX3NldFplcm9UaW1lb3V0cyh0aGlzLnN0b3BDYXB0dXJpbmcuYmluZCh0aGlzLCB0aGlz
Ll90cmFjZUxvZykpOworICAgICAgICB9CiAgICAgfSwKIAogICAgIF9zZXRaZXJvVGltZW91dHM6
IGZ1bmN0aW9uKGNhbGxiYWNrKQpAQCAtMTM5LDYgKzM2MSwyOSBAQCBJbmplY3RlZFNjcmlwdC5w
cm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAorLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFy
IEluamVjdGVkU2NyaXB0ID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX21hbmFnZXIgPSBuZXcg
UmVzb3VyY2VUcmFja2luZ01hbmFnZXIoKTsKK30KKworSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBl
ID0geworICAgIHdyYXBXZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkKKyAgICB7Cisg
ICAgICAgIHZhciByZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChnbENvbnRleHQpIHx8IG5l
dyBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQpOworICAgICAgICB0aGlz
Ll9tYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICB2YXIgcHJveHkg
PSByZXNvdXJjZS5wcm94eU9iamVjdDsKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisK
KyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX21hbmFn
ZXIuY2FwdHVyZUZyYW1lKCk7CisgICAgfQorfTsKKwogdmFyIGluamVjdGVkU2NyaXB0ID0gbmV3
IEluamVjdGVkU2NyaXB0KCk7CiByZXR1cm4gaW5qZWN0ZWRTY3JpcHQ7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159366</attachid>
            <date>2012-08-20 01:43:03 -0700</date>
            <delta_ts>2012-08-20 08:27:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90597-20120820124223.patch</filename>
            <type>text/plain</type>
            <size>14345</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg3OTdiMWE5MjJkM2M3
M2ZhN2M0OGI2NGE0Mjg0MDU0OGQ5YzM2MC4uNTA0ZmU1NmQxNDNjYTA0OTk5ZTIyNzdhNTRmYzI0
ZTQ0NDkwNWRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
cmFwIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMgYW5kIGNvbGxlY3QgYSB0cmFjZSBs
b2cgaWYgd2UgYXJlIGluIGNhcHR1cmluZyBtb2RlLgorICAgICAgICBTdHViYmVkIGNvZGUgZm9y
IGNvbGxlY3RpbmcgY2FsbHMgY29udHJpYnV0aW5nIHRvIGEgV2ViR0wgcmVzb3VyY2Ugc3RhdGUg
c28gdGhhdCB3ZSBjb3VsZCByZXBsYXkgdGhlbSBsYXRlci4KKworICAgICAgICBUeXBpY2FsIHNj
ZW5hcmlvOgorICAgICAgICAtIHdlIHdyYXAgYSBHTCBjb250ZXh0IHdpdGggSW5qZWN0ZWRTY3Jp
cHQud3JhcFdlYkdMQ29udGV4dCgpIGFuZCByZXR1cm4gYSBwcm94eSB0byB0aGUgaW5zcGVjdGVk
IHBhZ2UKKyAgICAgICAgLSB0aGUgcHJveHkgc2F2ZXMgYWxsIGNhbGxzIG5lY2Vzc2FyeSB0byBk
byBhIHJlcGxheSBsYXRlciAtIG9ubHkgdGhvc2UgdGhhdCBtb2RpZnkgYSByZXNvdXJjZSdzIHN0
YXRlCisgICAgICAgIC0gd2hlbiB3ZSB0dXJuIG9uIGNhcHR1cmluZyBtb2RlIChJbmplY3RlZFNj
cmlwdC5jYXB0dXJlRnJhbWUpLCB3ZSBzYXZlIGFsbCBXZWJHTCBjYWxscyB0byBhIHRyYWNlIGxv
ZworCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wOC0xOSAgS2VudGFybyBIYXJhICA8aGFyYWtl
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBNb3ZlIGNvbnRleHREZWJ1Z0lkKCkgYW5k
IHNldENvbnRleHREZWJ1Z0lkKCkgZnJvbSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwppbmRl
eCAwNjliN2MwMDM5YmMzNmNlNWU3ZDE0NzUxYWY5YWY5N2NjNDdlZGMwLi5iZTU5MDVlYjQ3Njgw
OWM5M2E3ZmM1MjAxY2I4ZjQ4ZGFhOWRlNjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC01NTQsMTUgKzU1NCwyOSBAQCBJbmpl
Y3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfSwK
IAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICogQHJldHVybiB7
T2JqZWN0fQorICAgICAqLyAKICAgICBtb2R1bGU6IGZ1bmN0aW9uKG5hbWUpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fbW9kdWxlc1tuYW1lXTsKICAgICB9LAotIAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNl
CisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLyAKICAgICBpbmplY3RNb2R1bGU6IGZ1
bmN0aW9uKG5hbWUsIHNvdXJjZSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9tb2R1bGVz
W25hbWVdOwotICAgICAgICB2YXIgbW9kdWxlID0gZXZhbCgiKCIgKyBzb3VyY2UgKyAiKSIpOwor
ICAgICAgICB2YXIgbW9kdWxlRnVuY3Rpb24gPSBldmFsKCIoIiArIHNvdXJjZSArICIpIik7Cisg
ICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsKKyAgICAg
ICAgICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmVycm9yKCJXZWIgSW5zcGVjdG9yIGVycm9y
OiBBIGZ1bmN0aW9uIHdhcyBleHBlY3RlZCBmb3IgbW9kdWxlICVzIGV2YWx1YXRpb24iLCBuYW1l
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBtb2R1
bGUgPSBtb2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3RlZFdpbmRvdywgSW5qZWN0ZWRTY3JpcHRI
b3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQpOwogICAgICAgICB0aGlzLl9t
b2R1bGVzW25hbWVdID0gbW9kdWxlOwogICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgIH0sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZVNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlU291cmNlLmpzCmluZGV4IDQ0ODRiNjk4YzVmYWZlYWM4ZjAyYzQ0MzgzNmY1OWIw
MjE3ZDA3YzcuLjViOWFmYzZmZWFmNjgxMDRlMmVjOTVmMTNkMjY5NWE2ZWQzNDU0ODEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
U291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlU291cmNlLmpzCkBAIC0zNiw5NiArMzYsMzM2IEBACiAvKioKICAqIEBjb25zdHJ1
Y3RvcgogICovCi12YXIgSW5qZWN0ZWRTY3JpcHQgPSBmdW5jdGlvbigpCit2YXIgQ2FjaGUgPSBm
dW5jdGlvbigpCiB7Ci0gICAgdGhpcy5fbGFzdEJvdW5kT2JqZWN0SWQgPSAwOwotICAgIHRoaXMu
X2lkVG9XcmFwcGVyUHJveHkgPSB7fTsKLSAgICB0aGlzLl9pZFRvUmVhbFdlYkdMQ29udGV4dCA9
IHt9OwotICAgIHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mbyA9IG51bGw7CisgICAgdGhpcy5yZXNl
dCgpOwogfQogCi1JbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7Ci0gICAgd3JhcFdlYkdMQ29u
dGV4dDogZnVuY3Rpb24oZ2xDb250ZXh0KQorQ2FjaGUucHJvdG90eXBlID0geworICAgIGdldCBz
aXplKCkKICAgICB7Ci0gICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2lkVG9SZWFsV2ViR0xD
b250ZXh0KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbaWRd
ID09PSBnbENvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9XcmFwcGVy
UHJveHlbaWRdOwotICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9zaXplOworICAgIH0s
CisKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5faXRlbXMgPSBP
YmplY3QuY3JlYXRlKG51bGwpOworICAgICAgICB0aGlzLl9zaXplID0gMDsKKyAgICB9LAorCisg
ICAgaGFzOiBmdW5jdGlvbihrZXkpCisgICAgeworICAgICAgICByZXR1cm4ga2V5IGluIHRoaXMu
X2l0ZW1zOworICAgIH0sCisKKyAgICBnZXQ6IGZ1bmN0aW9uKGtleSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9pdGVtc1trZXldOworICAgIH0sCisKKyAgICBwdXQ6IGZ1bmN0aW9uKGtl
eSwgaXRlbSkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5oYXMoa2V5KSkKKyAgICAgICAgICAg
ICsrdGhpcy5fc2l6ZTsKKyAgICAgICAgdGhpcy5faXRlbXNba2V5XSA9IGl0ZW07CisgICAgfQor
fTsKKworLyoqCisgKiBAcGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncworICogQGNvbnN0cnVj
dG9yCisgKi8KK3ZhciBDYWxsID0gZnVuY3Rpb24ocmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSwgYXJn
cywgcmVzdWx0KQoreworICAgIHRoaXMuX3RoaXNPYmplY3QgPSB0aGlzT2JqZWN0OworICAgIHRo
aXMuX2Z1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTsKKyAgICB0aGlzLl9hcmdzID0gQXJyYXku
cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMCk7CisgICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0
OworfQorCitDYWxsLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgcmVzb3VyY2UoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFJlc291cmNlLmZvck9iamVjdCh0aGlzLl90aGlzT2JqZWN0KTsKKyAgICB9
LAorCisgICAgZ2V0IGZ1bmN0aW9uTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
ZnVuY3Rpb25OYW1lOworICAgIH0sCisKKyAgICBnZXQgYXJncygpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fYXJnczsKKyAgICB9LAorCisgICAgZ2V0IHJlc3VsdCgpCisgICAgeworICAg
ICAgICByZXR1cm4gdGhpcy5fcmVzdWx0OworICAgIH0KK307CisKKy8qKgorICogQGNvbnN0cnVj
dG9yCisgKi8KK3ZhciBSZXNvdXJjZSA9IGZ1bmN0aW9uKHdyYXBwZWRPYmplY3QpCit7CisgICAg
dGhpcy5faWQgPSArK1Jlc291cmNlLl91bmlxdWVJZDsKKyAgICB0aGlzLl9yZXNvdXJjZU1hbmFn
ZXIgPSBudWxsOworICAgIHRoaXMud3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7Cit9CisK
K1Jlc291cmNlLl91bmlxdWVJZCA9IDA7CisKK1Jlc291cmNlLmZvck9iamVjdCA9IGZ1bmN0aW9u
KG9iaikKK3sKKyAgICBpZiAoIW9iaiB8fCBvYmogaW5zdGFuY2VvZiBSZXNvdXJjZSkKKyAgICAg
ICAgcmV0dXJuIG9iajsKKyAgICBpZiAodHlwZW9mIG9iaiA9PT0gIm9iamVjdCIpCisgICAgICAg
IHJldHVybiBvYmpbIl9fcmVzb3VyY2VPYmplY3QiXTsKKyAgICByZXR1cm4gbnVsbDsKK307CisK
K1Jlc291cmNlLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgaWQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2lkOworICAgIH0sCisKKyAgICBnZXQgd3JhcHBlZE9iamVjdCgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fd3JhcHBlZE9iamVjdDsKKyAgICB9LAorCisgICAgc2V0IHdy
YXBwZWRPYmplY3QodmFsdWUpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh2YWx1ZSAm
JiAhKHZhbHVlIGluc3RhbmNlb2YgUmVzb3VyY2UpLCAiQmluZGluZyBhIFJlc291cmNlIG9iamVj
dCB0byBhbm90aGVyIFJlc291cmNlIG9iamVjdD8iKTsKKyAgICAgICAgdGhpcy5fd3JhcHBlZE9i
amVjdCA9IHZhbHVlOworICAgICAgICB0aGlzLl9iaW5kT2JqZWN0VG9SZXNvdXJjZSh2YWx1ZSk7
CisgICAgfSwKKworICAgIGdldCBwcm94eU9iamVjdCgpCisgICAgeworICAgICAgICAvLyBObyBw
cm94eSB3cmFwcGluZyBieSBkZWZhdWx0LgorICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkT2Jq
ZWN0OworICAgIH0sCisKKyAgICBnZXQgbWFuYWdlcigpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fcmVzb3VyY2VNYW5hZ2VyOworICAgIH0sCisKKyAgICBzZXQgbWFuYWdlcih2YWx1ZSkK
KyAgICB7CisgICAgICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IHZhbHVlOworICAgIH0sCisK
KyAgICBfYmluZE9iamVjdFRvUmVzb3VyY2U6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICB7CisgICAg
ICAgIG9iamVjdFsiX19yZXNvdXJjZU9iamVjdCJdID0gdGhpczsKKyAgICB9LAorfTsKKworLyoq
CisgKiBAZXh0ZW5kcyB7UmVzb3VyY2V9CisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFdlYkdM
UmVuZGVyaW5nQ29udGV4dFJlc291cmNlID0gZnVuY3Rpb24oZ2xDb250ZXh0LCBnbENvbnRleHRB
dHRyaWJ1dGVzKQoreworICAgIFJlc291cmNlLmNhbGwodGhpcywgZ2xDb250ZXh0KTsKKyAgICB0
aGlzLl9wcm94eU9iamVjdCA9IG51bGw7Cit9CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291
cmNlLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgcHJveHlPYmplY3QoKQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9wcm94eU9iamVjdCkKKyAgICAgICAgICAgIHRoaXMuX3Byb3h5T2JqZWN0ID0g
dGhpcy5fd3JhcE9iamVjdCgpOworICAgICAgICByZXR1cm4gdGhpcy5fcHJveHlPYmplY3Q7Cisg
ICAgfSwKKworICAgIF93cmFwT2JqZWN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIg
Z2xDb250ZXh0ID0gdGhpcy53cmFwcGVkT2JqZWN0OworICAgICAgICB2YXIgcHJveHkgPSBPYmpl
Y3QuY3JlYXRlKGdsQ29udGV4dC5fX3Byb3RvX18pOyAvLyBJbiBvcmRlciB0byBlbXVsYXRlICJp
bnN0YW5jZW9mIi4KIAotICAgICAgICB2YXIgcHJveHkgPSB7fTsKLSAgICAgICAgdmFyIG5hbWVQ
cm9jZXNzZWQgPSB7fTsKLSAgICAgICAgbmFtZVByb2Nlc3NlZC5fX3Byb3RvX18gPSBudWxsOwot
ICAgICAgICBuYW1lUHJvY2Vzc2VkLmNvbnN0cnVjdG9yID0gdHJ1ZTsKLQotICAgICAgICBmdW5j
dGlvbiBwcm9jZXNzTmFtZShuYW1lKSB7Ci0gICAgICAgICAgICBpZiAobmFtZVByb2Nlc3NlZFtu
YW1lXSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBuYW1lUHJvY2Vzc2Vk
W25hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgZ2xDb250ZXh0W25hbWVdID09
PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgICAgIHByb3h5W25hbWVdID0gaW5qZWN0ZWRTY3Jp
cHQuX3dyYXBwZWRGdW5jdGlvbi5iaW5kKGluamVjdGVkU2NyaXB0LCBnbENvbnRleHQsIG5hbWUp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShwcm94eSwgbmFtZSwgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0
aW9uIHByb2Nlc3NQcm9wZXJ0eShwcm9wZXJ0eSkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBn
bENvbnRleHRbcHJvcGVydHldID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IG92ZXJyaWRlIEdMIGNhbGxzIGFmZmVjdGluZyByZXNvdXJjZXMgc3RhdGVzIGhlcmUu
CisgICAgICAgICAgICAgICAgcHJveHlbcHJvcGVydHldID0gc2VsZi5fd3JhcEZ1bmN0aW9uKHNl
bGYsIGdsQ29udGV4dCwgZ2xDb250ZXh0W3Byb3BlcnR5XSwgcHJvcGVydHkpOworICAgICAgICAg
ICAgfSBlbHNlIGlmICgvXltBLVowLTlfXSskLy50ZXN0KHByb3BlcnR5KSkgeworICAgICAgICAg
ICAgICAgIC8vIEZhc3QgYWNjZXNzIHRvIGVudW1zIGFuZCBjb25zdGFudHMuCisgICAgICAgICAg
ICAgICAgcHJveHlbcHJvcGVydHldID0gZ2xDb250ZXh0W3Byb3BlcnR5XTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBw
cm9wZXJ0eSwgewogICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkKICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsQ29udGV4dFtu
YW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbENvbnRleHRbcHJvcGVydHld
OwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0
aW9uKHZhbHVlKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBnbENvbnRleHRbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsQ29u
dGV4dFtwcm9wZXJ0eV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yICh2YXIg
byA9IGdsQ29udGV4dDsgbzsgbyA9IG8uX19wcm90b19fKQotICAgICAgICAgICAgT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMobykuZm9yRWFjaChwcm9jZXNzTmFtZSk7CisgICAgICAgIGZvciAo
dmFyIHByb3BlcnR5IGluIGdsQ29udGV4dCkKKyAgICAgICAgICAgIHByb2Nlc3NQcm9wZXJ0eShw
cm9wZXJ0eSk7CiAKLSAgICAgICAgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSAiaW5zdGFuY2VvZiIu
Ci0gICAgICAgIHByb3h5Ll9fcHJvdG9fXyA9IGdsQ29udGV4dC5fX3Byb3RvX187Ci0gICAgICAg
IHByb3h5LmNvbnN0cnVjdG9yID0gZ2xDb250ZXh0LmNvbnN0cnVjdG9yOworICAgICAgICByZXR1
cm4gcHJveHk7CisgICAgfSwKIAotICAgICAgICB2YXIgY29udGV4dElkID0gdGhpcy5fZ2VuZXJh
dGVPYmplY3RJZCgpOwotICAgICAgICB0aGlzLl9pZFRvV3JhcHBlclByb3h5W2NvbnRleHRJZF0g
PSBwcm94eTsKLSAgICAgICAgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbY29udGV4dElkXSA9
IGdsQ29udGV4dDsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0LndlYkdMQ29udGV4dENyZWF0
ZWQoY29udGV4dElkKTsKKyAgICBfd3JhcEZ1bmN0aW9uOiBmdW5jdGlvbihyZXNvdXJjZSwgb3Jp
Z2luYWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBtYW5hZ2VyID0gcmVzb3Vy
Y2UubWFuYWdlcjsKKyAgICAgICAgICAgIGlmICghbWFuYWdlciB8fCAhbWFuYWdlci5jYXB0dXJp
bmcpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob3JpZ2lu
YWxPYmplY3QsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICBtYW5hZ2VyLmNhcHR1cmVBcmd1bWVu
dHMocmVzb3VyY2UsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZ2lu
YWxGdW5jdGlvbi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAg
IHZhciBjYWxsID0gbmV3IENhbGwocmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCBy
ZXN1bHQpOworICAgICAgICAgICAgbWFuYWdlci5yZXBvcnRDYWxsKGNhbGwpOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICB9Cit9OwogCi0gICAgICAgIHJldHVy
biBwcm94eTsKK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLnByb3RvdHlwZS5fX3Byb3Rv
X18gPSBSZXNvdXJjZS5wcm90b3R5cGU7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK1dl
YkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLldyYXBGdW5jdGlvbiA9IGZ1bmN0aW9uKG9yaWdp
bmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGFyZ3MpCit7CisgICAg
dGhpcy5fb3JpZ2luYWxPYmplY3QgPSBvcmlnaW5hbE9iamVjdDsKKyAgICB0aGlzLl9vcmlnaW5h
bEZ1bmN0aW9uID0gb3JpZ2luYWxGdW5jdGlvbjsKKyAgICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBm
dW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7CisgICAgdGhpcy5fZ2xSZXNvdXJj
ZSA9IFJlc291cmNlLmZvck9iamVjdChvcmlnaW5hbE9iamVjdCk7Cit9OworCitXZWJHTFJlbmRl
cmluZ0NvbnRleHRSZXNvdXJjZS5XcmFwRnVuY3Rpb24ucHJvdG90eXBlID0geworICAgIGdldCBy
ZXN1bHQoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRlZCkgeworICAgICAgICAg
ICAgdGhpcy5fZXhlY3V0ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5fcmVzdWx0ID0gdGhp
cy5fb3JpZ2luYWxGdW5jdGlvbi5hcHBseSh0aGlzLl9vcmlnaW5hbE9iamVjdCwgdGhpcy5fYXJn
cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKICAgICB9LAogCi0g
ICAgX2dlbmVyYXRlT2JqZWN0SWQ6IGZ1bmN0aW9uKCkKKyAgICBnZXQgY2FsbCgpCiAgICAgewot
ICAgICAgICB2YXIgaWQgPSArK3RoaXMuX2xhc3RCb3VuZE9iamVjdElkOwotICAgICAgICB2YXIg
b2JqZWN0SWQgPSAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsg
IixcIndlYkdMSWRcIjoiICsgaWQgKyAifSI7Ci0gICAgICAgIHJldHVybiBvYmplY3RJZDsKKyAg
ICAgICAgaWYgKCF0aGlzLl9jYWxsKQorICAgICAgICAgICAgdGhpcy5fY2FsbCA9IG5ldyBDYWxs
KHRoaXMuX2dsUmVzb3VyY2UsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgdGhpcy5fYXJncywgdGhpcy5y
ZXN1bHQpOworICAgICAgICByZXR1cm4gdGhpcy5fY2FsbDsKKyAgICB9Cit9OworCisvKioKKyAq
IEBjb25zdHJ1Y3RvcgorICovCit2YXIgVHJhY2VMb2cgPSBmdW5jdGlvbigpCit7CisgICAgdGhp
cy5fY2FsbHMgPSBbXTsKKyAgICB0aGlzLl9yZXNvdXJjZUNhY2hlID0gbmV3IENhY2hlKCk7Cit9
CisKK1RyYWNlTG9nLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgc2l6ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fY2FsbHMubGVuZ3RoOwogICAgIH0sCiAKLSAgICBjYXB0dXJlRnJhbWU6
IGZ1bmN0aW9uKGNvbnRleHRJZCkKKyAgICBnZXQgcmVzb3VyY2VDYWNoZSgpCiAgICAgewotICAg
ICAgICB0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gPSB7Ci0gICAgICAgICAgICBjb250ZXh0SWQ6
IGNvbnRleHRJZCwKLSAgICAgICAgICAgIGNhcHR1cmVkQ2FsbHNOdW06IDAKLSAgICAgICAgfTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlQ2FjaGU7CiAgICAgfSwKIAotICAgIF9zdG9w
Q2FwdHVyaW5nOiBmdW5jdGlvbihpbmZvKQorICAgIGNhcHR1cmVSZXNvdXJjZTogZnVuY3Rpb24o
cmVzb3VyY2UpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID09
PSBpbmZvKQotICAgICAgICAgICAgdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID0gbnVsbDsKKyAg
ICAgICAgLy8gRklYTUU6IENhcHR1cmUgY3VycmVudCByZXNvdXJjZSBzdGF0ZSB0byBzdGFydCB0
aGUgcmVwbGF5IGZyb20uCiAgICAgfSwKIAotICAgIF93cmFwcGVkRnVuY3Rpb246IGZ1bmN0aW9u
KGdsQ29udGV4dCwgZnVuY3Rpb25OYW1lKQorICAgIGFkZENhbGw6IGZ1bmN0aW9uKGNhbGwpCiAg
ICAgewotICAgICAgICAvLyBDYWxsIHJlYWwgV2ViR0wgZnVuY3Rpb24uCi0gICAgICAgIHZhciBh
cmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKLSAgICAgICAg
dmFyIHJlc3VsdCA9IGdsQ29udGV4dFtmdW5jdGlvbk5hbWVdLmFwcGx5KGdsQ29udGV4dCwgYXJn
cyk7CisgICAgICAgIC8vIEZJWE1FOiBDbG9uZSBjYWxsIGFuZCBwdXNoIHRoZSBjbG9uZS4KKyAg
ICAgICAgdGhpcy5fY2FsbHMucHVzaChjYWxsKTsKKyAgICB9Cit9OwogCi0gICAgICAgIGlmICh0
aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gJiYgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbdGhp
cy5fY2FwdHVyaW5nRnJhbWVJbmZvLmNvbnRleHRJZF0gPT09IGdsQ29udGV4dCkgewotICAgICAg
ICAgICAgdmFyIGNhcHR1cmVkQ2FsbHNOdW0gPSArK3RoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mby5j
YXB0dXJlZENhbGxzTnVtOwotICAgICAgICAgICAgaWYgKGNhcHR1cmVkQ2FsbHNOdW0gPT09IDEp
Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2V0WmVyb1RpbWVvdXRzKHRoaXMuX3N0b3BDYXB0dXJp
bmcuYmluZCh0aGlzLCB0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8pKTsKLSAgICAgICAgICAgIElu
amVjdGVkU2NyaXB0SG9zdC53ZWJHTFJlcG9ydEZ1bmN0aW9uQ2FsbCh0aGlzLl9jYXB0dXJpbmdG
cmFtZUluZm8uY29udGV4dElkLCBmdW5jdGlvbk5hbWUsICJbIiArIGFyZ3Muam9pbigiLCAiKSAr
ICJdIiwgcmVzdWx0ICsgIiIpOworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFJlc291
cmNlVHJhY2tpbmdNYW5hZ2VyID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX2NhcHR1cmluZyA9
IGZhbHNlOworICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAg
dGhpcy5fbGFzdFRyYWNlTG9nID0gbnVsbDsKK30KKworUmVzb3VyY2VUcmFja2luZ01hbmFnZXIu
cHJvdG90eXBlID0geworICAgIGdldCBjYXB0dXJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2NhcHR1cmluZzsKKyAgICB9LAorCisgICAgZ2V0IGxhc3RUcmFjZUxvZygpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFRyYWNlTG9nOworICAgIH0sCisKKyAgICByZWdp
c3RlclJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJlc291cmNl
Lm1hbmFnZXIgPSB0aGlzOworICAgIH0sCisKKyAgICBzdGFydENhcHR1cmluZzogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcpCisgICAgICAgICAgICB0aGlz
Ll9sYXN0VHJhY2VMb2cgPSBuZXcgVHJhY2VMb2coKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5n
ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsK
KyAgICB9LAorCisgICAgc3RvcENhcHR1cmluZzogZnVuY3Rpb24odHJhY2VMb2cpCisgICAgewor
ICAgICAgICBpZiAodHJhY2VMb2cgJiYgdGhpcy5fbGFzdFRyYWNlTG9nICE9PSB0cmFjZUxvZykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAgfSwKKwor
ICAgIGNhcHR1cmVGcmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFzdFRy
YWNlTG9nID0gbmV3IFRyYWNlTG9nKCk7CisgICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IHRydWU7
CisgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gdHJ1ZTsKKyAgICB9LAor
CisgICAgY2FwdHVyZUFyZ3VtZW50czogZnVuY3Rpb24ocmVzb3VyY2UsIGFyZ3MpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdGhpcy5fbGFzdFRyYWNlTG9nLmNhcHR1cmVSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgICAg
IGZvciAodmFyIGkgPSAwLCBuID0gYXJncy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAg
ICAgIHZhciByZXMgPSBSZXNvdXJjZS5mb3JPYmplY3QoYXJnc1tpXSk7CisgICAgICAgICAgICBp
ZiAocmVzKQorICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RUcmFjZUxvZy5jYXB0dXJlUmVzb3Vy
Y2UocmVzKTsKICAgICAgICAgfQorICAgIH0sCiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXBvcnRDYWxsOiBmdW5jdGlvbihjYWxsKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9j
YXB0dXJpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2xhc3RUcmFjZUxv
Zy5hZGRDYWxsKGNhbGwpOworICAgICAgICBpZiAodGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVF
bmQgJiYgdGhpcy5fbGFzdFRyYWNlTG9nLnNpemUgPT09IDEpIHsKKyAgICAgICAgICAgIHRoaXMu
X3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9zZXRa
ZXJvVGltZW91dHModGhpcy5zdG9wQ2FwdHVyaW5nLmJpbmQodGhpcywgdGhpcy5fbGFzdFRyYWNl
TG9nKSk7CisgICAgICAgIH0KICAgICB9LAogCiAgICAgX3NldFplcm9UaW1lb3V0czogZnVuY3Rp
b24oY2FsbGJhY2spCkBAIC0xMzksNiArMzc5LDI5IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlw
ZSA9IHsKICAgICB9CiB9OwogCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgSW5qZWN0
ZWRTY3JpcHQgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5fbWFuYWdlciA9IG5ldyBSZXNvdXJj
ZVRyYWNraW5nTWFuYWdlcigpOworfQorCitJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7Cisg
ICAgd3JhcFdlYkdMQ29udGV4dDogZnVuY3Rpb24oZ2xDb250ZXh0KQorICAgIHsKKyAgICAgICAg
dmFyIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KGdsQ29udGV4dCkgfHwgbmV3IFdlYkdM
UmVuZGVyaW5nQ29udGV4dFJlc291cmNlKGdsQ29udGV4dCk7CisgICAgICAgIHRoaXMuX21hbmFn
ZXIucmVnaXN0ZXJSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgICAgIHZhciBwcm94eSA9IHJlc291
cmNlLnByb3h5T2JqZWN0OworICAgICAgICByZXR1cm4gcHJveHk7CisgICAgfSwKKworICAgIGNh
cHR1cmVGcmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFuYWdlci5jYXB0
dXJlRnJhbWUoKTsKKyAgICB9Cit9OworCiB2YXIgaW5qZWN0ZWRTY3JpcHQgPSBuZXcgSW5qZWN0
ZWRTY3JpcHQoKTsKIHJldHVybiBpbmplY3RlZFNjcmlwdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159434</attachid>
            <date>2012-08-20 08:27:24 -0700</date>
            <delta_ts>2012-08-20 09:54:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90597-20120820192644.patch</filename>
            <type>text/plain</type>
            <size>17902</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg3OTdiMWE5MjJkM2M3
M2ZhN2M0OGI2NGE0Mjg0MDU0OGQ5YzM2MC4uNTA0ZmU1NmQxNDNjYTA0OTk5ZTIyNzdhNTRmYzI0
ZTQ0NDkwNWRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
cmFwIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMgYW5kIGNvbGxlY3QgYSB0cmFjZSBs
b2cgaWYgd2UgYXJlIGluIGNhcHR1cmluZyBtb2RlLgorICAgICAgICBTdHViYmVkIGNvZGUgZm9y
IGNvbGxlY3RpbmcgY2FsbHMgY29udHJpYnV0aW5nIHRvIGEgV2ViR0wgcmVzb3VyY2Ugc3RhdGUg
c28gdGhhdCB3ZSBjb3VsZCByZXBsYXkgdGhlbSBsYXRlci4KKworICAgICAgICBUeXBpY2FsIHNj
ZW5hcmlvOgorICAgICAgICAtIHdlIHdyYXAgYSBHTCBjb250ZXh0IHdpdGggSW5qZWN0ZWRTY3Jp
cHQud3JhcFdlYkdMQ29udGV4dCgpIGFuZCByZXR1cm4gYSBwcm94eSB0byB0aGUgaW5zcGVjdGVk
IHBhZ2UKKyAgICAgICAgLSB0aGUgcHJveHkgc2F2ZXMgYWxsIGNhbGxzIG5lY2Vzc2FyeSB0byBk
byBhIHJlcGxheSBsYXRlciAtIG9ubHkgdGhvc2UgdGhhdCBtb2RpZnkgYSByZXNvdXJjZSdzIHN0
YXRlCisgICAgICAgIC0gd2hlbiB3ZSB0dXJuIG9uIGNhcHR1cmluZyBtb2RlIChJbmplY3RlZFNj
cmlwdC5jYXB0dXJlRnJhbWUpLCB3ZSBzYXZlIGFsbCBXZWJHTCBjYWxscyB0byBhIHRyYWNlIGxv
ZworCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wOC0xOSAgS2VudGFybyBIYXJhICA8aGFyYWtl
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBNb3ZlIGNvbnRleHREZWJ1Z0lkKCkgYW5k
IHNldENvbnRleHREZWJ1Z0lkKCkgZnJvbSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwppbmRl
eCAwNjliN2MwMDM5YmMzNmNlNWU3ZDE0NzUxYWY5YWY5N2NjNDdlZGMwLi5iZTU5MDVlYjQ3Njgw
OWM5M2E3ZmM1MjAxY2I4ZjQ4ZGFhOWRlNjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC01NTQsMTUgKzU1NCwyOSBAQCBJbmpl
Y3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfSwK
IAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICogQHJldHVybiB7
T2JqZWN0fQorICAgICAqLyAKICAgICBtb2R1bGU6IGZ1bmN0aW9uKG5hbWUpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fbW9kdWxlc1tuYW1lXTsKICAgICB9LAotIAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNl
CisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLyAKICAgICBpbmplY3RNb2R1bGU6IGZ1
bmN0aW9uKG5hbWUsIHNvdXJjZSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9tb2R1bGVz
W25hbWVdOwotICAgICAgICB2YXIgbW9kdWxlID0gZXZhbCgiKCIgKyBzb3VyY2UgKyAiKSIpOwor
ICAgICAgICB2YXIgbW9kdWxlRnVuY3Rpb24gPSBldmFsKCIoIiArIHNvdXJjZSArICIpIik7Cisg
ICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsKKyAgICAg
ICAgICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmVycm9yKCJXZWIgSW5zcGVjdG9yIGVycm9y
OiBBIGZ1bmN0aW9uIHdhcyBleHBlY3RlZCBmb3IgbW9kdWxlICVzIGV2YWx1YXRpb24iLCBuYW1l
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBtb2R1
bGUgPSBtb2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3RlZFdpbmRvdywgSW5qZWN0ZWRTY3JpcHRI
b3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQpOwogICAgICAgICB0aGlzLl9t
b2R1bGVzW25hbWVdID0gbW9kdWxlOwogICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgIH0sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZVNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlU291cmNlLmpzCmluZGV4IDQ0ODRiNjk4YzVmYWZlYWM4ZjAyYzQ0MzgzNmY1OWIw
MjE3ZDA3YzcuLmQzNzVhYzVkYmZiY2I2Yjc3ZDdlMGU4Y2UzNmQ1YzU4ZjZmN2JkMWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
U291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlU291cmNlLmpzCkBAIC0zMCwxMDQgKzMwLDQ0NCBAQAogCiAvKioKICAqIEBwYXJh
bSB7SW5qZWN0ZWRTY3JpcHRIb3N0fSBJbmplY3RlZFNjcmlwdEhvc3QKKyAqIEBwYXJhbSB7V2lu
ZG93fSBpbnNwZWN0ZWRXaW5kb3cKKyAqIEBwYXJhbSB7bnVtYmVyfSBpbmplY3RlZFNjcmlwdElk
CiAgKi8KIChmdW5jdGlvbiAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGlu
amVjdGVkU2NyaXB0SWQpIHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqLwotdmFyIEluamVj
dGVkU2NyaXB0ID0gZnVuY3Rpb24oKQorZnVuY3Rpb24gQ2FjaGUoKQogewotICAgIHRoaXMuX2xh
c3RCb3VuZE9iamVjdElkID0gMDsKLSAgICB0aGlzLl9pZFRvV3JhcHBlclByb3h5ID0ge307Ci0g
ICAgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQgPSB7fTsKLSAgICB0aGlzLl9jYXB0dXJpbmdG
cmFtZUluZm8gPSBudWxsOworICAgIHRoaXMucmVzZXQoKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQu
cHJvdG90eXBlID0gewotICAgIHdyYXBXZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkK
K0NhY2hlLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Cisg
ICAgICovCisgICAgc2l6ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgZm9yICh2YXIgaWQg
aW4gdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9p
ZFRvUmVhbFdlYkdMQ29udGV4dFtpZF0gPT09IGdsQ29udGV4dCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5faWRUb1dyYXBwZXJQcm94eVtpZF07Ci0gICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NpemU7CisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLl9pdGVtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgICAgIHRoaXMu
X3NpemUgPSAwOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5
CisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBoYXM6IGZ1bmN0aW9uKGtl
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkgaW4gdGhpcy5faXRlbXM7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkKKyAgICAgKiBAcmV0dXJuIHtPYmpl
Y3R9CisgICAgICovCisgICAgZ2V0OiBmdW5jdGlvbihrZXkpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5faXRlbXNba2V5XTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IGtleQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtCisgICAgICovCisgICAgcHV0
OiBmdW5jdGlvbihrZXksIGl0ZW0pCisgICAgeworICAgICAgICBpZiAoIXRoaXMuaGFzKGtleSkp
CisgICAgICAgICAgICArK3RoaXMuX3NpemU7CisgICAgICAgIHRoaXMuX2l0ZW1zW2tleV0gPSBp
dGVtOworICAgIH0KK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge1Jlc291
cmNlfE9iamVjdH0gdGhpc09iamVjdAorICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQor
ICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IGFyZ3MKKyAqIEBwYXJhbSB7UmVzb3VyY2V8Kn0g
cmVzdWx0CisgKi8KK2Z1bmN0aW9uIENhbGwodGhpc09iamVjdCwgZnVuY3Rpb25OYW1lLCBhcmdz
LCByZXN1bHQpCit7CisgICAgdGhpcy5fdGhpc09iamVjdCA9IHRoaXNPYmplY3Q7CisgICAgdGhp
cy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMuX2FyZ3MgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAwKTsKKyAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7
Cit9CisKK0NhbGwucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge1Jlc291
cmNlfQorICAgICAqLworICAgIHJlc291cmNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gUmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMuX3RoaXNPYmplY3QpOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CisgICAgICovCisgICAgZnVuY3Rpb25OYW1l
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25OYW1lOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAgICAgKi8KKyAgICBh
cmdzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYXJnczsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7Kn0KKyAgICAgKi8KKyAgICByZXN1bHQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7CisgICAgfQorfTsK
KworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVkT2JqZWN0
CisgKi8KK2Z1bmN0aW9uIFJlc291cmNlKHdyYXBwZWRPYmplY3QpCit7CisgICAgdGhpcy5faWQg
PSArK1Jlc291cmNlLl91bmlxdWVJZDsKKyAgICB0aGlzLl9yZXNvdXJjZU1hbmFnZXIgPSBudWxs
OworICAgIHRoaXMuc2V0V3JhcHBlZE9iamVjdCh3cmFwcGVkT2JqZWN0KTsKK30KKworUmVzb3Vy
Y2UuX3VuaXF1ZUlkID0gMDsKKworLyoqCisgKiBAcGFyYW0ge09iamVjdH0gb2JqCisgKiBAcmV0
dXJuIHtSZXNvdXJjZX0KKyAqLworUmVzb3VyY2UuZm9yT2JqZWN0ID0gZnVuY3Rpb24ob2JqKQor
eworICAgIGlmICghb2JqIHx8IG9iaiBpbnN0YW5jZW9mIFJlc291cmNlKQorICAgICAgICByZXR1
cm4gb2JqOworICAgIGlmICh0eXBlb2Ygb2JqID09PSAib2JqZWN0IikKKyAgICAgICAgcmV0dXJu
IG9ialsiX19yZXNvdXJjZU9iamVjdCJdOworICAgIHJldHVybiBudWxsOworfTsKKworUmVzb3Vy
Y2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAg
Ki8KKyAgICBpZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lkOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovCisgICAg
d3JhcHBlZE9iamVjdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3dy
YXBwZWRPYmplY3Q7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2
YWx1ZQorICAgICAqLworICAgIHNldFdyYXBwZWRPYmplY3Q6IGZ1bmN0aW9uKHZhbHVlKQorICAg
IHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodmFsdWUgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIFJl
c291cmNlKSwgIkJpbmRpbmcgYSBSZXNvdXJjZSBvYmplY3QgdG8gYW5vdGhlciBSZXNvdXJjZSBv
YmplY3Q/Iik7CisgICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSB2YWx1ZTsKKyAgICAgICAg
dGhpcy5fYmluZE9iamVjdFRvUmVzb3VyY2UodmFsdWUpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovCisgICAgcHJveHlPYmplY3Q6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIC8vIE5vIHByb3h5IHdyYXBwaW5nIGJ5IGRlZmF1bHQuCisgICAg
ICAgIHJldHVybiB0aGlzLndyYXBwZWRPYmplY3QoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHJldHVybiB7UmVzb3VyY2VUcmFja2luZ01hbmFnZXJ9CisgICAgICovCisgICAgbWFuYWdl
cjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlTWFuYWdl
cjsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZVRyYWNraW5nTWFu
YWdlcn0gdmFsdWUKKyAgICAgKi8KKyAgICBzZXRNYW5hZ2VyOiBmdW5jdGlvbih2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IHZhbHVlOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CisgICAgICovCisgICAgX2JpbmRP
YmplY3RUb1Jlc291cmNlOiBmdW5jdGlvbihvYmplY3QpCisgICAgeworICAgICAgICBvYmplY3Rb
Il9fcmVzb3VyY2VPYmplY3QiXSA9IHRoaXM7CisgICAgfSwKK307CisKKy8qKgorICogQGNvbnN0
cnVjdG9yCisgKiBAZXh0ZW5kcyB7UmVzb3VyY2V9CisgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2xDb250ZXh0CisgKi8KK2Z1bmN0aW9uIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJl
c291cmNlKGdsQ29udGV4dCkKK3sKKyAgICBSZXNvdXJjZS5jYWxsKHRoaXMsIGdsQ29udGV4dCk7
CisgICAgdGhpcy5fcHJveHlPYmplY3QgPSBudWxsOworfQogCi0gICAgICAgIHZhciBwcm94eSA9
IHt9OwotICAgICAgICB2YXIgbmFtZVByb2Nlc3NlZCA9IHt9OwotICAgICAgICBuYW1lUHJvY2Vz
c2VkLl9fcHJvdG9fXyA9IG51bGw7Ci0gICAgICAgIG5hbWVQcm9jZXNzZWQuY29uc3RydWN0b3Ig
PSB0cnVlOwotCi0gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NOYW1lKG5hbWUpIHsKLSAgICAgICAg
ICAgIGlmIChuYW1lUHJvY2Vzc2VkW25hbWVdKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIG5hbWVQcm9jZXNzZWRbbmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgaWYgKHR5
cGVvZiBnbENvbnRleHRbbmFtZV0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICAgICAgcHJv
eHlbbmFtZV0gPSBpbmplY3RlZFNjcmlwdC5fd3JhcHBlZEZ1bmN0aW9uLmJpbmQoaW5qZWN0ZWRT
Y3JpcHQsIGdsQ29udGV4dCwgbmFtZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBuYW1lLCB7CitXZWJHTFJlbmRlcmluZ0Nv
bnRleHRSZXNvdXJjZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVybiB7T2Jq
ZWN0fQorICAgICAqLworICAgIHByb3h5T2JqZWN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX3Byb3h5T2JqZWN0KQorICAgICAgICAgICAgdGhpcy5fcHJveHlPYmplY3Qg
PSB0aGlzLl93cmFwT2JqZWN0KCk7CisgICAgICAgIHJldHVybiB0aGlzLl9wcm94eU9iamVjdDsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLworICAg
IF93cmFwT2JqZWN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZ2xDb250ZXh0ID0g
dGhpcy53cmFwcGVkT2JqZWN0KCk7CisgICAgICAgIHZhciBwcm94eSA9IE9iamVjdC5jcmVhdGUo
Z2xDb250ZXh0Ll9fcHJvdG9fXyk7IC8vIEluIG9yZGVyIHRvIGVtdWxhdGUgImluc3RhbmNlb2Yi
LgorCisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1By
b3BlcnR5KHByb3BlcnR5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZW9mIGdsQ29u
dGV4dFtwcm9wZXJ0eV0gPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogb3ZlcnJpZGUgR0wgY2FsbHMgYWZmZWN0aW5nIHJlc291cmNlcyBzdGF0ZXMgaGVyZS4KKyAg
ICAgICAgICAgICAgICBwcm94eVtwcm9wZXJ0eV0gPSBzZWxmLl93cmFwRnVuY3Rpb24oc2VsZiwg
Z2xDb250ZXh0LCBnbENvbnRleHRbcHJvcGVydHldLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKC9eW0EtWjAtOV9dKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICAgICAgICAg
ICAgLy8gRmFzdCBhY2Nlc3MgdG8gZW51bXMgYW5kIGNvbnN0YW50cy4KKyAgICAgICAgICAgICAg
ICBwcm94eVtwcm9wZXJ0eV0gPSBnbENvbnRleHRbcHJvcGVydHldOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIHByb3Bl
cnR5LCB7CiAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKQogICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2xDb250ZXh0W25hbWVd
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsQ29udGV4dFtwcm9wZXJ0eV07CiAg
ICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24o
dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGds
Q29udGV4dFtuYW1lXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgZ2xDb250ZXh0
W3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKHZhciBvID0g
Z2xDb250ZXh0OyBvOyBvID0gby5fX3Byb3RvX18pCi0gICAgICAgICAgICBPYmplY3QuZ2V0T3du
UHJvcGVydHlOYW1lcyhvKS5mb3JFYWNoKHByb2Nlc3NOYW1lKTsKKyAgICAgICAgZm9yICh2YXIg
cHJvcGVydHkgaW4gZ2xDb250ZXh0KQorICAgICAgICAgICAgcHJvY2Vzc1Byb3BlcnR5KHByb3Bl
cnR5KTsKIAotICAgICAgICAvLyBJbiBvcmRlciB0byBlbXVsYXRlICJpbnN0YW5jZW9mIi4KLSAg
ICAgICAgcHJveHkuX19wcm90b19fID0gZ2xDb250ZXh0Ll9fcHJvdG9fXzsKLSAgICAgICAgcHJv
eHkuY29uc3RydWN0b3IgPSBnbENvbnRleHQuY29uc3RydWN0b3I7CisgICAgICAgIHJldHVybiBw
cm94eTsKKyAgICB9LAogCi0gICAgICAgIHZhciBjb250ZXh0SWQgPSB0aGlzLl9nZW5lcmF0ZU9i
amVjdElkKCk7Ci0gICAgICAgIHRoaXMuX2lkVG9XcmFwcGVyUHJveHlbY29udGV4dElkXSA9IHBy
b3h5OwotICAgICAgICB0aGlzLl9pZFRvUmVhbFdlYkdMQ29udGV4dFtjb250ZXh0SWRdID0gZ2xD
b250ZXh0OwotICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3Qud2ViR0xDb250ZXh0Q3JlYXRlZChj
b250ZXh0SWQpOworICAgIC8qKgorICAgICAqIEBwYXJhbSB7UmVzb3VyY2V9IHJlc291cmNlCisg
ICAgICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IG9yaWdpbmFsT2JqZWN0CisgICAg
ICogQHBhcmFtIHtGdW5jdGlvbn0gb3JpZ2luYWxGdW5jdGlvbgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBmdW5jdGlvbk5hbWUKKyAgICAgKiBAcmV0dXJuIHsqfQorICAgICAqLworICAgIF93cmFw
RnVuY3Rpb246IGZ1bmN0aW9uKHJlc291cmNlLCBvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxGdW5j
dGlvbiwgZnVuY3Rpb25OYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5tYW5hZ2VyKCk7Cisg
ICAgICAgICAgICBpZiAoIW1hbmFnZXIgfHwgIW1hbmFnZXIuY2FwdHVyaW5nKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob3JpZ2luYWxPYmplY3QsIGFy
Z3VtZW50cyk7CisgICAgICAgICAgICBtYW5hZ2VyLmNhcHR1cmVBcmd1bWVudHMocmVzb3VyY2Us
IGFyZ3VtZW50cyk7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWxGdW5jdGlvbi5h
cHBseShvcmlnaW5hbE9iamVjdCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHZhciBjYWxsID0g
bmV3IENhbGwocmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCByZXN1bHQpOworICAg
ICAgICAgICAgbWFuYWdlci5yZXBvcnRDYWxsKGNhbGwpOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfTsKKyAgICB9Cit9OwogCi0gICAgICAgIHJldHVybiBwcm94eTsKK1dl
YkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBSZXNvdXJj
ZS5wcm90b3R5cGU7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge1dlYkdMUmVu
ZGVyaW5nQ29udGV4dH0gb3JpZ2luYWxPYmplY3QKKyAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdp
bmFsRnVuY3Rpb24KKyAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUKKyAqIEBwYXJhbSB7
QXJyYXl9IGFyZ3MKKyAqLworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuV3JhcEZ1bmN0
aW9uID0gZnVuY3Rpb24ob3JpZ2luYWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9u
TmFtZSwgYXJncykKK3sKKyAgICB0aGlzLl9vcmlnaW5hbE9iamVjdCA9IG9yaWdpbmFsT2JqZWN0
OworICAgIHRoaXMuX29yaWdpbmFsRnVuY3Rpb24gPSBvcmlnaW5hbEZ1bmN0aW9uOworICAgIHRo
aXMuX2Z1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTsKKyAgICB0aGlzLl9hcmdzID0gYXJnczsK
KyAgICB0aGlzLl9nbFJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KG9yaWdpbmFsT2JqZWN0
KTsKK307CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLldyYXBGdW5jdGlvbi5wcm90
b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVybiB7Kn0KKyAgICAgKi8KKyAgICByZXN1
bHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fZXhlY3V0ZWQpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2V4ZWN1dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Jlc3Vs
dCA9IHRoaXMuX29yaWdpbmFsRnVuY3Rpb24uYXBwbHkodGhpcy5fb3JpZ2luYWxPYmplY3QsIHRo
aXMuX2FyZ3MpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7CiAgICAg
fSwKIAotICAgIF9nZW5lcmF0ZU9iamVjdElkOiBmdW5jdGlvbigpCisgICAgLyoqCisgICAgICog
QHJldHVybiB7Q2FsbH0KKyAgICAgKi8KKyAgICBjYWxsOiBmdW5jdGlvbigpCiAgICAgewotICAg
ICAgICB2YXIgaWQgPSArK3RoaXMuX2xhc3RCb3VuZE9iamVjdElkOwotICAgICAgICB2YXIgb2Jq
ZWN0SWQgPSAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIixc
IndlYkdMSWRcIjoiICsgaWQgKyAifSI7Ci0gICAgICAgIHJldHVybiBvYmplY3RJZDsKKyAgICAg
ICAgaWYgKCF0aGlzLl9jYWxsKQorICAgICAgICAgICAgdGhpcy5fY2FsbCA9IG5ldyBDYWxsKHRo
aXMuX2dsUmVzb3VyY2UsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgdGhpcy5fYXJncywgdGhpcy5yZXN1
bHQoKSk7CisgICAgICAgIHJldHVybiB0aGlzLl9jYWxsOworICAgIH0KK307CisKKy8qKgorICog
QGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIFRyYWNlTG9nKCkKK3sKKyAgICB0aGlzLl9jYWxs
cyA9IFtdOworICAgIHRoaXMuX3Jlc291cmNlQ2FjaGUgPSBuZXcgQ2FjaGUoKTsKK30KKworVHJh
Y2VMb2cucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAg
ICAgKi8KKyAgICBzaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
Y2FsbHMubGVuZ3RoOwogICAgIH0sCiAKLSAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKGNvbnRl
eHRJZCkKKyAgICBjYXB0dXJlUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIHsKLSAg
ICAgICAgdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID0gewotICAgICAgICAgICAgY29udGV4dElk
OiBjb250ZXh0SWQsCi0gICAgICAgICAgICBjYXB0dXJlZENhbGxzTnVtOiAwCi0gICAgICAgIH07
CisgICAgICAgIC8vIEZJWE1FOiBDYXB0dXJlIGN1cnJlbnQgcmVzb3VyY2Ugc3RhdGUgdG8gc3Rh
cnQgdGhlIHJlcGxheSBmcm9tLgorICAgIH0sCisKKyAgICBhZGRDYWxsOiBmdW5jdGlvbihjYWxs
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IENsb25lIGNhbGwgYW5kIHB1c2ggdGhlIGNsb25l
LgorICAgICAgICB0aGlzLl9jYWxscy5wdXNoKGNhbGwpOworICAgIH0KK307CisKKy8qKgorICog
QGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCkKK3sK
KyAgICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25G
cmFtZUVuZCA9IGZhbHNlOworICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG51bGw7Cit9CisKK1Jl
c291cmNlVHJhY2tpbmdNYW5hZ2VyLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0
dXJuIHtib29sZWFufQorICAgICAqLworICAgIGNhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmluZzsKICAgICB9LAogCi0gICAgX3N0b3BDYXB0
dXJpbmc6IGZ1bmN0aW9uKGluZm8pCisgICAgLyoqCisgICAgICogQHJldHVybiB7VHJhY2VMb2d9
CisgICAgICovCisgICAgbGFzdFRyYWNlTG9nOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBp
ZiAodGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID09PSBpbmZvKQotICAgICAgICAgICAgdGhpcy5f
Y2FwdHVyaW5nRnJhbWVJbmZvID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RUcmFj
ZUxvZzsKICAgICB9LAogCi0gICAgX3dyYXBwZWRGdW5jdGlvbjogZnVuY3Rpb24oZ2xDb250ZXh0
LCBmdW5jdGlvbk5hbWUpCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3Vy
Y2UKKyAgICAgKi8KKyAgICByZWdpc3RlclJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKICAg
ICB7Ci0gICAgICAgIC8vIENhbGwgcmVhbCBXZWJHTCBmdW5jdGlvbi4KLSAgICAgICAgdmFyIGFy
Z3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwotICAgICAgICB2
YXIgcmVzdWx0ID0gZ2xDb250ZXh0W2Z1bmN0aW9uTmFtZV0uYXBwbHkoZ2xDb250ZXh0LCBhcmdz
KTsKKyAgICAgICAgcmVzb3VyY2Uuc2V0TWFuYWdlcih0aGlzKTsKKyAgICB9LAogCi0gICAgICAg
IGlmICh0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gJiYgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRl
eHRbdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvLmNvbnRleHRJZF0gPT09IGdsQ29udGV4dCkgewot
ICAgICAgICAgICAgdmFyIGNhcHR1cmVkQ2FsbHNOdW0gPSArK3RoaXMuX2NhcHR1cmluZ0ZyYW1l
SW5mby5jYXB0dXJlZENhbGxzTnVtOwotICAgICAgICAgICAgaWYgKGNhcHR1cmVkQ2FsbHNOdW0g
PT09IDEpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0WmVyb1RpbWVvdXRzKHRoaXMuX3N0b3BD
YXB0dXJpbmcuYmluZCh0aGlzLCB0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8pKTsKLSAgICAgICAg
ICAgIEluamVjdGVkU2NyaXB0SG9zdC53ZWJHTFJlcG9ydEZ1bmN0aW9uQ2FsbCh0aGlzLl9jYXB0
dXJpbmdGcmFtZUluZm8uY29udGV4dElkLCBmdW5jdGlvbk5hbWUsICJbIiArIGFyZ3Muam9pbigi
LCAiKSArICJdIiwgcmVzdWx0ICsgIiIpOworICAgIHN0YXJ0Q2FwdHVyaW5nOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAgICAgICAgIHRoaXMu
X2xhc3RUcmFjZUxvZyA9IG5ldyBUcmFjZUxvZygpOworICAgICAgICB0aGlzLl9jYXB0dXJpbmcg
PSB0cnVlOworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1RyYWNlTG9nPX0gdHJhY2VMb2cKKyAg
ICAgKi8KKyAgICBzdG9wQ2FwdHVyaW5nOiBmdW5jdGlvbih0cmFjZUxvZykKKyAgICB7CisgICAg
ICAgIGlmICh0cmFjZUxvZyAmJiB0aGlzLl9sYXN0VHJhY2VMb2cgIT09IHRyYWNlTG9nKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsKKyAgICB9LAorCisgICAg
Y2FwdHVyZUZyYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9sYXN0VHJhY2VM
b2cgPSBuZXcgVHJhY2VMb2coKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSB0cnVlOworICAgIH0sCisKKyAg
ICBjYXB0dXJlQXJndW1lbnRzOiBmdW5jdGlvbihyZXNvdXJjZSwgYXJncykKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0
aGlzLl9sYXN0VHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIG4gPSBhcmdzLmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAg
dmFyIHJlcyA9IFJlc291cmNlLmZvck9iamVjdChhcmdzW2ldKTsKKyAgICAgICAgICAgIGlmIChy
ZXMpCisgICAgICAgICAgICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nLmNhcHR1cmVSZXNvdXJjZShy
ZXMpOwogICAgICAgICB9CisgICAgfSwKIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLworICAgIHJlcG9ydENhbGw6IGZ1
bmN0aW9uKGNhbGwpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nLmFkZENhbGwoY2FsbCk7
CisgICAgICAgIGlmICh0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCAmJiB0aGlzLl9sYXN0
VHJhY2VMb2cuc2l6ZSgpID09PSAxKSB7CisgICAgICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5n
T25GcmFtZUVuZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fc2V0WmVyb1RpbWVvdXRzKHRo
aXMuc3RvcENhcHR1cmluZy5iaW5kKHRoaXMsIHRoaXMuX2xhc3RUcmFjZUxvZykpOworICAgICAg
ICB9CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNr
CisgICAgICovCiAgICAgX3NldFplcm9UaW1lb3V0czogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAg
ewogICAgICAgICAvLyBXZSBuZWVkIGEgZmFzdGVzdCBhc3luYyBjYWxsYmFjaywgd2hhdGV2ZXIg
ZmlyZXMgZmlyc3QuCkBAIC0xMzksNiArNDc5LDMzIEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlw
ZSA9IHsKICAgICB9CiB9OwogCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgSW5qZWN0
ZWRTY3JpcHQgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5fbWFuYWdlciA9IG5ldyBSZXNvdXJj
ZVRyYWNraW5nTWFuYWdlcigpOworfQorCitJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7Cisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsQ29udGV4dAor
ICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICB3cmFwV2ViR0xDb250ZXh0OiBm
dW5jdGlvbihnbENvbnRleHQpCisgICAgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJj
ZS5mb3JPYmplY3QoZ2xDb250ZXh0KSB8fCBuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3Vy
Y2UoZ2xDb250ZXh0KTsKKyAgICAgICAgdGhpcy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNlKHJl
c291cmNlKTsKKyAgICAgICAgdmFyIHByb3h5ID0gcmVzb3VyY2UucHJveHlPYmplY3QoKTsKKyAg
ICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuX21hbmFnZXIuY2FwdHVyZUZyYW1lKCk7CisgICAgfQor
fTsKKwogdmFyIGluamVjdGVkU2NyaXB0ID0gbmV3IEluamVjdGVkU2NyaXB0KCk7CiByZXR1cm4g
aW5qZWN0ZWRTY3JpcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9j
b21waWxlLWZyb250LWVuZC5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZy
b250LWVuZC5weQppbmRleCAyMzc3NjQ2NWUzYTM2N2Q3MjRmY2Y3N2YwZTllOWZmMWE1MGU0NzNl
Li42YWRkYzZiNjNlZDA0ZThjNDRlNjlhYTE3YjM0N2ZjODAyMDhlN2NhIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CkBAIC0zODAsMyArMzgwLDE0
IEBAIGNvbW1hbmQgKz0gIiAgICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAi
SW5qZWN0ZWRTY3JpcHRTb3VyY2VUbXAuanMiCiBjb21tYW5kICs9ICJcbiIKIG9zLnN5c3RlbShj
b21tYW5kKQogb3Muc3lzdGVtKCJybSAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0
ZWRTY3JpcHRTb3VyY2VUbXAuanMiKQorCitwcmludCAiQ29tcGlsaW5nIEluamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGVTb3VyY2UuanMuLi4iCitvcy5zeXN0ZW0oImVjaG8gXCJ2YXIgaW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZVZhbHVlID0gXCIgPiAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAi
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZVRtcC5qcyIpCitvcy5zeXN0ZW0oImNhdCAg
IiArIGluc3BlY3Rvcl9wYXRoICsgIi8iICsgIkluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanMiICsgIiA+PiAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZVRtcC5qcyIpCitjb21tYW5kID0gY29tcGlsZXJfY29tbWFuZAorY29t
bWFuZCArPSAiICAgIC0tZXh0ZXJucyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0
ZWRTY3JpcHRFeHRlcm5zLmpzIiArICIgXFxcbiIKK2NvbW1hbmQgKz0gIiAgICAtLW1vZHVsZSAi
ICsganNtb2R1bGVfbmFtZV9wcmVmaXggKyAiaW5qZWN0ZWRfc2NyaXB0IiArICI6IiArICIxIiAr
ICIgXFxcbiIKK2NvbW1hbmQgKz0gIiAgICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX3BhdGggKyAi
LyIgKyAiSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZVRtcC5qcyIgKyAiIFxcXG4iCitj
b21tYW5kICs9ICJcbiIKK29zLnN5c3RlbShjb21tYW5kKQorb3Muc3lzdGVtKCJybSAiICsgaW5z
cGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZVRtcC5q
cyIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159457</attachid>
            <date>2012-08-20 09:54:31 -0700</date>
            <delta_ts>2012-08-21 06:12:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90597-20120820205351.patch</filename>
            <type>text/plain</type>
            <size>17998</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg3OTdiMWE5MjJkM2M3
M2ZhN2M0OGI2NGE0Mjg0MDU0OGQ5YzM2MC4uNTA0ZmU1NmQxNDNjYTA0OTk5ZTIyNzdhNTRmYzI0
ZTQ0NDkwNWRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
cmFwIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMgYW5kIGNvbGxlY3QgYSB0cmFjZSBs
b2cgaWYgd2UgYXJlIGluIGNhcHR1cmluZyBtb2RlLgorICAgICAgICBTdHViYmVkIGNvZGUgZm9y
IGNvbGxlY3RpbmcgY2FsbHMgY29udHJpYnV0aW5nIHRvIGEgV2ViR0wgcmVzb3VyY2Ugc3RhdGUg
c28gdGhhdCB3ZSBjb3VsZCByZXBsYXkgdGhlbSBsYXRlci4KKworICAgICAgICBUeXBpY2FsIHNj
ZW5hcmlvOgorICAgICAgICAtIHdlIHdyYXAgYSBHTCBjb250ZXh0IHdpdGggSW5qZWN0ZWRTY3Jp
cHQud3JhcFdlYkdMQ29udGV4dCgpIGFuZCByZXR1cm4gYSBwcm94eSB0byB0aGUgaW5zcGVjdGVk
IHBhZ2UKKyAgICAgICAgLSB0aGUgcHJveHkgc2F2ZXMgYWxsIGNhbGxzIG5lY2Vzc2FyeSB0byBk
byBhIHJlcGxheSBsYXRlciAtIG9ubHkgdGhvc2UgdGhhdCBtb2RpZnkgYSByZXNvdXJjZSdzIHN0
YXRlCisgICAgICAgIC0gd2hlbiB3ZSB0dXJuIG9uIGNhcHR1cmluZyBtb2RlIChJbmplY3RlZFNj
cmlwdC5jYXB0dXJlRnJhbWUpLCB3ZSBzYXZlIGFsbCBXZWJHTCBjYWxscyB0byBhIHRyYWNlIGxv
ZworCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wOC0xOSAgS2VudGFybyBIYXJhICA8aGFyYWtl
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBNb3ZlIGNvbnRleHREZWJ1Z0lkKCkgYW5k
IHNldENvbnRleHREZWJ1Z0lkKCkgZnJvbSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwppbmRl
eCAwNjliN2MwMDM5YmMzNmNlNWU3ZDE0NzUxYWY5YWY5N2NjNDdlZGMwLi5iZTU5MDVlYjQ3Njgw
OWM5M2E3ZmM1MjAxY2I4ZjQ4ZGFhOWRlNjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC01NTQsMTUgKzU1NCwyOSBAQCBJbmpl
Y3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfSwK
IAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICogQHJldHVybiB7
T2JqZWN0fQorICAgICAqLyAKICAgICBtb2R1bGU6IGZ1bmN0aW9uKG5hbWUpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fbW9kdWxlc1tuYW1lXTsKICAgICB9LAotIAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNl
CisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLyAKICAgICBpbmplY3RNb2R1bGU6IGZ1
bmN0aW9uKG5hbWUsIHNvdXJjZSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9tb2R1bGVz
W25hbWVdOwotICAgICAgICB2YXIgbW9kdWxlID0gZXZhbCgiKCIgKyBzb3VyY2UgKyAiKSIpOwor
ICAgICAgICB2YXIgbW9kdWxlRnVuY3Rpb24gPSBldmFsKCIoIiArIHNvdXJjZSArICIpIik7Cisg
ICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsKKyAgICAg
ICAgICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmVycm9yKCJXZWIgSW5zcGVjdG9yIGVycm9y
OiBBIGZ1bmN0aW9uIHdhcyBleHBlY3RlZCBmb3IgbW9kdWxlICVzIGV2YWx1YXRpb24iLCBuYW1l
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBtb2R1
bGUgPSBtb2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3RlZFdpbmRvdywgSW5qZWN0ZWRTY3JpcHRI
b3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQpOwogICAgICAgICB0aGlzLl9t
b2R1bGVzW25hbWVdID0gbW9kdWxlOwogICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgIH0sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZVNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlU291cmNlLmpzCmluZGV4IDQ0ODRiNjk4YzVmYWZlYWM4ZjAyYzQ0MzgzNmY1OWIw
MjE3ZDA3YzcuLmIzNmFkNWI2YWNkZjViNGIwNDMyMjY0ODI3NjYzOGEzYjVjYzlkYzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
U291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlU291cmNlLmpzCkBAIC0zMCwxMDQgKzMwLDQ1MCBAQAogCiAvKioKICAqIEBwYXJh
bSB7SW5qZWN0ZWRTY3JpcHRIb3N0fSBJbmplY3RlZFNjcmlwdEhvc3QKKyAqIEBwYXJhbSB7V2lu
ZG93fSBpbnNwZWN0ZWRXaW5kb3cKKyAqIEBwYXJhbSB7bnVtYmVyfSBpbmplY3RlZFNjcmlwdElk
CiAgKi8KIChmdW5jdGlvbiAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGlu
amVjdGVkU2NyaXB0SWQpIHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqLwotdmFyIEluamVj
dGVkU2NyaXB0ID0gZnVuY3Rpb24oKQorZnVuY3Rpb24gQ2FjaGUoKQogewotICAgIHRoaXMuX2xh
c3RCb3VuZE9iamVjdElkID0gMDsKLSAgICB0aGlzLl9pZFRvV3JhcHBlclByb3h5ID0ge307Ci0g
ICAgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQgPSB7fTsKLSAgICB0aGlzLl9jYXB0dXJpbmdG
cmFtZUluZm8gPSBudWxsOworICAgIHRoaXMucmVzZXQoKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQu
cHJvdG90eXBlID0gewotICAgIHdyYXBXZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkK
K0NhY2hlLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Cisg
ICAgICovCisgICAgc2l6ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgZm9yICh2YXIgaWQg
aW4gdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9p
ZFRvUmVhbFdlYkdMQ29udGV4dFtpZF0gPT09IGdsQ29udGV4dCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5faWRUb1dyYXBwZXJQcm94eVtpZF07Ci0gICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NpemU7CisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLl9pdGVtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgICAgIHRoaXMu
X3NpemUgPSAwOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5
CisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBoYXM6IGZ1bmN0aW9uKGtl
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkgaW4gdGhpcy5faXRlbXM7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkKKyAgICAgKiBAcmV0dXJuIHtPYmpl
Y3R9CisgICAgICovCisgICAgZ2V0OiBmdW5jdGlvbihrZXkpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5faXRlbXNba2V5XTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IGtleQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtCisgICAgICovCisgICAgcHV0
OiBmdW5jdGlvbihrZXksIGl0ZW0pCisgICAgeworICAgICAgICBpZiAoIXRoaXMuaGFzKGtleSkp
CisgICAgICAgICAgICArK3RoaXMuX3NpemU7CisgICAgICAgIHRoaXMuX2l0ZW1zW2tleV0gPSBp
dGVtOworICAgIH0KK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge1Jlc291
cmNlfE9iamVjdH0gdGhpc09iamVjdAorICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQor
ICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IGFyZ3MKKyAqIEBwYXJhbSB7UmVzb3VyY2V8Kn0g
cmVzdWx0CisgKi8KK2Z1bmN0aW9uIENhbGwodGhpc09iamVjdCwgZnVuY3Rpb25OYW1lLCBhcmdz
LCByZXN1bHQpCit7CisgICAgdGhpcy5fdGhpc09iamVjdCA9IHRoaXNPYmplY3Q7CisgICAgdGhp
cy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMuX2FyZ3MgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAwKTsKKyAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7
Cit9CisKK0NhbGwucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge1Jlc291
cmNlfQorICAgICAqLworICAgIHJlc291cmNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gUmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMuX3RoaXNPYmplY3QpOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CisgICAgICovCisgICAgZnVuY3Rpb25OYW1l
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25OYW1lOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAgICAgKi8KKyAgICBh
cmdzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYXJnczsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7Kn0KKyAgICAgKi8KKyAgICByZXN1bHQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7CisgICAgfQorfTsK
KworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVkT2JqZWN0
CisgKi8KK2Z1bmN0aW9uIFJlc291cmNlKHdyYXBwZWRPYmplY3QpCit7CisgICAgdGhpcy5faWQg
PSArK1Jlc291cmNlLl91bmlxdWVJZDsKKyAgICB0aGlzLl9yZXNvdXJjZU1hbmFnZXIgPSBudWxs
OworICAgIHRoaXMuc2V0V3JhcHBlZE9iamVjdCh3cmFwcGVkT2JqZWN0KTsKK30KKworUmVzb3Vy
Y2UuX3VuaXF1ZUlkID0gMDsKKworLyoqCisgKiBAcGFyYW0ge09iamVjdH0gb2JqCisgKiBAcmV0
dXJuIHtSZXNvdXJjZX0KKyAqLworUmVzb3VyY2UuZm9yT2JqZWN0ID0gZnVuY3Rpb24ob2JqKQor
eworICAgIGlmICghb2JqIHx8IG9iaiBpbnN0YW5jZW9mIFJlc291cmNlKQorICAgICAgICByZXR1
cm4gb2JqOworICAgIGlmICh0eXBlb2Ygb2JqID09PSAib2JqZWN0IikKKyAgICAgICAgcmV0dXJu
IG9ialsiX19yZXNvdXJjZU9iamVjdCJdOworICAgIHJldHVybiBudWxsOworfQorCitSZXNvdXJj
ZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVybiB7bnVtYmVyfQorICAgICAq
LworICAgIGlkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5faWQ7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICB3
cmFwcGVkT2JqZWN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fd3Jh
cHBlZE9iamVjdDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtPYmplY3R9IHZh
bHVlCisgICAgICovCisgICAgc2V0V3JhcHBlZE9iamVjdDogZnVuY3Rpb24odmFsdWUpCisgICAg
eworICAgICAgICBjb25zb2xlLmFzc2VydCh2YWx1ZSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgUmVz
b3VyY2UpLCAiQmluZGluZyBhIFJlc291cmNlIG9iamVjdCB0byBhbm90aGVyIFJlc291cmNlIG9i
amVjdD8iKTsKKyAgICAgICAgdGhpcy5fd3JhcHBlZE9iamVjdCA9IHZhbHVlOworICAgICAgICB0
aGlzLl9iaW5kT2JqZWN0VG9SZXNvdXJjZSh2YWx1ZSk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICBwcm94eU9iamVjdDogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgLy8gTm8gcHJveHkgd3JhcHBpbmcgYnkgZGVmYXVsdC4KKyAgICAg
ICAgcmV0dXJuIHRoaXMud3JhcHBlZE9iamVjdCgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcmV0dXJuIHtSZXNvdXJjZVRyYWNraW5nTWFuYWdlcn0KKyAgICAgKi8KKyAgICBtYW5hZ2Vy
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VNYW5hZ2Vy
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1Jlc291cmNlVHJhY2tpbmdNYW5h
Z2VyfSB2YWx1ZQorICAgICAqLworICAgIHNldE1hbmFnZXI6IGZ1bmN0aW9uKHZhbHVlKQorICAg
IHsKKyAgICAgICAgdGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0gdmFsdWU7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKKyAgICAgKi8KKyAgICBfYmluZE9i
amVjdFRvUmVzb3VyY2U6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICB7CisgICAgICAgIG9iamVjdFsi
X19yZXNvdXJjZU9iamVjdCJdID0gdGhpczsKKyAgICB9LAorfTsKKworLyoqCisgKiBAY29uc3Ry
dWN0b3IKKyAqIEBleHRlbmRzIHtSZXNvdXJjZX0KKyAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdD
b250ZXh0fSBnbENvbnRleHQKKyAqLworZnVuY3Rpb24gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
b3VyY2UoZ2xDb250ZXh0KQoreworICAgIFJlc291cmNlLmNhbGwodGhpcywgZ2xDb250ZXh0KTsK
KyAgICB0aGlzLl9wcm94eU9iamVjdCA9IG51bGw7Cit9CiAKLSAgICAgICAgdmFyIHByb3h5ID0g
e307Ci0gICAgICAgIHZhciBuYW1lUHJvY2Vzc2VkID0ge307Ci0gICAgICAgIG5hbWVQcm9jZXNz
ZWQuX19wcm90b19fID0gbnVsbDsKLSAgICAgICAgbmFtZVByb2Nlc3NlZC5jb25zdHJ1Y3RvciA9
IHRydWU7Ci0KLSAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc05hbWUobmFtZSkgewotICAgICAgICAg
ICAgaWYgKG5hbWVQcm9jZXNzZWRbbmFtZV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgbmFtZVByb2Nlc3NlZFtuYW1lXSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodHlw
ZW9mIGdsQ29udGV4dFtuYW1lXSA9PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgICAgICBwcm94
eVtuYW1lXSA9IGluamVjdGVkU2NyaXB0Ll93cmFwcGVkRnVuY3Rpb24uYmluZChpbmplY3RlZFNj
cmlwdCwgZ2xDb250ZXh0LCBuYW1lKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIG5hbWUsIHsKK1dlYkdMUmVuZGVyaW5nQ29u
dGV4dFJlc291cmNlLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtPYmpl
Y3R9CisgICAgICovCisgICAgcHJveHlPYmplY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy5fcHJveHlPYmplY3QpCisgICAgICAgICAgICB0aGlzLl9wcm94eU9iamVjdCA9
IHRoaXMuX3dyYXBPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3h5T2JqZWN0Owor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovCisgICAg
X3dyYXBPYmplY3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBnbENvbnRleHQgPSB0
aGlzLndyYXBwZWRPYmplY3QoKTsKKyAgICAgICAgdmFyIHByb3h5ID0gT2JqZWN0LmNyZWF0ZShn
bENvbnRleHQuX19wcm90b19fKTsgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSAiaW5zdGFuY2VvZiIu
CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUHJv
cGVydHkocHJvcGVydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZ2xDb250
ZXh0W3Byb3BlcnR5XSA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBvdmVycmlkZSBHTCBjYWxscyBhZmZlY3RpbmcgcmVzb3VyY2VzIHN0YXRlcyBoZXJlLgorICAg
ICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IHNlbGYuX3dyYXBGdW5jdGlvbihzZWxmLCBn
bENvbnRleHQsIGdsQ29udGV4dFtwcm9wZXJ0eV0sIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoL15bQS1aMC05X10rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBGYXN0IGFjY2VzcyB0byBlbnVtcyBhbmQgY29uc3RhbnRzLgorICAgICAgICAgICAgICAg
IHByb3h5W3Byb3BlcnR5XSA9IGdsQ29udGV4dFtwcm9wZXJ0eV07CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgcHJvcGVy
dHksIHsKICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpCiAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbENvbnRleHRbbmFtZV07
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2xDb250ZXh0W3Byb3BlcnR5XTsKICAg
ICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbih2
YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ2xD
b250ZXh0W25hbWVdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBnbENvbnRleHRb
cHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZvciAodmFyIG8gPSBn
bENvbnRleHQ7IG87IG8gPSBvLl9fcHJvdG9fXykKLSAgICAgICAgICAgIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG8pLmZvckVhY2gocHJvY2Vzc05hbWUpOworICAgICAgICBmb3IgKHZhciBw
cm9wZXJ0eSBpbiBnbENvbnRleHQpCisgICAgICAgICAgICBwcm9jZXNzUHJvcGVydHkocHJvcGVy
dHkpOwogCi0gICAgICAgIC8vIEluIG9yZGVyIHRvIGVtdWxhdGUgImluc3RhbmNlb2YiLgotICAg
ICAgICBwcm94eS5fX3Byb3RvX18gPSBnbENvbnRleHQuX19wcm90b19fOwotICAgICAgICBwcm94
eS5jb25zdHJ1Y3RvciA9IGdsQ29udGV4dC5jb25zdHJ1Y3RvcjsKKyAgICAgICAgcmV0dXJuIHBy
b3h5OworICAgIH0sCiAKLSAgICAgICAgdmFyIGNvbnRleHRJZCA9IHRoaXMuX2dlbmVyYXRlT2Jq
ZWN0SWQoKTsKLSAgICAgICAgdGhpcy5faWRUb1dyYXBwZXJQcm94eVtjb250ZXh0SWRdID0gcHJv
eHk7Ci0gICAgICAgIHRoaXMuX2lkVG9SZWFsV2ViR0xDb250ZXh0W2NvbnRleHRJZF0gPSBnbENv
bnRleHQ7Ci0gICAgICAgIEluamVjdGVkU2NyaXB0SG9zdC53ZWJHTENvbnRleHRDcmVhdGVkKGNv
bnRleHRJZCk7CisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UKKyAg
ICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gb3JpZ2luYWxPYmplY3QKKyAgICAg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBvcmlnaW5hbEZ1bmN0aW9uCisgICAgICogQHBhcmFtIHtzdHJp
bmd9IGZ1bmN0aW9uTmFtZQorICAgICAqIEByZXR1cm4geyp9CisgICAgICovCisgICAgX3dyYXBG
dW5jdGlvbjogZnVuY3Rpb24ocmVzb3VyY2UsIG9yaWdpbmFsT2JqZWN0LCBvcmlnaW5hbEZ1bmN0
aW9uLCBmdW5jdGlvbk5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgbWFuYWdlciA9IHJlc291cmNlLm1hbmFnZXIoKTsKKyAg
ICAgICAgICAgIGlmICghbWFuYWdlciB8fCAhbWFuYWdlci5jYXB0dXJpbmcoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvbi5hcHBseShvcmlnaW5hbE9iamVjdCwgYXJn
dW1lbnRzKTsKKyAgICAgICAgICAgIG1hbmFnZXIuY2FwdHVyZUFyZ3VtZW50cyhyZXNvdXJjZSwg
YXJndW1lbnRzKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbEZ1bmN0aW9uLmFw
cGx5KG9yaWdpbmFsT2JqZWN0LCBhcmd1bWVudHMpOworICAgICAgICAgICAgdmFyIGNhbGwgPSBu
ZXcgQ2FsbChyZXNvdXJjZSwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHMsIHJlc3VsdCk7CisgICAg
ICAgICAgICBtYW5hZ2VyLnJlcG9ydENhbGwoY2FsbCk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9OworICAgIH0KK307CiAKLSAgICAgICAgcmV0dXJuIHByb3h5OworV2Vi
R0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UucHJvdG90eXBlLl9fcHJvdG9fXyA9IFJlc291cmNl
LnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7V2ViR0xSZW5k
ZXJpbmdDb250ZXh0fSBvcmlnaW5hbE9iamVjdAorICogQHBhcmFtIHtGdW5jdGlvbn0gb3JpZ2lu
YWxGdW5jdGlvbgorICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQorICogQHBhcmFtIHtB
cnJheX0gYXJncworICovCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5XcmFwRnVuY3Rp
b24gPSBmdW5jdGlvbihvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rpb25O
YW1lLCBhcmdzKQoreworICAgIHRoaXMuX29yaWdpbmFsT2JqZWN0ID0gb3JpZ2luYWxPYmplY3Q7
CisgICAgdGhpcy5fb3JpZ2luYWxGdW5jdGlvbiA9IG9yaWdpbmFsRnVuY3Rpb247CisgICAgdGhp
cy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMuX2FyZ3MgPSBhcmdzOwor
ICAgIHRoaXMuX2dsUmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob3JpZ2luYWxPYmplY3Qp
OworfQorCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5XcmFwRnVuY3Rpb24ucHJvdG90
eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4geyp9CisgICAgICovCisgICAgcmVzdWx0
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2V4ZWN1dGVkKSB7CisgICAg
ICAgICAgICB0aGlzLl9leGVjdXRlZCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9yZXN1bHQg
PSB0aGlzLl9vcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KHRoaXMuX29yaWdpbmFsT2JqZWN0LCB0aGlz
Ll9hcmdzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0OwogICAgIH0s
CiAKLSAgICBfZ2VuZXJhdGVPYmplY3RJZDogZnVuY3Rpb24oKQorICAgIC8qKgorICAgICAqIEBy
ZXR1cm4ge0NhbGx9CisgICAgICovCisgICAgY2FsbDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAg
ICAgdmFyIGlkID0gKyt0aGlzLl9sYXN0Qm91bmRPYmplY3RJZDsKLSAgICAgICAgdmFyIG9iamVj
dElkID0gIntcImluamVjdGVkU2NyaXB0SWRcIjoiICsgaW5qZWN0ZWRTY3JpcHRJZCArICIsXCJ3
ZWJHTElkXCI6IiArIGlkICsgIn0iOwotICAgICAgICByZXR1cm4gb2JqZWN0SWQ7CisgICAgICAg
IGlmICghdGhpcy5fY2FsbCkKKyAgICAgICAgICAgIHRoaXMuX2NhbGwgPSBuZXcgQ2FsbCh0aGlz
Ll9nbFJlc291cmNlLCB0aGlzLl9mdW5jdGlvbk5hbWUsIHRoaXMuX2FyZ3MsIHRoaXMucmVzdWx0
KCkpOworICAgICAgICByZXR1cm4gdGhpcy5fY2FsbDsKKyAgICB9Cit9OworCisvKioKKyAqIEBj
b25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBUcmFjZUxvZygpCit7CisgICAgdGhpcy5fY2FsbHMg
PSBbXTsKKyAgICB0aGlzLl9yZXNvdXJjZUNhY2hlID0gbmV3IENhY2hlKCk7Cit9CisKK1RyYWNl
TG9nLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAg
ICovCisgICAgc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Nh
bGxzLmxlbmd0aDsKICAgICB9LAogCi0gICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbihjb250ZXh0
SWQpCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UKKyAgICAgKi8K
KyAgICBjYXB0dXJlUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIHsKLSAgICAgICAg
dGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID0gewotICAgICAgICAgICAgY29udGV4dElkOiBjb250
ZXh0SWQsCi0gICAgICAgICAgICBjYXB0dXJlZENhbGxzTnVtOiAwCi0gICAgICAgIH07CisgICAg
ICAgIC8vIEZJWE1FOiBDYXB0dXJlIGN1cnJlbnQgcmVzb3VyY2Ugc3RhdGUgdG8gc3RhcnQgdGhl
IHJlcGxheSBmcm9tLgorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNh
bGwKKyAgICAgKi8KKyAgICBhZGRDYWxsOiBmdW5jdGlvbihjYWxsKQorICAgIHsKKyAgICAgICAg
Ly8gRklYTUU6IENsb25lIGNhbGwgYW5kIHB1c2ggdGhlIGNsb25lLgorICAgICAgICB0aGlzLl9j
YWxscy5wdXNoKGNhbGwpOworICAgIH0KK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8K
K2Z1bmN0aW9uIFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCkKK3sKKyAgICB0aGlzLl9jYXB0dXJp
bmcgPSBmYWxzZTsKKyAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOwor
ICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG51bGw7Cit9CisKK1Jlc291cmNlVHJhY2tpbmdNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAg
ICAqLworICAgIGNhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2NhcHR1cmluZzsKICAgICB9LAogCi0gICAgX3N0b3BDYXB0dXJpbmc6IGZ1bmN0aW9uKGlu
Zm8pCisgICAgLyoqCisgICAgICogQHJldHVybiB7VHJhY2VMb2d9CisgICAgICovCisgICAgbGFz
dFRyYWNlTG9nOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fY2FwdHVyaW5n
RnJhbWVJbmZvID09PSBpbmZvKQotICAgICAgICAgICAgdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZv
ID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RUcmFjZUxvZzsKICAgICB9LAogCi0g
ICAgX3dyYXBwZWRGdW5jdGlvbjogZnVuY3Rpb24oZ2xDb250ZXh0LCBmdW5jdGlvbk5hbWUpCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UKKyAgICAgKi8KKyAgICBy
ZWdpc3RlclJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKICAgICB7Ci0gICAgICAgIC8vIENh
bGwgcmVhbCBXZWJHTCBmdW5jdGlvbi4KLSAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5
cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwotICAgICAgICB2YXIgcmVzdWx0ID0gZ2xDb250
ZXh0W2Z1bmN0aW9uTmFtZV0uYXBwbHkoZ2xDb250ZXh0LCBhcmdzKTsKKyAgICAgICAgcmVzb3Vy
Y2Uuc2V0TWFuYWdlcih0aGlzKTsKKyAgICB9LAogCi0gICAgICAgIGlmICh0aGlzLl9jYXB0dXJp
bmdGcmFtZUluZm8gJiYgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHRbdGhpcy5fY2FwdHVyaW5n
RnJhbWVJbmZvLmNvbnRleHRJZF0gPT09IGdsQ29udGV4dCkgewotICAgICAgICAgICAgdmFyIGNh
cHR1cmVkQ2FsbHNOdW0gPSArK3RoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mby5jYXB0dXJlZENhbGxz
TnVtOwotICAgICAgICAgICAgaWYgKGNhcHR1cmVkQ2FsbHNOdW0gPT09IDEpCi0gICAgICAgICAg
ICAgICAgdGhpcy5fc2V0WmVyb1RpbWVvdXRzKHRoaXMuX3N0b3BDYXB0dXJpbmcuYmluZCh0aGlz
LCB0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8pKTsKLSAgICAgICAgICAgIEluamVjdGVkU2NyaXB0
SG9zdC53ZWJHTFJlcG9ydEZ1bmN0aW9uQ2FsbCh0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8uY29u
dGV4dElkLCBmdW5jdGlvbk5hbWUsICJbIiArIGFyZ3Muam9pbigiLCAiKSArICJdIiwgcmVzdWx0
ICsgIiIpOworICAgIHN0YXJ0Q2FwdHVyaW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBp
ZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAgICAgICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG5l
dyBUcmFjZUxvZygpOworICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICB0
aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge1RyYWNlTG9nPX0gdHJhY2VMb2cKKyAgICAgKi8KKyAgICBzdG9wQ2Fw
dHVyaW5nOiBmdW5jdGlvbih0cmFjZUxvZykKKyAgICB7CisgICAgICAgIGlmICh0cmFjZUxvZyAm
JiB0aGlzLl9sYXN0VHJhY2VMb2cgIT09IHRyYWNlTG9nKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fc3RvcENhcHR1
cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsKKyAgICB9LAorCisgICAgY2FwdHVyZUZyYW1lOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cgPSBuZXcgVHJhY2VMb2co
KTsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc3RvcENh
cHR1cmluZ09uRnJhbWVFbmQgPSB0cnVlOworICAgIH0sCisKKyAgICBjYXB0dXJlQXJndW1lbnRz
OiBmdW5jdGlvbihyZXNvdXJjZSwgYXJncykKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY2Fw
dHVyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cu
Y2FwdHVyZVJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBh
cmdzLmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgdmFyIHJlcyA9IFJlc291cmNl
LmZvck9iamVjdChhcmdzW2ldKTsKKyAgICAgICAgICAgIGlmIChyZXMpCisgICAgICAgICAgICAg
ICAgdGhpcy5fbGFzdFRyYWNlTG9nLmNhcHR1cmVSZXNvdXJjZShyZXMpOwogICAgICAgICB9Cisg
ICAgfSwKIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
Q2FsbH0gY2FsbAorICAgICAqLworICAgIHJlcG9ydENhbGw6IGZ1bmN0aW9uKGNhbGwpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuX2NhcHR1cmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nLmFkZENhbGwoY2FsbCk7CisgICAgICAgIGlmICh0aGlz
Ll9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCAmJiB0aGlzLl9sYXN0VHJhY2VMb2cuc2l6ZSgpID09
PSAxKSB7CisgICAgICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNl
OworICAgICAgICAgICAgdGhpcy5fc2V0WmVyb1RpbWVvdXRzKHRoaXMuc3RvcENhcHR1cmluZy5i
aW5kKHRoaXMsIHRoaXMuX2xhc3RUcmFjZUxvZykpOworICAgICAgICB9CiAgICAgfSwKIAorICAg
IC8qKgorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCisgICAgICovCiAgICAgX3Nl
dFplcm9UaW1lb3V0czogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewogICAgICAgICAvLyBXZSBu
ZWVkIGEgZmFzdGVzdCBhc3luYyBjYWxsYmFjaywgd2hhdGV2ZXIgZmlyZXMgZmlyc3QuCkBAIC0x
MzksNiArNDg1LDMzIEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICB9CiB9Owog
CisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgSW5qZWN0ZWRTY3JpcHQgPSBmdW5jdGlv
bigpCit7CisgICAgdGhpcy5fbWFuYWdlciA9IG5ldyBSZXNvdXJjZVRyYWNraW5nTWFuYWdlcigp
OworfQorCitJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHBh
cmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsQ29udGV4dAorICAgICAqIEByZXR1cm4ge09i
amVjdH0KKyAgICAgKi8KKyAgICB3cmFwV2ViR0xDb250ZXh0OiBmdW5jdGlvbihnbENvbnRleHQp
CisgICAgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3QoZ2xDb250
ZXh0KSB8fCBuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UoZ2xDb250ZXh0KTsKKyAg
ICAgICAgdGhpcy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAg
dmFyIHByb3h5ID0gcmVzb3VyY2UucHJveHlPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIHByb3h5
OworICAgIH0sCisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRoaXMuX21hbmFnZXIuY2FwdHVyZUZyYW1lKCk7CisgICAgfQorfTsKKwogdmFyIGluamVjdGVk
U2NyaXB0ID0gbmV3IEluamVjdGVkU2NyaXB0KCk7CiByZXR1cm4gaW5qZWN0ZWRTY3JpcHQ7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5w
eSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQppbmRleCAy
Mzc3NjQ2NWUzYTM2N2Q3MjRmY2Y3N2YwZTllOWZmMWE1MGU0NzNlLi42YWRkYzZiNjNlZDA0ZThj
NDRlNjlhYTE3YjM0N2ZjODAyMDhlN2NhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2NvbXBpbGUtZnJvbnQtZW5kLnB5CkBAIC0zODAsMyArMzgwLDE0IEBAIGNvbW1hbmQgKz0gIiAg
ICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRTb3Vy
Y2VUbXAuanMiCiBjb21tYW5kICs9ICJcbiIKIG9zLnN5c3RlbShjb21tYW5kKQogb3Muc3lzdGVt
KCJybSAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRTb3VyY2VUbXAu
anMiKQorCitwcmludCAiQ29tcGlsaW5nIEluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2Uu
anMuLi4iCitvcy5zeXN0ZW0oImVjaG8gXCJ2YXIgaW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVZh
bHVlID0gXCIgPiAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRXZWJH
TE1vZHVsZVNvdXJjZVRtcC5qcyIpCitvcy5zeXN0ZW0oImNhdCAgIiArIGluc3BlY3Rvcl9wYXRo
ICsgIi8iICsgIkluamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3VyY2UuanMiICsgIiA+PiAiICsg
aW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZVRt
cC5qcyIpCitjb21tYW5kID0gY29tcGlsZXJfY29tbWFuZAorY29tbWFuZCArPSAiICAgIC0tZXh0
ZXJucyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRFeHRlcm5zLmpz
IiArICIgXFxcbiIKK2NvbW1hbmQgKz0gIiAgICAtLW1vZHVsZSAiICsganNtb2R1bGVfbmFtZV9w
cmVmaXggKyAiaW5qZWN0ZWRfc2NyaXB0IiArICI6IiArICIxIiArICIgXFxcbiIKK2NvbW1hbmQg
Kz0gIiAgICAgICAgLS1qcyAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3Jp
cHRXZWJHTE1vZHVsZVNvdXJjZVRtcC5qcyIgKyAiIFxcXG4iCitjb21tYW5kICs9ICJcbiIKK29z
LnN5c3RlbShjb21tYW5kKQorb3Muc3lzdGVtKCJybSAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIg
KyAiSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZVRtcC5qcyIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159675</attachid>
            <date>2012-08-21 06:13:06 -0700</date>
            <delta_ts>2012-08-22 04:07:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90597-20120821171225.patch</filename>
            <type>text/plain</type>
            <size>18081</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg3OTdiMWE5MjJkM2M3
M2ZhN2M0OGI2NGE0Mjg0MDU0OGQ5YzM2MC4uNTA0ZmU1NmQxNDNjYTA0OTk5ZTIyNzdhNTRmYzI0
ZTQ0NDkwNWRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
cmFwIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMgYW5kIGNvbGxlY3QgYSB0cmFjZSBs
b2cgaWYgd2UgYXJlIGluIGNhcHR1cmluZyBtb2RlLgorICAgICAgICBTdHViYmVkIGNvZGUgZm9y
IGNvbGxlY3RpbmcgY2FsbHMgY29udHJpYnV0aW5nIHRvIGEgV2ViR0wgcmVzb3VyY2Ugc3RhdGUg
c28gdGhhdCB3ZSBjb3VsZCByZXBsYXkgdGhlbSBsYXRlci4KKworICAgICAgICBUeXBpY2FsIHNj
ZW5hcmlvOgorICAgICAgICAtIHdlIHdyYXAgYSBHTCBjb250ZXh0IHdpdGggSW5qZWN0ZWRTY3Jp
cHQud3JhcFdlYkdMQ29udGV4dCgpIGFuZCByZXR1cm4gYSBwcm94eSB0byB0aGUgaW5zcGVjdGVk
IHBhZ2UKKyAgICAgICAgLSB0aGUgcHJveHkgc2F2ZXMgYWxsIGNhbGxzIG5lY2Vzc2FyeSB0byBk
byBhIHJlcGxheSBsYXRlciAtIG9ubHkgdGhvc2UgdGhhdCBtb2RpZnkgYSByZXNvdXJjZSdzIHN0
YXRlCisgICAgICAgIC0gd2hlbiB3ZSB0dXJuIG9uIGNhcHR1cmluZyBtb2RlIChJbmplY3RlZFNj
cmlwdC5jYXB0dXJlRnJhbWUpLCB3ZSBzYXZlIGFsbCBXZWJHTCBjYWxscyB0byBhIHRyYWNlIGxv
ZworCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wOC0xOSAgS2VudGFybyBIYXJhICA8aGFyYWtl
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBNb3ZlIGNvbnRleHREZWJ1Z0lkKCkgYW5k
IHNldENvbnRleHREZWJ1Z0lkKCkgZnJvbSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwppbmRl
eCAwNjliN2MwMDM5YmMzNmNlNWU3ZDE0NzUxYWY5YWY5N2NjNDdlZGMwLi5iZTU5MDVlYjQ3Njgw
OWM5M2E3ZmM1MjAxY2I4ZjQ4ZGFhOWRlNjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC01NTQsMTUgKzU1NCwyOSBAQCBJbmpl
Y3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfSwK
IAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAgICogQHJldHVybiB7
T2JqZWN0fQorICAgICAqLyAKICAgICBtb2R1bGU6IGZ1bmN0aW9uKG5hbWUpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fbW9kdWxlc1tuYW1lXTsKICAgICB9LAotIAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNl
CisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLyAKICAgICBpbmplY3RNb2R1bGU6IGZ1
bmN0aW9uKG5hbWUsIHNvdXJjZSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9tb2R1bGVz
W25hbWVdOwotICAgICAgICB2YXIgbW9kdWxlID0gZXZhbCgiKCIgKyBzb3VyY2UgKyAiKSIpOwor
ICAgICAgICB2YXIgbW9kdWxlRnVuY3Rpb24gPSBldmFsKCIoIiArIHNvdXJjZSArICIpIik7Cisg
ICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsKKyAgICAg
ICAgICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmVycm9yKCJXZWIgSW5zcGVjdG9yIGVycm9y
OiBBIGZ1bmN0aW9uIHdhcyBleHBlY3RlZCBmb3IgbW9kdWxlICVzIGV2YWx1YXRpb24iLCBuYW1l
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZhciBtb2R1
bGUgPSBtb2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3RlZFdpbmRvdywgSW5qZWN0ZWRTY3JpcHRI
b3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQpOwogICAgICAgICB0aGlzLl9t
b2R1bGVzW25hbWVdID0gbW9kdWxlOwogICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgIH0sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZVNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlU291cmNlLmpzCmluZGV4IDQ0ODRiNjk4YzVmYWZlYWM4ZjAyYzQ0MzgzNmY1OWIw
MjE3ZDA3YzcuLjk3Nzg3Mjc2NzY1MWZkZDkzMjhkMGIzMGFiODI5NzRhYTQ1OWQxZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxl
U291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdl
YkdMTW9kdWxlU291cmNlLmpzCkBAIC0zMCwxMDQgKzMwLDQ1MCBAQAogCiAvKioKICAqIEBwYXJh
bSB7SW5qZWN0ZWRTY3JpcHRIb3N0fSBJbmplY3RlZFNjcmlwdEhvc3QKKyAqIEBwYXJhbSB7V2lu
ZG93fSBpbnNwZWN0ZWRXaW5kb3cKKyAqIEBwYXJhbSB7bnVtYmVyfSBpbmplY3RlZFNjcmlwdElk
CiAgKi8KIChmdW5jdGlvbiAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGlu
amVjdGVkU2NyaXB0SWQpIHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqLwotdmFyIEluamVj
dGVkU2NyaXB0ID0gZnVuY3Rpb24oKQorZnVuY3Rpb24gQ2FjaGUoKQogewotICAgIHRoaXMuX2xh
c3RCb3VuZE9iamVjdElkID0gMDsKLSAgICB0aGlzLl9pZFRvV3JhcHBlclByb3h5ID0ge307Ci0g
ICAgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQgPSB7fTsKLSAgICB0aGlzLl9jYXB0dXJpbmdG
cmFtZUluZm8gPSBudWxsOworICAgIHRoaXMucmVzZXQoKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQu
cHJvdG90eXBlID0gewotICAgIHdyYXBXZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkK
K0NhY2hlLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Cisg
ICAgICovCisgICAgc2l6ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgZm9yICh2YXIgaWQg
aW4gdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9p
ZFRvUmVhbFdlYkdMQ29udGV4dFtpZF0gPT09IGdsQ29udGV4dCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5faWRUb1dyYXBwZXJQcm94eVtpZF07Ci0gICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NpemU7CisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLl9pdGVtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgICAgIHRoaXMu
X3NpemUgPSAwOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0ga2V5
CisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBoYXM6IGZ1bmN0aW9uKGtl
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkgaW4gdGhpcy5faXRlbXM7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkKKyAgICAgKiBAcmV0dXJuIHtPYmpl
Y3R9CisgICAgICovCisgICAgZ2V0OiBmdW5jdGlvbihrZXkpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5faXRlbXNba2V5XTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IGtleQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtCisgICAgICovCisgICAgcHV0
OiBmdW5jdGlvbihrZXksIGl0ZW0pCisgICAgeworICAgICAgICBpZiAoIXRoaXMuaGFzKGtleSkp
CisgICAgICAgICAgICArK3RoaXMuX3NpemU7CisgICAgICAgIHRoaXMuX2l0ZW1zW2tleV0gPSBp
dGVtOworICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7UmVzb3Vy
Y2V8T2JqZWN0fSB0aGlzT2JqZWN0CisgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lCisg
KiBAcGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncworICogQHBhcmFtIHtSZXNvdXJjZXwqfSBy
ZXN1bHQKKyAqLworZnVuY3Rpb24gQ2FsbCh0aGlzT2JqZWN0LCBmdW5jdGlvbk5hbWUsIGFyZ3Ms
IHJlc3VsdCkKK3sKKyAgICB0aGlzLl90aGlzT2JqZWN0ID0gdGhpc09iamVjdDsKKyAgICB0aGlz
Ll9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDApOworICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsK
K30KKworQ2FsbC5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVybiB7UmVzb3Vy
Y2V9CisgICAgICovCisgICAgcmVzb3VyY2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBSZXNvdXJjZS5mb3JPYmplY3QodGhpcy5fdGhpc09iamVjdCk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBmdW5jdGlvbk5hbWU6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbk5hbWU7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0FycmF5fQorICAgICAqLworICAgIGFy
Z3M6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9hcmdzOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHsqfQorICAgICAqLworICAgIHJlc3VsdDogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKKyAgICB9Cit9CisK
Ky8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlZE9iamVjdAor
ICovCitmdW5jdGlvbiBSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQoreworICAgIHRoaXMuX2lkID0g
KytSZXNvdXJjZS5fdW5pcXVlSWQ7CisgICAgdGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0gbnVsbDsK
KyAgICB0aGlzLnNldFdyYXBwZWRPYmplY3Qod3JhcHBlZE9iamVjdCk7Cit9CisKK1Jlc291cmNl
Ll91bmlxdWVJZCA9IDA7CisKKy8qKgorICogQHBhcmFtIHtPYmplY3R9IG9iagorICogQHJldHVy
biB7UmVzb3VyY2V9CisgKi8KK1Jlc291cmNlLmZvck9iamVjdCA9IGZ1bmN0aW9uKG9iaikKK3sK
KyAgICBpZiAoIW9iaiB8fCBvYmogaW5zdGFuY2VvZiBSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJu
IG9iajsKKyAgICBpZiAodHlwZW9mIG9iaiA9PT0gIm9iamVjdCIpCisgICAgICAgIHJldHVybiBv
YmpbIl9fcmVzb3VyY2VPYmplY3QiXTsKKyAgICByZXR1cm4gbnVsbDsKK30KKworUmVzb3VyY2Uu
cHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAgKi8K
KyAgICBpZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lkOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovCisgICAgd3Jh
cHBlZE9iamVjdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3dyYXBw
ZWRPYmplY3Q7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1
ZQorICAgICAqLworICAgIHNldFdyYXBwZWRPYmplY3Q6IGZ1bmN0aW9uKHZhbHVlKQorICAgIHsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQodmFsdWUgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIFJlc291
cmNlKSwgIkJpbmRpbmcgYSBSZXNvdXJjZSBvYmplY3QgdG8gYW5vdGhlciBSZXNvdXJjZSBvYmpl
Y3Q/Iik7CisgICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSB2YWx1ZTsKKyAgICAgICAgdGhp
cy5fYmluZE9iamVjdFRvUmVzb3VyY2UodmFsdWUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovCisgICAgcHJveHlPYmplY3Q6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIC8vIE5vIHByb3h5IHdyYXBwaW5nIGJ5IGRlZmF1bHQuCisgICAgICAg
IHJldHVybiB0aGlzLndyYXBwZWRPYmplY3QoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHJldHVybiB7UmVzb3VyY2VUcmFja2luZ01hbmFnZXJ9CisgICAgICovCisgICAgbWFuYWdlcjog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlTWFuYWdlcjsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZVRyYWNraW5nTWFuYWdl
cn0gdmFsdWUKKyAgICAgKi8KKyAgICBzZXRNYW5hZ2VyOiBmdW5jdGlvbih2YWx1ZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IHZhbHVlOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CisgICAgICovCisgICAgX2JpbmRPYmpl
Y3RUb1Jlc291cmNlOiBmdW5jdGlvbihvYmplY3QpCisgICAgeworICAgICAgICBvYmplY3RbIl9f
cmVzb3VyY2VPYmplY3QiXSA9IHRoaXM7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3Rv
cgorICogQGV4dGVuZHMge1Jlc291cmNlfQorICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRl
eHR9IGdsQ29udGV4dAorICovCitmdW5jdGlvbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJj
ZShnbENvbnRleHQpCit7CisgICAgUmVzb3VyY2UuY2FsbCh0aGlzLCBnbENvbnRleHQpOworICAg
IHRoaXMuX3Byb3h5T2JqZWN0ID0gbnVsbDsKK30KIAotICAgICAgICB2YXIgcHJveHkgPSB7fTsK
LSAgICAgICAgdmFyIG5hbWVQcm9jZXNzZWQgPSB7fTsKLSAgICAgICAgbmFtZVByb2Nlc3NlZC5f
X3Byb3RvX18gPSBudWxsOwotICAgICAgICBuYW1lUHJvY2Vzc2VkLmNvbnN0cnVjdG9yID0gdHJ1
ZTsKLQotICAgICAgICBmdW5jdGlvbiBwcm9jZXNzTmFtZShuYW1lKSB7Ci0gICAgICAgICAgICBp
ZiAobmFtZVByb2Nlc3NlZFtuYW1lXSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBuYW1lUHJvY2Vzc2VkW25hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICh0eXBlb2Yg
Z2xDb250ZXh0W25hbWVdID09PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgICAgIHByb3h5W25h
bWVdID0gaW5qZWN0ZWRTY3JpcHQuX3dyYXBwZWRGdW5jdGlvbi5iaW5kKGluamVjdGVkU2NyaXB0
LCBnbENvbnRleHQsIG5hbWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgbmFtZSwgeworV2ViR0xSZW5kZXJpbmdDb250ZXh0
UmVzb3VyY2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge09iamVjdH0K
KyAgICAgKi8KKyAgICBwcm94eU9iamVjdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9wcm94eU9iamVjdCkKKyAgICAgICAgICAgIHRoaXMuX3Byb3h5T2JqZWN0ID0gdGhp
cy5fd3JhcE9iamVjdCgpOworICAgICAgICByZXR1cm4gdGhpcy5fcHJveHlPYmplY3Q7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICBfd3Jh
cE9iamVjdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGdsQ29udGV4dCA9IHRoaXMu
d3JhcHBlZE9iamVjdCgpOworICAgICAgICB2YXIgcHJveHkgPSBPYmplY3QuY3JlYXRlKGdsQ29u
dGV4dC5fX3Byb3RvX18pOyAvLyBJbiBvcmRlciB0byBlbXVsYXRlICJpbnN0YW5jZW9mIi4KKwor
ICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0
eShwcm9wZXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBnbENvbnRleHRb
cHJvcGVydHldID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IG92
ZXJyaWRlIEdMIGNhbGxzIGFmZmVjdGluZyByZXNvdXJjZXMgc3RhdGVzIGhlcmUuCisgICAgICAg
ICAgICAgICAgcHJveHlbcHJvcGVydHldID0gc2VsZi5fd3JhcEZ1bmN0aW9uKHNlbGYsIGdsQ29u
dGV4dCwgZ2xDb250ZXh0W3Byb3BlcnR5XSwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNl
IGlmICgvXltBLVowLTlfXSskLy50ZXN0KHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIC8v
IEZhc3QgYWNjZXNzIHRvIGVudW1zIGFuZCBjb25zdGFudHMuCisgICAgICAgICAgICAgICAgcHJv
eHlbcHJvcGVydHldID0gZ2xDb250ZXh0W3Byb3BlcnR5XTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBwcm9wZXJ0eSwg
ewogICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkKICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsQ29udGV4dFtuYW1lXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbENvbnRleHRbcHJvcGVydHldOwogICAgICAg
ICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVl
KQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbENvbnRl
eHRbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsQ29udGV4dFtwcm9w
ZXJ0eV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yICh2YXIgbyA9IGdsQ29u
dGV4dDsgbzsgbyA9IG8uX19wcm90b19fKQotICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3Bl
cnR5TmFtZXMobykuZm9yRWFjaChwcm9jZXNzTmFtZSk7CisgICAgICAgIGZvciAodmFyIHByb3Bl
cnR5IGluIGdsQ29udGV4dCkKKyAgICAgICAgICAgIHByb2Nlc3NQcm9wZXJ0eShwcm9wZXJ0eSk7
CisKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFy
YW0ge1Jlc291cmNlfSByZXNvdXJjZQorICAgICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBvcmlnaW5hbE9iamVjdAorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdpbmFsRnVu
Y3Rpb24KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lCisgICAgICogQHJldHVy
biB7Kn0KKyAgICAgKi8KKyAgICBfd3JhcEZ1bmN0aW9uOiBmdW5jdGlvbihyZXNvdXJjZSwgb3Jp
Z2luYWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtYW5hZ2Vy
ID0gcmVzb3VyY2UubWFuYWdlcigpOworICAgICAgICAgICAgaWYgKCFtYW5hZ2VyIHx8ICFtYW5h
Z2VyLmNhcHR1cmluZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmN0aW9u
LmFwcGx5KG9yaWdpbmFsT2JqZWN0LCBhcmd1bWVudHMpOworICAgICAgICAgICAgbWFuYWdlci5j
YXB0dXJlQXJndW1lbnRzKHJlc291cmNlLCBhcmd1bWVudHMpOworICAgICAgICAgICAgdmFyIHJl
c3VsdCA9IG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob3JpZ2luYWxPYmplY3QsIGFyZ3VtZW50cyk7
CisgICAgICAgICAgICB2YXIgY2FsbCA9IG5ldyBDYWxsKHJlc291cmNlLCBmdW5jdGlvbk5hbWUs
IGFyZ3VtZW50cywgcmVzdWx0KTsKKyAgICAgICAgICAgIG1hbmFnZXIucmVwb3J0Q2FsbChjYWxs
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgfQorfQogCi0g
ICAgICAgIC8vIEluIG9yZGVyIHRvIGVtdWxhdGUgImluc3RhbmNlb2YiLgotICAgICAgICBwcm94
eS5fX3Byb3RvX18gPSBnbENvbnRleHQuX19wcm90b19fOwotICAgICAgICBwcm94eS5jb25zdHJ1
Y3RvciA9IGdsQ29udGV4dC5jb25zdHJ1Y3RvcjsKK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291
cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBSZXNvdXJjZS5wcm90b3R5cGU7CiAKLSAgICAgICAg
dmFyIGNvbnRleHRJZCA9IHRoaXMuX2dlbmVyYXRlT2JqZWN0SWQoKTsKLSAgICAgICAgdGhpcy5f
aWRUb1dyYXBwZXJQcm94eVtjb250ZXh0SWRdID0gcHJveHk7Ci0gICAgICAgIHRoaXMuX2lkVG9S
ZWFsV2ViR0xDb250ZXh0W2NvbnRleHRJZF0gPSBnbENvbnRleHQ7Ci0gICAgICAgIEluamVjdGVk
U2NyaXB0SG9zdC53ZWJHTENvbnRleHRDcmVhdGVkKGNvbnRleHRJZCk7CisvKioKKyAqIEBjb25z
dHJ1Y3RvcgorICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IG9yaWdpbmFsT2JqZWN0
CisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcmlnaW5hbEZ1bmN0aW9uCisgKiBAcGFyYW0ge3N0cmlu
Z30gZnVuY3Rpb25OYW1lCisgKiBAcGFyYW0ge0FycmF5fSBhcmdzCisgKi8KK1dlYkdMUmVuZGVy
aW5nQ29udGV4dFJlc291cmNlLldyYXBGdW5jdGlvbiA9IGZ1bmN0aW9uKG9yaWdpbmFsT2JqZWN0
LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGFyZ3MpCit7CisgICAgdGhpcy5fb3Jp
Z2luYWxPYmplY3QgPSBvcmlnaW5hbE9iamVjdDsKKyAgICB0aGlzLl9vcmlnaW5hbEZ1bmN0aW9u
ID0gb3JpZ2luYWxGdW5jdGlvbjsKKyAgICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5h
bWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7CisgICAgdGhpcy5fZ2xSZXNvdXJjZSA9IFJlc291
cmNlLmZvck9iamVjdChvcmlnaW5hbE9iamVjdCk7Cit9CiAKLSAgICAgICAgcmV0dXJuIHByb3h5
OworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuV3JhcEZ1bmN0aW9uLnByb3RvdHlwZSA9
IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHsqfQorICAgICAqLworICAgIHJlc3VsdDogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRlZCkgeworICAgICAgICAg
ICAgdGhpcy5fZXhlY3V0ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5fcmVzdWx0ID0gdGhp
cy5fb3JpZ2luYWxGdW5jdGlvbi5hcHBseSh0aGlzLl9vcmlnaW5hbE9iamVjdCwgdGhpcy5fYXJn
cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKICAgICB9LAogCi0g
ICAgX2dlbmVyYXRlT2JqZWN0SWQ6IGZ1bmN0aW9uKCkKKyAgICAvKioKKyAgICAgKiBAcmV0dXJu
IHtDYWxsfQorICAgICAqLworICAgIGNhbGw6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZh
ciBpZCA9ICsrdGhpcy5fbGFzdEJvdW5kT2JqZWN0SWQ7Ci0gICAgICAgIHZhciBvYmplY3RJZCA9
ICJ7XCJpbmplY3RlZFNjcmlwdElkXCI6IiArIGluamVjdGVkU2NyaXB0SWQgKyAiLFwid2ViR0xJ
ZFwiOiIgKyBpZCArICJ9IjsKLSAgICAgICAgcmV0dXJuIG9iamVjdElkOworICAgICAgICBpZiAo
IXRoaXMuX2NhbGwpCisgICAgICAgICAgICB0aGlzLl9jYWxsID0gbmV3IENhbGwodGhpcy5fZ2xS
ZXNvdXJjZSwgdGhpcy5fZnVuY3Rpb25OYW1lLCB0aGlzLl9hcmdzLCB0aGlzLnJlc3VsdCgpKTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGw7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1
Y3RvcgorICovCitmdW5jdGlvbiBUcmFjZUxvZygpCit7CisgICAgdGhpcy5fY2FsbHMgPSBbXTsK
KyAgICB0aGlzLl9yZXNvdXJjZUNhY2hlID0gbmV3IENhY2hlKCk7Cit9CisKK1RyYWNlTG9nLnBy
b3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisg
ICAgc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzLmxl
bmd0aDsKICAgICB9LAogCi0gICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbihjb250ZXh0SWQpCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UKKyAgICAgKi8KKyAgICBj
YXB0dXJlUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIHsKLSAgICAgICAgdGhpcy5f
Y2FwdHVyaW5nRnJhbWVJbmZvID0gewotICAgICAgICAgICAgY29udGV4dElkOiBjb250ZXh0SWQs
Ci0gICAgICAgICAgICBjYXB0dXJlZENhbGxzTnVtOiAwCi0gICAgICAgIH07CisgICAgICAgIC8v
IEZJWE1FOiBDYXB0dXJlIGN1cnJlbnQgcmVzb3VyY2Ugc3RhdGUgdG8gc3RhcnQgdGhlIHJlcGxh
eSBmcm9tLgogICAgIH0sCiAKLSAgICBfc3RvcENhcHR1cmluZzogZnVuY3Rpb24oaW5mbykKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KKyAgICBhZGRDYWxsOiBm
dW5jdGlvbihjYWxsKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5m
byA9PT0gaW5mbykKLSAgICAgICAgICAgIHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mbyA9IG51bGw7
CisgICAgICAgIC8vIEZJWE1FOiBDbG9uZSBjYWxsIGFuZCBwdXNoIHRoZSBjbG9uZS4KKyAgICAg
ICAgdGhpcy5fY2FsbHMucHVzaChjYWxsKTsKKyAgICB9Cit9CisKKy8qKgorICogQGNvbnN0cnVj
dG9yCisgKi8KK2Z1bmN0aW9uIFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCkKK3sKKyAgICB0aGlz
Ll9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9
IGZhbHNlOworICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG51bGw7Cit9CisKK1Jlc291cmNlVHJh
Y2tpbmdNYW5hZ2VyLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29s
ZWFufQorICAgICAqLworICAgIGNhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2NhcHR1cmluZzsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVy
biB7VHJhY2VMb2d9CisgICAgICovCisgICAgbGFzdFRyYWNlTG9nOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFRyYWNlTG9nOwogICAgIH0sCiAKLSAgICBfd3Jh
cHBlZEZ1bmN0aW9uOiBmdW5jdGlvbihnbENvbnRleHQsIGZ1bmN0aW9uTmFtZSkKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge1Jlc291cmNlfSByZXNvdXJjZQorICAgICAqLworICAgIHJlZ2lzdGVy
UmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIHsKLSAgICAgICAgLy8gQ2FsbCByZWFs
IFdlYkdMIGZ1bmN0aW9uLgotICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAgICAgIHZhciByZXN1bHQgPSBnbENvbnRleHRbZnVu
Y3Rpb25OYW1lXS5hcHBseShnbENvbnRleHQsIGFyZ3MpOworICAgICAgICByZXNvdXJjZS5zZXRN
YW5hZ2VyKHRoaXMpOworICAgIH0sCisKKyAgICBzdGFydENhcHR1cmluZzogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcpCisgICAgICAgICAgICB0aGlzLl9s
YXN0VHJhY2VMb2cgPSBuZXcgVHJhY2VMb2coKTsKKyAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxzZTsKKyAg
ICB9LAogCi0gICAgICAgIGlmICh0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gJiYgdGhpcy5faWRU
b1JlYWxXZWJHTENvbnRleHRbdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvLmNvbnRleHRJZF0gPT09
IGdsQ29udGV4dCkgewotICAgICAgICAgICAgdmFyIGNhcHR1cmVkQ2FsbHNOdW0gPSArK3RoaXMu
X2NhcHR1cmluZ0ZyYW1lSW5mby5jYXB0dXJlZENhbGxzTnVtOwotICAgICAgICAgICAgaWYgKGNh
cHR1cmVkQ2FsbHNOdW0gPT09IDEpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0WmVyb1RpbWVv
dXRzKHRoaXMuX3N0b3BDYXB0dXJpbmcuYmluZCh0aGlzLCB0aGlzLl9jYXB0dXJpbmdGcmFtZUlu
Zm8pKTsKLSAgICAgICAgICAgIEluamVjdGVkU2NyaXB0SG9zdC53ZWJHTFJlcG9ydEZ1bmN0aW9u
Q2FsbCh0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8uY29udGV4dElkLCBmdW5jdGlvbk5hbWUsICJb
IiArIGFyZ3Muam9pbigiLCAiKSArICJdIiwgcmVzdWx0ICsgIiIpOworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7VHJhY2VMb2c9fSB0cmFjZUxvZworICAgICAqLworICAgIHN0b3BDYXB0dXJpbmc6
IGZ1bmN0aW9uKHRyYWNlTG9nKQorICAgIHsKKyAgICAgICAgaWYgKHRyYWNlTG9nICYmIHRoaXMu
X2xhc3RUcmFjZUxvZyAhPT0gdHJhY2VMb2cpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHRoaXMuX2NhcHR1cmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25G
cmFtZUVuZCA9IGZhbHNlOworICAgIH0sCisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG5ldyBUcmFjZUxvZygpOworICAg
ICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5n
T25GcmFtZUVuZCA9IHRydWU7CisgICAgfSwKKworICAgIGNhcHR1cmVBcmd1bWVudHM6IGZ1bmN0
aW9uKHJlc291cmNlLCBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2xhc3RUcmFjZUxvZy5jYXB0dXJl
UmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3MubGVu
Z3RoOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICB2YXIgcmVzID0gUmVzb3VyY2UuZm9yT2Jq
ZWN0KGFyZ3NbaV0pOworICAgICAgICAgICAgaWYgKHJlcykKKyAgICAgICAgICAgICAgICB0aGlz
Ll9sYXN0VHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJlcyk7CiAgICAgICAgIH0KKyAgICB9LAog
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWxsfSBj
YWxsCisgICAgICovCisgICAgcmVwb3J0Q2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0
aGlzLl9sYXN0VHJhY2VMb2cuYWRkQ2FsbChjYWxsKTsKKyAgICAgICAgaWYgKHRoaXMuX3N0b3BD
YXB0dXJpbmdPbkZyYW1lRW5kICYmIHRoaXMuX2xhc3RUcmFjZUxvZy5zaXplKCkgPT09IDEpIHsK
KyAgICAgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7CisgICAg
ICAgICAgICB0aGlzLl9zZXRaZXJvVGltZW91dHModGhpcy5zdG9wQ2FwdHVyaW5nLmJpbmQodGhp
cywgdGhpcy5fbGFzdFRyYWNlTG9nKSk7CisgICAgICAgIH0KICAgICB9LAogCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKKyAgICAgKi8KICAgICBfc2V0WmVyb1Rp
bWVvdXRzOiBmdW5jdGlvbihjYWxsYmFjaykKICAgICB7CiAgICAgICAgIC8vIFdlIG5lZWQgYSBm
YXN0ZXN0IGFzeW5jIGNhbGxiYWNrLCB3aGF0ZXZlciBmaXJlcyBmaXJzdC4KQEAgLTEzNyw3ICs0
ODMsMzQgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICBjaGFubmVsLnBv
cnQyLnBvc3RNZXNzYWdlKCIiKTsKICAgICAgICAgaW5zcGVjdGVkV2luZG93LnNldFRpbWVvdXQo
Y2FsbGJhY2ssIDApOwogICAgIH0KLX07Cit9CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8K
K3ZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLl9tYW5hZ2VyID0g
bmV3IFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCk7Cit9CisKK0luamVjdGVkU2NyaXB0LnByb3Rv
dHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0g
Z2xDb250ZXh0CisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLworICAgIHdyYXBXZWJH
TENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJj
ZSA9IFJlc291cmNlLmZvck9iamVjdChnbENvbnRleHQpIHx8IG5ldyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRSZXNvdXJjZShnbENvbnRleHQpOworICAgICAgICB0aGlzLl9tYW5hZ2VyLnJlZ2lzdGVy
UmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICB2YXIgcHJveHkgPSByZXNvdXJjZS5wcm94eU9i
amVjdCgpOworICAgICAgICByZXR1cm4gcHJveHk7CisgICAgfSwKKworICAgIGNhcHR1cmVGcmFt
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFuYWdlci5jYXB0dXJlRnJhbWUo
KTsKKyAgICB9Cit9CiAKIHZhciBpbmplY3RlZFNjcmlwdCA9IG5ldyBJbmplY3RlZFNjcmlwdCgp
OwogcmV0dXJuIGluamVjdGVkU2NyaXB0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Nv
bXBpbGUtZnJvbnQtZW5kLnB5CmluZGV4IDIzNzc2NDY1ZTNhMzY3ZDcyNGZjZjc3ZjBlOWU5ZmYx
YTUwZTQ3M2UuLjZhZGRjNmI2M2VkMDRlOGM0NGU2OWFhMTdiMzQ3ZmM4MDIwOGU3Y2EgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKQEAgLTM4MCwz
ICszODAsMTQgQEAgY29tbWFuZCArPSAiICAgICAgICAtLWpzICIgKyBpbnNwZWN0b3JfcGF0aCAr
ICIvIiArICJJbmplY3RlZFNjcmlwdFNvdXJjZVRtcC5qcyIKIGNvbW1hbmQgKz0gIlxuIgogb3Mu
c3lzdGVtKGNvbW1hbmQpCiBvcy5zeXN0ZW0oInJtICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiAr
ICJJbmplY3RlZFNjcmlwdFNvdXJjZVRtcC5qcyIpCisKK3ByaW50ICJDb21waWxpbmcgSW5qZWN0
ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcy4uLiIKK29zLnN5c3RlbSgiZWNobyBcInZhciBp
bmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlVmFsdWUgPSBcIiA+ICIgKyBpbnNwZWN0b3JfcGF0aCAr
ICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlVG1wLmpzIikKK29zLnN5c3Rl
bSgiY2F0ICAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRXZWJHTE1v
ZHVsZVNvdXJjZS5qcyIgKyAiID4+ICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3Rl
ZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlVG1wLmpzIikKK2NvbW1hbmQgPSBjb21waWxlcl9jb21t
YW5kCitjb21tYW5kICs9ICIgICAgLS1leHRlcm5zICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiAr
ICJJbmplY3RlZFNjcmlwdEV4dGVybnMuanMiICsgIiBcXFxuIgorY29tbWFuZCArPSAiICAgIC0t
bW9kdWxlICIgKyBqc21vZHVsZV9uYW1lX3ByZWZpeCArICJpbmplY3RlZF9zY3JpcHQiICsgIjoi
ICsgIjEiICsgIiBcXFxuIgorY29tbWFuZCArPSAiICAgICAgICAtLWpzICIgKyBpbnNwZWN0b3Jf
cGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlVG1wLmpzIiArICIg
XFxcbiIKK2NvbW1hbmQgKz0gIlxuIgorb3Muc3lzdGVtKGNvbW1hbmQpCitvcy5zeXN0ZW0oInJt
ICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291
cmNlVG1wLmpzIikK
</data>
<flag name="review"
          id="170054"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="170055"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159878</attachid>
            <date>2012-08-22 01:25:10 -0700</date>
            <delta_ts>2012-08-22 04:07:21 -0700</delta_ts>
            <desc>Rebased patch to land</desc>
            <filename>bug-90597-20120822122507.patch</filename>
            <type>text/plain</type>
            <size>18144</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZjM2E3MTdhZDcxOGVj
YmViYzE1OGRiNjA3ODU5ZjE5NjMxYjBmMi4uMzg4YTJlNGY3N2M0OTY1ZDcwZmMyZWNjMjRjMTEy
NDAwMGI3YmRhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTA1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gR2VuZXJpYyBmcmFtZXdvcmsgZHJhZnQgZm9yIHRyYWNraW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
cmFwIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMgYW5kIGNvbGxlY3QgYSB0cmFjZSBs
b2cgaWYgd2UgYXJlIGluIGNhcHR1cmluZyBtb2RlLgorICAgICAgICBTdHViYmVkIGNvZGUgZm9y
IGNvbGxlY3RpbmcgY2FsbHMgY29udHJpYnV0aW5nIHRvIGEgV2ViR0wgcmVzb3VyY2Ugc3RhdGUg
c28gdGhhdCB3ZSBjb3VsZCByZXBsYXkgdGhlbSBsYXRlci4KKworICAgICAgICBUeXBpY2FsIHNj
ZW5hcmlvOgorICAgICAgICAtIHdlIHdyYXAgYSBHTCBjb250ZXh0IHdpdGggSW5qZWN0ZWRTY3Jp
cHQud3JhcFdlYkdMQ29udGV4dCgpIGFuZCByZXR1cm4gYSBwcm94eSB0byB0aGUgaW5zcGVjdGVk
IHBhZ2UKKyAgICAgICAgLSB0aGUgcHJveHkgc2F2ZXMgYWxsIGNhbGxzIG5lY2Vzc2FyeSB0byBk
byBhIHJlcGxheSBsYXRlciAtIG9ubHkgdGhvc2UgdGhhdCBtb2RpZnkgYSByZXNvdXJjZSdzIHN0
YXRlCisgICAgICAgIC0gd2hlbiB3ZSB0dXJuIG9uIGNhcHR1cmluZyBtb2RlIChJbmplY3RlZFNj
cmlwdC5jYXB0dXJlRnJhbWUpLCB3ZSBzYXZlIGFsbCBXZWJHTCBjYWxscyB0byBhIHRyYWNlIGxv
ZworCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xNb2R1bGVTb3Vy
Y2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wOC0yMiAgVGFrYXNoaSBTYWthbW90byAgPHRh
c2FrQGdvb2dsZS5jb20+CiAKICAgICAgICAgRHluYW1pY2FsbHkgc3R5bGluZyBTaGFkb3dEb20g
Y29udGVudCBvbiBhIG5vZGUgZGlzdHJpYnV0ZWQgdG8gYW5vdGhlciBzaGFkb3cgaW5zZXJ0aW9u
IHBvaW50IGZhaWxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0U291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0U291cmNlLmpzCmluZGV4IGUxMWUyNWEwODIzYmM2NzljNjk0MzllOTAxM2FmYzQ4MTA4NGU3
NDcuLjU2ZDczNjY5MTNiODM5MGE3MzFjN2M2MzRkNzM1ZGI2MDhlZGUwYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTU1NCwx
NSArNTU0LDI5IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJu
IG9iamVjdDsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUK
KyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAgIG1vZHVsZTogZnVuY3Rpb24o
bmFtZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGVzW25hbWVdOwogICAgIH0s
Ci0gCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBzb3VyY2UKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovIAogICAg
IGluamVjdE1vZHVsZTogZnVuY3Rpb24obmFtZSwgc291cmNlKQogICAgIHsKICAgICAgICAgZGVs
ZXRlIHRoaXMuX21vZHVsZXNbbmFtZV07Ci0gICAgICAgIHZhciBtb2R1bGUgPSBJbmplY3RlZFNj
cmlwdEhvc3QuZXZhbHVhdGUoIigiICsgc291cmNlICsgIikiKTsKKyAgICAgICAgdmFyIG1vZHVs
ZUZ1bmN0aW9uID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIHNvdXJjZSArICIp
Iik7CisgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsK
KyAgICAgICAgICAgIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmVycm9yKCJXZWIgSW5zcGVjdG9y
IGVycm9yOiBBIGZ1bmN0aW9uIHdhcyBleHBlY3RlZCBmb3IgbW9kdWxlICVzIGV2YWx1YXRpb24i
LCBuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHZh
ciBtb2R1bGUgPSBtb2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3RlZFdpbmRvdywgSW5qZWN0ZWRT
Y3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQpOwogICAgICAgICB0
aGlzLl9tb2R1bGVzW25hbWVdID0gbW9kdWxlOwogICAgICAgICByZXR1cm4gbW9kdWxlOwogICAg
IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdFdlYkdMTW9kdWxlU291cmNlLmpzCmluZGV4IDQ0ODRiNjk4YzVmYWZlYWM4ZjAyYzQ0Mzgz
NmY1OWIwMjE3ZDA3YzcuLjk3Nzg3Mjc2NzY1MWZkZDkzMjhkMGIzMGFiODI5NzRhYTQ1OWQxZTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFdlYkdM
TW9kdWxlU291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdFdlYkdMTW9kdWxlU291cmNlLmpzCkBAIC0zMCwxMDQgKzMwLDQ1MCBAQAogCiAvKioKICAq
IEBwYXJhbSB7SW5qZWN0ZWRTY3JpcHRIb3N0fSBJbmplY3RlZFNjcmlwdEhvc3QKKyAqIEBwYXJh
bSB7V2luZG93fSBpbnNwZWN0ZWRXaW5kb3cKKyAqIEBwYXJhbSB7bnVtYmVyfSBpbmplY3RlZFNj
cmlwdElkCiAgKi8KIChmdW5jdGlvbiAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5k
b3csIGluamVjdGVkU2NyaXB0SWQpIHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqLwotdmFy
IEluamVjdGVkU2NyaXB0ID0gZnVuY3Rpb24oKQorZnVuY3Rpb24gQ2FjaGUoKQogewotICAgIHRo
aXMuX2xhc3RCb3VuZE9iamVjdElkID0gMDsKLSAgICB0aGlzLl9pZFRvV3JhcHBlclByb3h5ID0g
e307Ci0gICAgdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQgPSB7fTsKLSAgICB0aGlzLl9jYXB0
dXJpbmdGcmFtZUluZm8gPSBudWxsOworICAgIHRoaXMucmVzZXQoKTsKIH0KIAotSW5qZWN0ZWRT
Y3JpcHQucHJvdG90eXBlID0gewotICAgIHdyYXBXZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29u
dGV4dCkKK0NhY2hlLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1i
ZXJ9CisgICAgICovCisgICAgc2l6ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgZm9yICh2
YXIgaWQgaW4gdGhpcy5faWRUb1JlYWxXZWJHTENvbnRleHQpIHsKLSAgICAgICAgICAgIGlmICh0
aGlzLl9pZFRvUmVhbFdlYkdMQ29udGV4dFtpZF0gPT09IGdsQ29udGV4dCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5faWRUb1dyYXBwZXJQcm94eVtpZF07Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3NpemU7CisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB0aGlzLl9pdGVtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgICAg
IHRoaXMuX3NpemUgPSAwOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJl
cn0ga2V5CisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBoYXM6IGZ1bmN0
aW9uKGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkgaW4gdGhpcy5faXRlbXM7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkKKyAgICAgKiBAcmV0dXJu
IHtPYmplY3R9CisgICAgICovCisgICAgZ2V0OiBmdW5jdGlvbihrZXkpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5faXRlbXNba2V5XTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtudW1iZXJ9IGtleQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtCisgICAgICovCisg
ICAgcHV0OiBmdW5jdGlvbihrZXksIGl0ZW0pCisgICAgeworICAgICAgICBpZiAoIXRoaXMuaGFz
KGtleSkpCisgICAgICAgICAgICArK3RoaXMuX3NpemU7CisgICAgICAgIHRoaXMuX2l0ZW1zW2tl
eV0gPSBpdGVtOworICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7
UmVzb3VyY2V8T2JqZWN0fSB0aGlzT2JqZWN0CisgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25O
YW1lCisgKiBAcGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncworICogQHBhcmFtIHtSZXNvdXJj
ZXwqfSByZXN1bHQKKyAqLworZnVuY3Rpb24gQ2FsbCh0aGlzT2JqZWN0LCBmdW5jdGlvbk5hbWUs
IGFyZ3MsIHJlc3VsdCkKK3sKKyAgICB0aGlzLl90aGlzT2JqZWN0ID0gdGhpc09iamVjdDsKKyAg
ICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDApOworICAgIHRoaXMuX3Jlc3VsdCA9IHJl
c3VsdDsKK30KKworQ2FsbC5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHJldHVybiB7
UmVzb3VyY2V9CisgICAgICovCisgICAgcmVzb3VyY2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBSZXNvdXJjZS5mb3JPYmplY3QodGhpcy5fdGhpc09iamVjdCk7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBmdW5jdGlv
bk5hbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbk5h
bWU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0FycmF5fQorICAgICAqLwor
ICAgIGFyZ3M6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9hcmdzOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHsqfQorICAgICAqLworICAgIHJlc3Vs
dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKKyAgICB9
Cit9CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlZE9i
amVjdAorICovCitmdW5jdGlvbiBSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQoreworICAgIHRoaXMu
X2lkID0gKytSZXNvdXJjZS5fdW5pcXVlSWQ7CisgICAgdGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0g
bnVsbDsKKyAgICB0aGlzLnNldFdyYXBwZWRPYmplY3Qod3JhcHBlZE9iamVjdCk7Cit9CisKK1Jl
c291cmNlLl91bmlxdWVJZCA9IDA7CisKKy8qKgorICogQHBhcmFtIHtPYmplY3R9IG9iagorICog
QHJldHVybiB7UmVzb3VyY2V9CisgKi8KK1Jlc291cmNlLmZvck9iamVjdCA9IGZ1bmN0aW9uKG9i
aikKK3sKKyAgICBpZiAoIW9iaiB8fCBvYmogaW5zdGFuY2VvZiBSZXNvdXJjZSkKKyAgICAgICAg
cmV0dXJuIG9iajsKKyAgICBpZiAodHlwZW9mIG9iaiA9PT0gIm9iamVjdCIpCisgICAgICAgIHJl
dHVybiBvYmpbIl9fcmVzb3VyY2VPYmplY3QiXTsKKyAgICByZXR1cm4gbnVsbDsKK30KKworUmVz
b3VyY2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAg
ICAgKi8KKyAgICBpZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lk
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovCisg
ICAgd3JhcHBlZE9iamVjdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3dyYXBwZWRPYmplY3Q7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7T2JqZWN0
fSB2YWx1ZQorICAgICAqLworICAgIHNldFdyYXBwZWRPYmplY3Q6IGZ1bmN0aW9uKHZhbHVlKQor
ICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodmFsdWUgJiYgISh2YWx1ZSBpbnN0YW5jZW9m
IFJlc291cmNlKSwgIkJpbmRpbmcgYSBSZXNvdXJjZSBvYmplY3QgdG8gYW5vdGhlciBSZXNvdXJj
ZSBvYmplY3Q/Iik7CisgICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSB2YWx1ZTsKKyAgICAg
ICAgdGhpcy5fYmluZE9iamVjdFRvUmVzb3VyY2UodmFsdWUpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CisgICAgICovCisgICAgcHJveHlPYmplY3Q6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIC8vIE5vIHByb3h5IHdyYXBwaW5nIGJ5IGRlZmF1bHQuCisg
ICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRPYmplY3QoKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHJldHVybiB7UmVzb3VyY2VUcmFja2luZ01hbmFnZXJ9CisgICAgICovCisgICAgbWFu
YWdlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlTWFu
YWdlcjsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZVRyYWNraW5n
TWFuYWdlcn0gdmFsdWUKKyAgICAgKi8KKyAgICBzZXRNYW5hZ2VyOiBmdW5jdGlvbih2YWx1ZSkK
KyAgICB7CisgICAgICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IHZhbHVlOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CisgICAgICovCisgICAgX2Jp
bmRPYmplY3RUb1Jlc291cmNlOiBmdW5jdGlvbihvYmplY3QpCisgICAgeworICAgICAgICBvYmpl
Y3RbIl9fcmVzb3VyY2VPYmplY3QiXSA9IHRoaXM7CisgICAgfQorfQorCisvKioKKyAqIEBjb25z
dHJ1Y3RvcgorICogQGV4dGVuZHMge1Jlc291cmNlfQorICogQHBhcmFtIHtXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsQ29udGV4dAorICovCitmdW5jdGlvbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRS
ZXNvdXJjZShnbENvbnRleHQpCit7CisgICAgUmVzb3VyY2UuY2FsbCh0aGlzLCBnbENvbnRleHQp
OworICAgIHRoaXMuX3Byb3h5T2JqZWN0ID0gbnVsbDsKK30KIAotICAgICAgICB2YXIgcHJveHkg
PSB7fTsKLSAgICAgICAgdmFyIG5hbWVQcm9jZXNzZWQgPSB7fTsKLSAgICAgICAgbmFtZVByb2Nl
c3NlZC5fX3Byb3RvX18gPSBudWxsOwotICAgICAgICBuYW1lUHJvY2Vzc2VkLmNvbnN0cnVjdG9y
ID0gdHJ1ZTsKLQotICAgICAgICBmdW5jdGlvbiBwcm9jZXNzTmFtZShuYW1lKSB7Ci0gICAgICAg
ICAgICBpZiAobmFtZVByb2Nlc3NlZFtuYW1lXSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBuYW1lUHJvY2Vzc2VkW25hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICh0
eXBlb2YgZ2xDb250ZXh0W25hbWVdID09PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgICAgIHBy
b3h5W25hbWVdID0gaW5qZWN0ZWRTY3JpcHQuX3dyYXBwZWRGdW5jdGlvbi5iaW5kKGluamVjdGVk
U2NyaXB0LCBnbENvbnRleHQsIG5hbWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgbmFtZSwgeworV2ViR0xSZW5kZXJpbmdD
b250ZXh0UmVzb3VyY2UucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge09i
amVjdH0KKyAgICAgKi8KKyAgICBwcm94eU9iamVjdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgaWYgKCF0aGlzLl9wcm94eU9iamVjdCkKKyAgICAgICAgICAgIHRoaXMuX3Byb3h5T2JqZWN0
ID0gdGhpcy5fd3JhcE9iamVjdCgpOworICAgICAgICByZXR1cm4gdGhpcy5fcHJveHlPYmplY3Q7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAg
ICBfd3JhcE9iamVjdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGdsQ29udGV4dCA9
IHRoaXMud3JhcHBlZE9iamVjdCgpOworICAgICAgICB2YXIgcHJveHkgPSBPYmplY3QuY3JlYXRl
KGdsQ29udGV4dC5fX3Byb3RvX18pOyAvLyBJbiBvcmRlciB0byBlbXVsYXRlICJpbnN0YW5jZW9m
Ii4KKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NQ
cm9wZXJ0eShwcm9wZXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBnbENv
bnRleHRbcHJvcGVydHldID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IG92ZXJyaWRlIEdMIGNhbGxzIGFmZmVjdGluZyByZXNvdXJjZXMgc3RhdGVzIGhlcmUuCisg
ICAgICAgICAgICAgICAgcHJveHlbcHJvcGVydHldID0gc2VsZi5fd3JhcEZ1bmN0aW9uKHNlbGYs
IGdsQ29udGV4dCwgZ2xDb250ZXh0W3Byb3BlcnR5XSwgcHJvcGVydHkpOworICAgICAgICAgICAg
fSBlbHNlIGlmICgvXltBLVowLTlfXSskLy50ZXN0KHByb3BlcnR5KSkgeworICAgICAgICAgICAg
ICAgIC8vIEZhc3QgYWNjZXNzIHRvIGVudW1zIGFuZCBjb25zdGFudHMuCisgICAgICAgICAgICAg
ICAgcHJveHlbcHJvcGVydHldID0gZ2xDb250ZXh0W3Byb3BlcnR5XTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBwcm9w
ZXJ0eSwgewogICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkKICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsQ29udGV4dFtuYW1l
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbENvbnRleHRbcHJvcGVydHldOwog
ICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9u
KHZhbHVlKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBn
bENvbnRleHRbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsQ29udGV4
dFtwcm9wZXJ0eV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yICh2YXIgbyA9
IGdsQ29udGV4dDsgbzsgbyA9IG8uX19wcm90b19fKQotICAgICAgICAgICAgT2JqZWN0LmdldE93
blByb3BlcnR5TmFtZXMobykuZm9yRWFjaChwcm9jZXNzTmFtZSk7CisgICAgICAgIGZvciAodmFy
IHByb3BlcnR5IGluIGdsQ29udGV4dCkKKyAgICAgICAgICAgIHByb2Nlc3NQcm9wZXJ0eShwcm9w
ZXJ0eSk7CisKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge1Jlc291cmNlfSByZXNvdXJjZQorICAgICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJp
bmdDb250ZXh0fSBvcmlnaW5hbE9iamVjdAorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9yaWdp
bmFsRnVuY3Rpb24KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lCisgICAgICog
QHJldHVybiB7Kn0KKyAgICAgKi8KKyAgICBfd3JhcEZ1bmN0aW9uOiBmdW5jdGlvbihyZXNvdXJj
ZSwgb3JpZ2luYWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rpb24sIGZ1bmN0aW9uTmFtZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBt
YW5hZ2VyID0gcmVzb3VyY2UubWFuYWdlcigpOworICAgICAgICAgICAgaWYgKCFtYW5hZ2VyIHx8
ICFtYW5hZ2VyLmNhcHR1cmluZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEZ1
bmN0aW9uLmFwcGx5KG9yaWdpbmFsT2JqZWN0LCBhcmd1bWVudHMpOworICAgICAgICAgICAgbWFu
YWdlci5jYXB0dXJlQXJndW1lbnRzKHJlc291cmNlLCBhcmd1bWVudHMpOworICAgICAgICAgICAg
dmFyIHJlc3VsdCA9IG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob3JpZ2luYWxPYmplY3QsIGFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICB2YXIgY2FsbCA9IG5ldyBDYWxsKHJlc291cmNlLCBmdW5jdGlv
bk5hbWUsIGFyZ3VtZW50cywgcmVzdWx0KTsKKyAgICAgICAgICAgIG1hbmFnZXIucmVwb3J0Q2Fs
bChjYWxsKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgfQor
fQogCi0gICAgICAgIC8vIEluIG9yZGVyIHRvIGVtdWxhdGUgImluc3RhbmNlb2YiLgotICAgICAg
ICBwcm94eS5fX3Byb3RvX18gPSBnbENvbnRleHQuX19wcm90b19fOwotICAgICAgICBwcm94eS5j
b25zdHJ1Y3RvciA9IGdsQ29udGV4dC5jb25zdHJ1Y3RvcjsKK1dlYkdMUmVuZGVyaW5nQ29udGV4
dFJlc291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBSZXNvdXJjZS5wcm90b3R5cGU7CiAKLSAg
ICAgICAgdmFyIGNvbnRleHRJZCA9IHRoaXMuX2dlbmVyYXRlT2JqZWN0SWQoKTsKLSAgICAgICAg
dGhpcy5faWRUb1dyYXBwZXJQcm94eVtjb250ZXh0SWRdID0gcHJveHk7Ci0gICAgICAgIHRoaXMu
X2lkVG9SZWFsV2ViR0xDb250ZXh0W2NvbnRleHRJZF0gPSBnbENvbnRleHQ7Ci0gICAgICAgIElu
amVjdGVkU2NyaXB0SG9zdC53ZWJHTENvbnRleHRDcmVhdGVkKGNvbnRleHRJZCk7CisvKioKKyAq
IEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IG9yaWdpbmFs
T2JqZWN0CisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcmlnaW5hbEZ1bmN0aW9uCisgKiBAcGFyYW0g
e3N0cmluZ30gZnVuY3Rpb25OYW1lCisgKiBAcGFyYW0ge0FycmF5fSBhcmdzCisgKi8KK1dlYkdM
UmVuZGVyaW5nQ29udGV4dFJlc291cmNlLldyYXBGdW5jdGlvbiA9IGZ1bmN0aW9uKG9yaWdpbmFs
T2JqZWN0LCBvcmlnaW5hbEZ1bmN0aW9uLCBmdW5jdGlvbk5hbWUsIGFyZ3MpCit7CisgICAgdGhp
cy5fb3JpZ2luYWxPYmplY3QgPSBvcmlnaW5hbE9iamVjdDsKKyAgICB0aGlzLl9vcmlnaW5hbEZ1
bmN0aW9uID0gb3JpZ2luYWxGdW5jdGlvbjsKKyAgICB0aGlzLl9mdW5jdGlvbk5hbWUgPSBmdW5j
dGlvbk5hbWU7CisgICAgdGhpcy5fYXJncyA9IGFyZ3M7CisgICAgdGhpcy5fZ2xSZXNvdXJjZSA9
IFJlc291cmNlLmZvck9iamVjdChvcmlnaW5hbE9iamVjdCk7Cit9CiAKLSAgICAgICAgcmV0dXJu
IHByb3h5OworV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuV3JhcEZ1bmN0aW9uLnByb3Rv
dHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHsqfQorICAgICAqLworICAgIHJlc3Vs
dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRlZCkgeworICAg
ICAgICAgICAgdGhpcy5fZXhlY3V0ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5fcmVzdWx0
ID0gdGhpcy5fb3JpZ2luYWxGdW5jdGlvbi5hcHBseSh0aGlzLl9vcmlnaW5hbE9iamVjdCwgdGhp
cy5fYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKICAgICB9
LAogCi0gICAgX2dlbmVyYXRlT2JqZWN0SWQ6IGZ1bmN0aW9uKCkKKyAgICAvKioKKyAgICAgKiBA
cmV0dXJuIHtDYWxsfQorICAgICAqLworICAgIGNhbGw6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIHZhciBpZCA9ICsrdGhpcy5fbGFzdEJvdW5kT2JqZWN0SWQ7Ci0gICAgICAgIHZhciBvYmpl
Y3RJZCA9ICJ7XCJpbmplY3RlZFNjcmlwdElkXCI6IiArIGluamVjdGVkU2NyaXB0SWQgKyAiLFwi
d2ViR0xJZFwiOiIgKyBpZCArICJ9IjsKLSAgICAgICAgcmV0dXJuIG9iamVjdElkOworICAgICAg
ICBpZiAoIXRoaXMuX2NhbGwpCisgICAgICAgICAgICB0aGlzLl9jYWxsID0gbmV3IENhbGwodGhp
cy5fZ2xSZXNvdXJjZSwgdGhpcy5fZnVuY3Rpb25OYW1lLCB0aGlzLl9hcmdzLCB0aGlzLnJlc3Vs
dCgpKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGw7CisgICAgfQorfQorCisvKioKKyAqIEBj
b25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBUcmFjZUxvZygpCit7CisgICAgdGhpcy5fY2FsbHMg
PSBbXTsKKyAgICB0aGlzLl9yZXNvdXJjZUNhY2hlID0gbmV3IENhY2hlKCk7Cit9CisKK1RyYWNl
TG9nLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAg
ICovCisgICAgc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Nh
bGxzLmxlbmd0aDsKICAgICB9LAogCi0gICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbihjb250ZXh0
SWQpCisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZXNvdXJjZX0gcmVzb3VyY2UKKyAgICAgKi8K
KyAgICBjYXB0dXJlUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIHsKLSAgICAgICAg
dGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvID0gewotICAgICAgICAgICAgY29udGV4dElkOiBjb250
ZXh0SWQsCi0gICAgICAgICAgICBjYXB0dXJlZENhbGxzTnVtOiAwCi0gICAgICAgIH07CisgICAg
ICAgIC8vIEZJWE1FOiBDYXB0dXJlIGN1cnJlbnQgcmVzb3VyY2Ugc3RhdGUgdG8gc3RhcnQgdGhl
IHJlcGxheSBmcm9tLgogICAgIH0sCiAKLSAgICBfc3RvcENhcHR1cmluZzogZnVuY3Rpb24oaW5m
bykKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KKyAgICBhZGRD
YWxsOiBmdW5jdGlvbihjYWxsKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NhcHR1cmluZ0Zy
YW1lSW5mbyA9PT0gaW5mbykKLSAgICAgICAgICAgIHRoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mbyA9
IG51bGw7CisgICAgICAgIC8vIEZJWE1FOiBDbG9uZSBjYWxsIGFuZCBwdXNoIHRoZSBjbG9uZS4K
KyAgICAgICAgdGhpcy5fY2FsbHMucHVzaChjYWxsKTsKKyAgICB9Cit9CisKKy8qKgorICogQGNv
bnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCkKK3sKKyAg
ICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFt
ZUVuZCA9IGZhbHNlOworICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG51bGw7Cit9CisKK1Jlc291
cmNlVHJhY2tpbmdNYW5hZ2VyLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJu
IHtib29sZWFufQorICAgICAqLworICAgIGNhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmluZzsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHJldHVybiB7VHJhY2VMb2d9CisgICAgICovCisgICAgbGFzdFRyYWNlTG9nOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFRyYWNlTG9nOwogICAgIH0sCiAKLSAg
ICBfd3JhcHBlZEZ1bmN0aW9uOiBmdW5jdGlvbihnbENvbnRleHQsIGZ1bmN0aW9uTmFtZSkKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge1Jlc291cmNlfSByZXNvdXJjZQorICAgICAqLworICAgIHJl
Z2lzdGVyUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIHsKLSAgICAgICAgLy8gQ2Fs
bCByZWFsIFdlYkdMIGZ1bmN0aW9uLgotICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlw
ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAgICAgIHZhciByZXN1bHQgPSBnbENvbnRl
eHRbZnVuY3Rpb25OYW1lXS5hcHBseShnbENvbnRleHQsIGFyZ3MpOworICAgICAgICByZXNvdXJj
ZS5zZXRNYW5hZ2VyKHRoaXMpOworICAgIH0sCisKKyAgICBzdGFydENhcHR1cmluZzogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYXB0dXJpbmcpCisgICAgICAgICAgICB0
aGlzLl9sYXN0VHJhY2VMb2cgPSBuZXcgVHJhY2VMb2coKTsKKyAgICAgICAgdGhpcy5fY2FwdHVy
aW5nID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSBmYWxz
ZTsKKyAgICB9LAogCi0gICAgICAgIGlmICh0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8gJiYgdGhp
cy5faWRUb1JlYWxXZWJHTENvbnRleHRbdGhpcy5fY2FwdHVyaW5nRnJhbWVJbmZvLmNvbnRleHRJ
ZF0gPT09IGdsQ29udGV4dCkgewotICAgICAgICAgICAgdmFyIGNhcHR1cmVkQ2FsbHNOdW0gPSAr
K3RoaXMuX2NhcHR1cmluZ0ZyYW1lSW5mby5jYXB0dXJlZENhbGxzTnVtOwotICAgICAgICAgICAg
aWYgKGNhcHR1cmVkQ2FsbHNOdW0gPT09IDEpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0WmVy
b1RpbWVvdXRzKHRoaXMuX3N0b3BDYXB0dXJpbmcuYmluZCh0aGlzLCB0aGlzLl9jYXB0dXJpbmdG
cmFtZUluZm8pKTsKLSAgICAgICAgICAgIEluamVjdGVkU2NyaXB0SG9zdC53ZWJHTFJlcG9ydEZ1
bmN0aW9uQ2FsbCh0aGlzLl9jYXB0dXJpbmdGcmFtZUluZm8uY29udGV4dElkLCBmdW5jdGlvbk5h
bWUsICJbIiArIGFyZ3Muam9pbigiLCAiKSArICJdIiwgcmVzdWx0ICsgIiIpOworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7VHJhY2VMb2c9fSB0cmFjZUxvZworICAgICAqLworICAgIHN0b3BDYXB0
dXJpbmc6IGZ1bmN0aW9uKHRyYWNlTG9nKQorICAgIHsKKyAgICAgICAgaWYgKHRyYWNlTG9nICYm
IHRoaXMuX2xhc3RUcmFjZUxvZyAhPT0gdHJhY2VMb2cpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHRoaXMuX2NhcHR1cmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLl9zdG9wQ2FwdHVy
aW5nT25GcmFtZUVuZCA9IGZhbHNlOworICAgIH0sCisKKyAgICBjYXB0dXJlRnJhbWU6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG5ldyBUcmFjZUxvZygp
OworICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICB0aGlzLl9zdG9wQ2Fw
dHVyaW5nT25GcmFtZUVuZCA9IHRydWU7CisgICAgfSwKKworICAgIGNhcHR1cmVBcmd1bWVudHM6
IGZ1bmN0aW9uKHJlc291cmNlLCBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9jYXB0
dXJpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2xhc3RUcmFjZUxvZy5j
YXB0dXJlUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGFy
Z3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICB2YXIgcmVzID0gUmVzb3VyY2Uu
Zm9yT2JqZWN0KGFyZ3NbaV0pOworICAgICAgICAgICAgaWYgKHJlcykKKyAgICAgICAgICAgICAg
ICB0aGlzLl9sYXN0VHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJlcyk7CiAgICAgICAgIH0KKyAg
ICB9LAogCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgLyoqCisgICAgICogQHBhcmFtIHtD
YWxsfSBjYWxsCisgICAgICovCisgICAgcmVwb3J0Q2FsbDogZnVuY3Rpb24oY2FsbCkKKyAgICB7
CisgICAgICAgIGlmICghdGhpcy5fY2FwdHVyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB0aGlzLl9sYXN0VHJhY2VMb2cuYWRkQ2FsbChjYWxsKTsKKyAgICAgICAgaWYgKHRoaXMu
X3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kICYmIHRoaXMuX2xhc3RUcmFjZUxvZy5zaXplKCkgPT09
IDEpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdPbkZyYW1lRW5kID0gZmFsc2U7
CisgICAgICAgICAgICB0aGlzLl9zZXRaZXJvVGltZW91dHModGhpcy5zdG9wQ2FwdHVyaW5nLmJp
bmQodGhpcywgdGhpcy5fbGFzdFRyYWNlTG9nKSk7CisgICAgICAgIH0KICAgICB9LAogCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKKyAgICAgKi8KICAgICBfc2V0
WmVyb1RpbWVvdXRzOiBmdW5jdGlvbihjYWxsYmFjaykKICAgICB7CiAgICAgICAgIC8vIFdlIG5l
ZWQgYSBmYXN0ZXN0IGFzeW5jIGNhbGxiYWNrLCB3aGF0ZXZlciBmaXJlcyBmaXJzdC4KQEAgLTEz
Nyw3ICs0ODMsMzQgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICBjaGFu
bmVsLnBvcnQyLnBvc3RNZXNzYWdlKCIiKTsKICAgICAgICAgaW5zcGVjdGVkV2luZG93LnNldFRp
bWVvdXQoY2FsbGJhY2ssIDApOwogICAgIH0KLX07Cit9CisKKy8qKgorICogQGNvbnN0cnVjdG9y
CisgKi8KK3ZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLl9tYW5h
Z2VyID0gbmV3IFJlc291cmNlVHJhY2tpbmdNYW5hZ2VyKCk7Cit9CisKK0luamVjdGVkU2NyaXB0
LnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2xDb250ZXh0CisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLworICAgIHdy
YXBXZWJHTENvbnRleHQ6IGZ1bmN0aW9uKGdsQ29udGV4dCkKKyAgICB7CisgICAgICAgIHZhciBy
ZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChnbENvbnRleHQpIHx8IG5ldyBXZWJHTFJlbmRl
cmluZ0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQpOworICAgICAgICB0aGlzLl9tYW5hZ2VyLnJl
Z2lzdGVyUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICB2YXIgcHJveHkgPSByZXNvdXJjZS5w
cm94eU9iamVjdCgpOworICAgICAgICByZXR1cm4gcHJveHk7CisgICAgfSwKKworICAgIGNhcHR1
cmVGcmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFuYWdlci5jYXB0dXJl
RnJhbWUoKTsKKyAgICB9Cit9CiAKIHZhciBpbmplY3RlZFNjcmlwdCA9IG5ldyBJbmplY3RlZFNj
cmlwdCgpOwogcmV0dXJuIGluamVjdGVkU2NyaXB0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CmluZGV4IGNiMWRjOTIyZTIzODA5ODMzYjA5MTk5ZTQ4
ZjEzMjRiN2E1YWU3NDYuLmQ5NTZlM2RiZmVlZDYwM2ZlNTRkNzZhODc4NTY4MTIzNDBkZmNhMjgg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5w
eQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKQEAg
LTM3NywzICszNzcsMTQgQEAgY29tbWFuZCArPSAiICAgICAgICAtLWpzICIgKyBpbnNwZWN0b3Jf
cGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdFNvdXJjZVRtcC5qcyIKIGNvbW1hbmQgKz0gIlxu
Igogb3Muc3lzdGVtKGNvbW1hbmQpCiBvcy5zeXN0ZW0oInJtICIgKyBpbnNwZWN0b3JfcGF0aCAr
ICIvIiArICJJbmplY3RlZFNjcmlwdFNvdXJjZVRtcC5qcyIpCisKK3ByaW50ICJDb21waWxpbmcg
SW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcy4uLiIKK29zLnN5c3RlbSgiZWNobyBc
InZhciBpbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlVmFsdWUgPSBcIiA+ICIgKyBpbnNwZWN0b3Jf
cGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlVG1wLmpzIikKK29z
LnN5c3RlbSgiY2F0ICAiICsgaW5zcGVjdG9yX3BhdGggKyAiLyIgKyAiSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcyIgKyAiID4+ICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJ
bmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlVG1wLmpzIikKK2NvbW1hbmQgPSBjb21waWxl
cl9jb21tYW5kCitjb21tYW5kICs9ICIgICAgLS1leHRlcm5zICIgKyBpbnNwZWN0b3JfcGF0aCAr
ICIvIiArICJJbmplY3RlZFNjcmlwdEV4dGVybnMuanMiICsgIiBcXFxuIgorY29tbWFuZCArPSAi
ICAgIC0tbW9kdWxlICIgKyBqc21vZHVsZV9uYW1lX3ByZWZpeCArICJpbmplY3RlZF9zY3JpcHQi
ICsgIjoiICsgIjEiICsgIiBcXFxuIgorY29tbWFuZCArPSAiICAgICAgICAtLWpzICIgKyBpbnNw
ZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9kdWxlU291cmNlVG1wLmpz
IiArICIgXFxcbiIKK2NvbW1hbmQgKz0gIlxuIgorb3Muc3lzdGVtKGNvbW1hbmQpCitvcy5zeXN0
ZW0oInJtICIgKyBpbnNwZWN0b3JfcGF0aCArICIvIiArICJJbmplY3RlZFNjcmlwdFdlYkdMTW9k
dWxlU291cmNlVG1wLmpzIikK
</data>

          </attachment>
      

    </bug>

</bugzilla>