<?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>63940</bug_id>
          
          <creation_ts>2011-07-05 07:10:34 -0700</creation_ts>
          <short_desc>Web Inspector: draft implementation of compiler source mappings support in debugger.</short_desc>
          <delta_ts>2014-02-07 11:52:48 -0800</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="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>aroben</cc>
    
    <cc>bburg</cc>
    
    <cc>bweinstein</cc>
    
    <cc>cromwellian</cc>
    
    <cc>erights</cc>
    
    <cc>guybedford</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>joepeck</cc>
    
    <cc>john.david.dalton</cc>
    
    <cc>johnjbarton</cc>
    
    <cc>keishi</cc>
    
    <cc>kid</cc>
    
    <cc>loislo</cc>
    
    <cc>malte</cc>
    
    <cc>mathias</cc>
    
    <cc>nfitzgerald</cc>
    
    <cc>paulirish</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>tom</cc>
    
    <cc>webmaster</cc>
    
    <cc>wycats</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>432265</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-07-05 07:10:34 -0700</bug_when>
    <thetext>Web Inspector: draft implementation of compiler source mappings support in debugger.

When compiled script has source mapping associated with it, all debugger events in that script are converted to source code coordinates according to mapping. Also, it is possible to set breakpoint on source code rather then in compiled script - breakpoint location would be automatically converted to compiled script coordinates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432266</commentid>
    <comment_count>1</comment_count>
      <attachid>99713</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-07-05 07:11:09 -0700</bug_when>
    <thetext>Created attachment 99713
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432729</commentid>
    <comment_count>2</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2011-07-06 05:34:57 -0700</bug_when>
    <thetext>Is there any description of how the source mappings is intended to work?  There&apos;s been interest in being able to debug CoffeeScript source, and it seems like the work going on in this area can be used to make that happen.  

Or is there some other use case for source mappings, besides dealing with unobfuscating min-ized scripts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432755</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-07-06 06:50:33 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Is there any description of how the source mappings is intended to work?  

Here it is:
1. User provides a source mapping url associated with a script.
  1a. If script has //@sourceMap=&lt;sourceMapURL&gt; comment, there will be an info bar asking for permission to enable the mapping.
  2a. It should be possible to explicitly specify source mapping url for a any script no matter it has &quot;//@sourceMap&quot; or not.
  3a. It should be possible to specify a root url for all source mappings.

2. Inspector downloads source mapping using JSONP (http://en.wikipedia.org/wiki/JSONP). We want to be able to download the mapping from arbitrary location (local disk, app domain, any other domain), and JSONP is the only way to do it right from front-end page.

3. Inspector adds an entry to scripts panel&apos;s file select for each source files listed in source mapping.

4. Source file content is downloaded only when it is actually needed (user selects corresponding entry in files select or debugger is paused on some line in that file). Source files are downloaded using JSONP as well.

Source code may be an unobfuscated javascript of any other language (Java, CoffeeScript, etc) as long as compiler generates source maps that we understand. It shouldn&apos;t be hard to support as many formats as needed.

Similar effort from Mozilla - https://wiki.mozilla.org/DevTools/Features/SourceMap.
Existing FireBug extension that uses source maps generated by closure compiler - http://code.google.com/closure/compiler/docs/inspector.html.


&gt;There&apos;s been interest in being able to debug CoffeeScript source, and it seems like the work going on in this area can be used to make that happen.  
&gt; 

Great!

&gt; Or is there some other use case for source mappings, besides dealing with unobfuscating min-ized scripts?

It is the only case I&apos;m aware of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432778</commentid>
    <comment_count>4</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2011-07-06 08:02:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Or is there some other use case for source mappings, besides dealing with unobfuscating min-ized scripts?

I just want to put out the suggestion to think about source mappings very broadly. Ultimately I think we want the entire development API to work through source mappings. Each part of the browser maintains a crude source map in the form of file/line number tables. Often these maps are lame and ad-hoc, making the tools that have to use them lame. Now imagine all parts of the browser having a uniformly strong, multiple-layer source map capability. Then we can deal with -mapping compressed-CoffeeScript -&gt; CoffeeScript -&gt; EcmaScript 7 -&gt; EcmaScript 3 -&gt; JIT intermediate representation -&gt; etc.  More important in the big picture, we can use source maps to explain runtime results. For example, a source map can be used to show developers that &quot;class=&apos;foo&apos;&quot; was added to div#bar by the JavaScript code on line 445 in baz.js.  For scalability, these maps may be generated on demand, but if the infrastructure all shifts from file/line to source maps we are in a great position to leverage the infrastructure in future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432779</commentid>
    <comment_count>5</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2011-07-06 08:03:51 -0700</bug_when>
    <thetext>Any info on the API afforded by these proposed source maps? Sample files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433306</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-07-07 00:04:45 -0700</bug_when>
    <thetext>Yeah, a high level design description of how this fits into the overall picture of source code processing would be great. We have a Web Inspector wiki for things like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433432</commentid>
    <comment_count>7</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2011-07-07 07:47:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Yeah, a high level design description of how this fits into the overall picture of source code processing would be great. We have a Web Inspector wiki for things like that.

I assume you mean:
   http://trac.webkit.org/wiki/WebInspector
Is there a better place to discuss (rather than document) this work?

Also related discussions:
&quot;I would appreciate some feedback on the Source Map developer tool (planning stage)&quot;
http://groups.google.com/group/mozilla.dev.platform/browse_thread/thread/d870fa0d2a625f7d#</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433472</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-07-07 08:39:19 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Yeah, a high level design description of how this fits into the overall picture of source code processing would be great. We have a Web Inspector wiki for things like that.
&gt; 
&gt; I assume you mean:
&gt;    http://trac.webkit.org/wiki/WebInspector
&gt; Is there a better place to discuss (rather than document) this work?

Created a document with a draft description of source maps https://docs.google.com/document/d/14AWiLDDxEuLaWuyG0X6deLRufrvxRu8HBP0LNJwvRZw/edit?hl=en_US&amp;pli=1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433517</commentid>
    <comment_count>9</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2011-07-07 09:40:13 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created a document with a draft description of source maps https://docs.google.com/document/d/14AWiLDDxEuLaWuyG0X6deLRufrvxRu8HBP0LNJwvRZw/edit?hl=en_US&amp;pli=1.

As my jazz guitar teacher used to say, &quot;good enough for rock and roll&quot;.  Meaning, looks good enough for me, for now.  I&apos;m sure we&apos;ll want to tweak some of this stuff once it&apos;s actually kinda working, but we won&apos;t know what to tweak until we have something kinda working.  :-)

The only thing that stands out to me is 1a)

&quot;1a. If script has //@sourceMap=&lt;sourceMapURL&gt; comment, there will be an info bar asking for permission to enable the mapping.&quot;

That seems like it&apos;s going to be a pain in the ass.  We already have the de-obfuscate/obfuscate (tiny) button; just use that instead of the infobar permission.  Or if you MUST have an infobar, only ask the first time &quot;do you want to enable source mappings&quot; with an option to turn it off, globally, in the new settings panel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437104</commentid>
    <comment_count>10</comment_count>
    <who name="Nick Fitzgerald :fitzgen">nfitzgerald</who>
    <bug_when>2011-07-14 08:43:28 -0700</bug_when>
    <thetext>Hello Pavel,

I want to invite you to join with Mozilla and the Google Closure Compiler team and help us make a standard source map format: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1

I think it would be best if we all agreed upon one format and standardized it.

Great to see that other people are also working on this problem!

Nick (Lead Developer on Mozilla&apos;s Source Map feature)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448426</commentid>
    <comment_count>11</comment_count>
    <who name="Yehuda Katz">wycats</who>
    <bug_when>2011-08-08 21:35:54 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Is there any description of how the source mappings is intended to work?  
&gt; 
&gt; Here it is:
&gt; 1. User provides a source mapping url associated with a script.
&gt;   1a. If script has //@sourceMap=&lt;sourceMapURL&gt; comment, there will be an info bar asking for permission to enable the mapping.
&gt;   2a. It should be possible to explicitly specify source mapping url for a any script no matter it has &quot;//@sourceMap&quot; or not.
&gt;   3a. It should be possible to specify a root url for all source mappings.
&gt; 
&gt; 2. Inspector downloads source mapping using JSONP (http://en.wikipedia.org/wiki/JSONP). We want to be able to download the mapping from arbitrary location (local disk, app domain, any other domain), and JSONP is the only way to do it right from front-end page.
&gt; 
&gt; 3. Inspector adds an entry to scripts panel&apos;s file select for each source files listed in source mapping.
&gt; 
&gt; 4. Source file content is downloaded only when it is actually needed (user selects corresponding entry in files select or debugger is paused on some line in that file). Source files are downloaded using JSONP as well.
&gt; 
&gt; Source code may be an unobfuscated javascript of any other language (Java, CoffeeScript, etc) as long as compiler generates source maps that we understand. It shouldn&apos;t be hard to support as many formats as needed.
&gt; 
&gt; Similar effort from Mozilla - https://wiki.mozilla.org/DevTools/Features/SourceMap.
&gt; Existing FireBug extension that uses source maps generated by closure compiler - http://code.google.com/closure/compiler/docs/inspector.html.
&gt; 
&gt; 
&gt; &gt;There&apos;s been interest in being able to debug CoffeeScript source, and it seems like the work going on in this area can be used to make that happen.  
&gt; &gt; 
&gt; 
&gt; Great!
&gt; 
&gt; &gt; Or is there some other use case for source mappings, besides dealing with unobfuscating min-ized scripts?
&gt; 
&gt; It is the only case I&apos;m aware of.

Another case is compiled templates. I compile Handlebars templates to JavaScript, but Handlebars itself is a quasi-scripting language. It would be great if I could annotate the compiled JavaScript with a map back to the template source. It would be decently easy, since I use Jison to parse my source, which would make it trivial for me to annotate my AST with line/column numbers, which I could then use during compilation to generate the source map (as a secondary build artifact).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484751</commentid>
    <comment_count>12</comment_count>
    <who name="Ray Cromwell">cromwellian</who>
    <bug_when>2011-10-16 01:43:52 -0700</bug_when>
    <thetext>I&apos;ve added SourceMap support to GWT (Java -&gt; JS), but one interesting question I&apos;ve got is whether we can support CSS source-mapping. GWT contains a Css Parser/Css Optimizer/Css Minifier. We might want to consider a way to specify that &lt;style&gt; elements or class=&quot;&quot; attributes link to a separate sourcemap. This would help in particular for obfuscated class attribute names which some CSS tools produce.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811644</commentid>
    <comment_count>13</comment_count>
    <who name="Guy Bedford">guybedford</who>
    <bug_when>2013-01-20 11:43:45 -0800</bug_when>
    <thetext>I&apos;m interested in seeing how source maps can work for both &lt;style&gt; elements and evalled script. This is in order to bring support to the RequireJS CoffeeScript parser and LESS parser. One way I&apos;ve been experimenting with this is through data-uris in the @ sourceMapperURL property.

When testing this with eval code, it seems that this method is working correctly. The only issue I have is that the @ sourceURL property is loading the js file not the coffeescript file in my case, even though the debug line points correspond to the coffeescript file. If this could be fixed so that when a @ sourceURL and @ sourceMapperURL are both present in evalled code, the @ sourceURL code is displayed in full, that would be great.

Example repo here - https://github.com/guybedford/cs-source-maps  (test-eval.html is the sample page)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99713</attachid>
            <date>2011-07-05 07:11:09 -0700</date>
            <delta_ts>2011-08-04 05:01:02 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21479</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MmU4ZWJlLi4zZmE2NGY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDct
MDUgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogZHJhZnQgaW1wbGVtZW50YXRpb24gb2YgY29tcGlsZXIgc291cmNlIG1h
cHBpbmdzIHN1cHBvcnQgaW4gZGVidWdnZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02Mzk0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2NvbXBpbGVyLXNvdXJjZS1t
YXBwaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2Vy
L2NvbXBpbGVyLXNvdXJjZS1tYXBwaW5nLmh0bWw6IEFkZGVkLgorCiAyMDExLTA3LTA1ICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
UmVtb3ZlZCBjdXN0b20gY2hyb21pdW0tbGludXggYmFzZWxpbmVzIGZvcgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2NvbXBpbGVyLXNvdXJjZS1tYXBwaW5nLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9jb21waWxlci1zb3Vy
Y2UtbWFwcGluZy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uM2JjNzQ5MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1
Z2dlci9jb21waWxlci1zb3VyY2UtbWFwcGluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBA
QAorVGVzdHMgZGVidWdnZXIgcHJlc2VudGF0aW9uIG1vZGVsIHdpdGggY29tcGlsZXIgc291cmNl
IG1hcHBpbmdzLgorCisKK1J1bm5pbmc6IHRlc3RTb3VyY2VNYXBwaW5nCitTZXR0aW5nIGJyZWFr
cG9pbnQ6IGZvby5qczo1CitkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoc291cmNlVVJMLCAy
LCA0MCkKK0JyZWFrcG9pbnQgYWRkZWQ6IGZvby5qczo1CitTZXR0aW5nIGJyZWFrcG9pbnQ6IGJh
ci5qczoxMAorZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KHNvdXJjZVVSTCwgMTUsIDApCitC
cmVha3BvaW50IGFkZGVkOiBiYXIuanM6MTAKK1BhdXNlZDogZm9vLmpzOjEwCitQYXVzZWQ6IGJh
ci5qczozMQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvY29t
cGlsZXItc291cmNlLW1hcHBpbmcuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9jb21waWxlci1zb3VyY2UtbWFwcGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjFmMTUyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZGVidWdnZXIvY29tcGlsZXItc291cmNlLW1hcHBpbmcuaHRtbApAQCAtMCwwICsxLDExMSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rv
ci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHRl
c3QoKQoreworICAgIEluc3BlY3RvclRlc3QucnVuVGVzdFN1aXRlKFsKKyAgICAgICAgZnVuY3Rp
b24gdGVzdFNvdXJjZU1hcHBpbmcobmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ3Jl
YXRlIG1vY2sgZGVidWdnZXIgbW9kZWwuCisgICAgICAgICAgICB2YXIgZGVidWdnZXJNb2RlbCA9
IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0KCk7CisgICAgICAgICAgICBkZWJ1Z2dlck1vZGVsLnNl
dEJyZWFrcG9pbnQgPSBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29u
ZGl0aW9uLCBjYWxsYmFjaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdChbImRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludCgiICsgdXJsLCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIgKyAiKSJdLmpvaW4oIiwgIikpOworICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKCJicmVha3BvaW50SWQiLCBbXSk7CisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgdmFyIHNjcmlwdCA9IG5ldyBXZWJJbnNwZWN0b3IuU2NyaXB0KCJzb3VyY2VJZCIsICJz
b3VyY2VVUkwiLCAwLCAwLCAyMCwgODAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSk7Cisg
ICAgICAgICAgICBkZWJ1Z2dlck1vZGVsLnNjcmlwdEZvclNvdXJjZUlEID0gZnVuY3Rpb24oKSB7
IHJldHVybiBzY3JpcHQ7IH07CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsIHNob3VsZCByZWNpZXZlIGRlYnVnZ2VyIG1vZGVsIGFzIGNvbnN0cnVjdG9y
IHBhcmFtZXRlci4KKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsID0gZGVi
dWdnZXJNb2RlbDsKKworICAgICAgICAgICAgdmFyIHByZXNlbnRhdGlvbk1vZGVsID0gbmV3IFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsKCk7CisgICAgICAgICAgICBwcmVz
ZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnRBZGRlZC5iaW5k
KG51bGwpKTsKKyAgICAgICAgICAgIHByZXNlbnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1
c2VkLCBkZWJ1Z2dlclBhdXNlZC5iaW5kKG51bGwpKTsKKworICAgICAgICAgICAgLy8gQWRkIHNj
cmlwdCBhbmQgY29ycmVzcG9uZGluZyBzb3VyY2UgbWFwcGluZy4KKyAgICAgICAgICAgIGRlYnVn
Z2VyTW9kZWwuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1v
ZGVsLkV2ZW50cy5QYXJzZWRTY3JpcHRTb3VyY2UsIHNjcmlwdCk7CisgICAgICAgICAgICBwcmVz
ZW50YXRpb25Nb2RlbC5pbnN0YWxsQ29tcGlsZXJTb3VyY2VNYXBwaW5nKCJzb3VyY2VJZCIsIGNy
ZWF0ZVNvdXJjZU1hcHBpbmcoKSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgYnJlYWtw
b2ludCB3b3VsZCBiZSBzZXQgaW4gY29ycmVjdCBsb2NhdGlvbiBpbiBjb21waWxlZCBzY3JpcHQg
YWNjb3JkaW5nIHRvIHNvdXJjZSBtYXBwaW5nLgorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5h
ZGRSZXN1bHQoIlNldHRpbmcgYnJlYWtwb2ludDogZm9vLmpzOjUiKTsKKyAgICAgICAgICAgIHBy
ZXNlbnRhdGlvbk1vZGVsLnNldEJyZWFrcG9pbnQoImZvby5qcyIsIDUsICIiLCB0cnVlKTsKKwor
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBicmVha3BvaW50IHdvdWxkIGJlIHNldCBpbiBjb3Jy
ZWN0IGxvY2F0aW9uIGluIGNvbXBpbGVkIHNjcmlwdCBhY2NvcmRpbmcgdG8gc291cmNlIG1hcHBp
bmcuCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2V0dGluZyBicmVha3Bv
aW50OiBiYXIuanM6MTAiKTsKKyAgICAgICAgICAgIHByZXNlbnRhdGlvbk1vZGVsLnNldEJyZWFr
cG9pbnQoImJhci5qcyIsIDEwLCAiIiwgdHJ1ZSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgVUkgbG9jYXRpb24gd291bGQgYmUgY2FsY3VsYXRlZCBjb3JyZWN0bHkgb24gZGVidWdnZXIg
cGF1c2VkIGV2ZW50LgorICAgICAgICAgICAgZGVidWdnZXJNb2RlbC5jYWxsRnJhbWVzID0gW3sg
bG9jYXRpb246IHsgc291cmNlSWQ6ICJzb3VyY2VJZCIsIGxpbmVOdW1iZXI6IDUsIGNvbHVtbk51
bWJlcjogMjAgfSB9XTsKKyAgICAgICAgICAgIGRlYnVnZ2VyTW9kZWwuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclBhdXNl
ZCk7CisgICAgICAgICAgICBkZWJ1Z2dlck1vZGVsLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRGVidWdnZXJSZXN1bWVkKTsKKworICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCBVSSBsb2NhdGlvbiB3b3VsZCBiZSBjYWxjdWxhdGVkIGNv
cnJlY3RseSBvbiBkZWJ1Z2dlciBwYXVzZWQgZXZlbnQuCisgICAgICAgICAgICBkZWJ1Z2dlck1v
ZGVsLmNhbGxGcmFtZXMgPSBbeyBsb2NhdGlvbjogeyBzb3VyY2VJZDogInNvdXJjZUlkIiwgbGlu
ZU51bWJlcjogMjUsIGNvbHVtbk51bWJlcjogNjAgfSB9XTsKKyAgICAgICAgICAgIGRlYnVnZ2Vy
TW9kZWwuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkV2ZW50cy5EZWJ1Z2dlclBhdXNlZCk7CisgICAgICAgICAgICBkZWJ1Z2dlck1vZGVsLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRGVi
dWdnZXJSZXN1bWVkKTsKKworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICB9CisgICAgXSk7
CisKKyAgICBmdW5jdGlvbiBicmVha3BvaW50QWRkZWQoZXZlbnQpCisgICAgeworICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiQnJlYWtwb2ludCBhZGRlZDogIiArIGV2ZW50LmRhdGEu
c291cmNlRmlsZUlkICsgIjoiICsgZXZlbnQuZGF0YS5saW5lTnVtYmVyKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBkZWJ1Z2dlclBhdXNlZChldmVudCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9u
IGRpZEdldFNvdXJjZUxpbmUoc291cmNlRmlsZUlkLCBsaW5lTnVtYmVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiUGF1c2VkOiAiICsgc291cmNlRmls
ZUlkICsgIjoiICsgbGluZU51bWJlcik7CisgICAgICAgIH0KKyAgICAgICAgZXZlbnQuZGF0YS5j
YWxsRnJhbWVzWzBdLnNvdXJjZUxpbmUoZGlkR2V0U291cmNlTGluZS5iaW5kKG51bGwpKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBjcmVhdGVTb3VyY2VNYXBwaW5nKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICBzb3VyY2VzOiBmdW5jdGlvbigpIHsgcmV0dXJuIFsiZm9v
LmpzIiwgImJhci5qcyJdOyB9LAorICAgICAgICAgICAgY29tcGlsZWRMb2NhdGlvblRvU291cmNl
TG9jYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSB7fTsKKyAgICAgICAgICAgICAgICBp
ZiAobGluZU51bWJlciA8IDEwKQorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5zb3VyY2VV
UkwgPSB0aGlzLnNvdXJjZXMoKVswXTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgbG9jYXRpb24uc291cmNlVVJMID0gdGhpcy5zb3VyY2VzKClbMV07CisgICAg
ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgLT0gMTA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGxvY2F0aW9uLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyICogMjsKKyAgICAg
ICAgICAgICAgICBpZiAoY29sdW1uTnVtYmVyID49IDQwKSB7CisgICAgICAgICAgICAgICAgICAg
IGxvY2F0aW9uLmxpbmVOdW1iZXIgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVt
YmVyIC09IDQwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5j
b2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXIgKiAyOworICAgICAgICAgICAgICAgIHJldHVybiBs
b2NhdGlvbjsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzb3VyY2VMb2NhdGlvblRvQ29t
cGlsZWRMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVVSTCA9PT0gImJh
ci5qcyIpCisgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMjA7CisgICAgICAgICAg
ICAgICAgdmFyIGxvY2F0aW9uID0ge307CisgICAgICAgICAgICAgICAgbG9jYXRpb24ubGluZU51
bWJlciA9IE1hdGguZmxvb3IobGluZU51bWJlciAvIDIpOworICAgICAgICAgICAgICAgIGxvY2F0
aW9uLmNvbHVtbk51bWJlciA9IE1hdGguZmxvb3IoY29sdW1uTnVtYmVyIC8gMikgKyA0MCAqIChs
aW5lTnVtYmVyICUgMik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKwor
PGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+VGVzdHMgZGVidWdnZXIgcHJlc2VudGF0aW9u
IG1vZGVsIHdpdGggY29tcGlsZXIgc291cmNlIG1hcHBpbmdzLjwvcD4KKworPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDNhYmYwZDMuLjZkZjY0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzNSBAQAorMjAxMS0wNy0wNSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBkcmFmdCBpbXBsZW1lbnRhdGlvbiBvZiBj
b21waWxlciBzb3VyY2UgbWFwcGluZ3Mgc3VwcG9ydCBpbiBkZWJ1Z2dlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTQwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogaW5zcGVjdG9yL2RlYnVn
Z2VyL2NvbXBpbGVyLXNvdXJjZS1tYXBwaW5nLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU291cmNlTWFwcGluZy5qczogQWRkZWQuCisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQ29tcGlsZXJTb3VyY2VNYXBwaW5nKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Db21waWxlclNvdXJjZU1hcHBpbmcucHJvdG90eXBlLnNvdXJjZXMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNvbXBpbGVyU291cmNlTWFwcGluZy5wcm90b3R5cGUuY29tcGlsZWRM
b2NhdGlvblRvU291cmNlTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbXBpbGVy
U291cmNlTWFwcGluZy5wcm90b3R5cGUuc291cmNlTG9jYXRpb25Ub0NvbXBpbGVkTG9jYXRpb24p
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZS5zY3JpcHRGb3JVUkxBbmRM
b2NhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclByZXNlbnRh
dGlvbk1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9u
TW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwu
cHJvdG90eXBlLl9zY3JpcHRMb2NhdGlvblRvVUlMb2NhdGlvbi5zb3VyY2VMb2NhdGlvbi50aGlz
Ll9jb21waWxlZExvY2F0aW9uVG9Tb3VyY2VMb2NhdGlvbi5kaWRSZXF1ZXN0U291cmNlTWFwcGlu
Zyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90
b3R5cGUuX3NjcmlwdExvY2F0aW9uVG9VSUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5fdWlMb2NhdGlvblRvU2NyaXB0
TG9jYXRpb24uZGlkUmVxdWVzdFNvdXJjZU1hcHBpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwucHJvdG90eXBlLl91aUxvY2F0aW9uVG9TY3JpcHRM
b2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2Rl
bC5wcm90b3R5cGUuX2NvbXBpbGVkTG9jYXRpb25Ub1NvdXJjZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5fc291cmNl
TG9jYXRpb25Ub0NvbXBpbGVkTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyUHJlc2VudGF0aW9uTW9kZWwucHJvdG90eXBlLmluc3RhbGxDb21waWxlclNvdXJjZU1hcHBp
bmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwucHJv
dG90eXBlLnJlZ2lzdGVyQW5jaG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclBy
ZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5fYWRkQ29uc29sZU1lc3NhZ2UpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAyMDExLTA2LTIyICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWto
YXRza3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjg5MjBlYy4uOGFiYjkxMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNjI0OSw2ICs2MjQ5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0NoZWNrYm94LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0Nv
bG9yLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU291cmNl
TWFwcGluZy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlUGFu
ZWwuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ29udGV4dE1lbnUuanMnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAxM2IwNzU5
Li4zYzk3NzcyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtNjc5MTcsNiArNjc5MTcsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29tcGlsZXJT
b3VyY2VNYXBwaW5nLmpzIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb25zb2xlUGFuZWwuanMiCiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NvbXBpbGVyU291cmNlTWFwcGluZy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ29tcGlsZXJTb3VyY2VNYXBwaW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJhN2ZlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU291cmNlTWFwcGluZy5qcwpAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gUmVwcmVzZW50cyBzb3VyY2UgbWFwcGluZyBmb3IgYSBzaW5nbGUgY29tcGlsZWQg
c2NyaXB0LgorV2ViSW5zcGVjdG9yLkNvbXBpbGVyU291cmNlTWFwcGluZyA9IGZ1bmN0aW9uKCkK
K3sKK30KKworV2ViSW5zcGVjdG9yLkNvbXBpbGVyU291cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7
CisgICAgLy8gUmV0dXJucyB1cmxzIG9mIHNvdXJjZXMgdXNlZCBmb3Igc2NyaXB0IGNvbXBpbGF0
aW9uLgorICAgIHNvdXJjZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIFNob3VsZCBi
ZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgorICAgIH0sCisKKyAgICBjb21waWxlZExvY2F0
aW9uVG9Tb3VyY2VMb2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQor
ICAgIHsKKyAgICAgICAgLy8gU2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCisg
ICAgfSwKKworICAgIHNvdXJjZUxvY2F0aW9uVG9Db21waWxlZExvY2F0aW9uOiBmdW5jdGlvbihz
b3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICB7CisgICAgICAgIC8vIFNo
b3VsZCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgorICAgIH0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcwppbmRleCA0
YzhmY2YyLi5iZGE5NTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCkBAIC0xMzQsNiArMTM0LDI1IEBAIFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMucXVlcnlT
Y3JpcHRzKGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHMuc291cmNlVVJMID09PSB1cmw7IH0pOwogICAg
IH0sCiAKKyAgICBzY3JpcHRGb3JVUkxBbmRMb2NhdGlvbjogZnVuY3Rpb24odXJsLCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICB2YXIgY2xvc2VzdFNjcmlwdDsKKyAg
ICAgICAgZm9yICh2YXIgc291cmNlSWQgaW4gdGhpcy5fc2NyaXB0cykgeworICAgICAgICAgICAg
c2NyaXB0ID0gdGhpcy5fc2NyaXB0c1tzb3VyY2VJZF07CisgICAgICAgICAgICBpZiAoIXNjcmlw
dC5zb3VyY2VVUkwgfHwgc2NyaXB0LnNvdXJjZVVSTCAhPT0gdXJsKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFjbG9zZXN0U2NyaXB0KSB7CisgICAgICAgICAg
ICAgICAgY2xvc2VzdFNjcmlwdCA9IHNjcmlwdDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY3JpcHQubGluZU9mZnNldCA+IGxpbmVO
dW1iZXIgfHwgKHNjcmlwdC5saW5lT2Zmc2V0ID09PSBsaW5lTnVtYmVyICYmIHNjcmlwdC5jb2x1
bW5PZmZzZXQgPiBjb2x1bW5OdW1iZXIpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgaWYgKChzY3JpcHQubGluZU9mZnNldCA+IGNsb3Nlc3RTY3JpcHQubGluZU9mZnNl
dCkgfHwgKHNjcmlwdC5saW5lT2Zmc2V0ID09PSBjbG9zZXN0U2NyaXB0LmxpbmVPZmZzZXQgJiYg
c2NyaXB0LmNvbHVtbk9mZnNldCA+IGNsb3Nlc3RTY3JpcHQuY29sdW1uT2Zmc2V0KSkKKyAgICAg
ICAgICAgICAgICBjbG9zZXN0U2NyaXB0ID0gc2NyaXB0OworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBjbG9zZXN0U2NyaXB0OworICAgIH0sCisKICAgICBxdWVyeVNjcmlwdHM6IGZ1bmN0aW9u
KGZpbHRlcikKICAgICB7CiAgICAgICAgIHZhciBzY3JpcHRzID0gW107CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9k
ZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwuanMKaW5kZXggNjVhYWZmYS4uZWRkYmM3ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50
YXRpb25Nb2RlbC5qcwpAQCAtMzEsNiArMzEsOCBAQAogV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJl
c2VudGF0aW9uTW9kZWwgPSBmdW5jdGlvbigpCiB7CiAgICAgdGhpcy5fc291cmNlRmlsZXMgPSB7
fTsKKyAgICB0aGlzLl9jb21waWxlclNvdXJjZU1hcHBpbmdzID0ge307CisgICAgdGhpcy5fY29t
cGlsZXJTb3VyY2VNYXBwaW5nc0J5U291cmNlRmlsZUlkID0ge307CiAgICAgdGhpcy5fbWVzc2Fn
ZXMgPSBbXTsKICAgICB0aGlzLl9hbmNob3JzID0gW107CiAgICAgdGhpcy5fYnJlYWtwb2ludHNC
eURlYnVnZ2VySWQgPSB7fTsKQEAgLTg2LDI0ICs4OCw4NSBAQCBXZWJJbnNwZWN0b3IuRGVidWdn
ZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAKICAgICBfc2NyaXB0TG9jYXRpb25U
b1VJTG9jYXRpb246IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNlSWQsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlciwgY2FsbGJhY2spCiAgICAgewotICAgICAgICB2YXIgc291cmNlRmlsZSA9IHRo
aXMuX3NvdXJjZUZpbGVGb3JTY3JpcHQoc291cmNlVVJMLCBzb3VyY2VJZCk7Ci0gICAgICAgIHZh
ciBzY3JpcHRMb2NhdGlvbiA9IHsgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVtYmVy
OiBjb2x1bW5OdW1iZXIgfTsKKyAgICAgICAgaWYgKCFzb3VyY2VJZCkgeworICAgICAgICAgICAg
dmFyIHNjcmlwdCA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNjcmlwdEZvclVSTEFuZExv
Y2F0aW9uKHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICAgICAgICAg
IHNvdXJjZUlkID0gc2NyaXB0LnNvdXJjZUlkOworICAgICAgICB9CisgICAgICAgIHZhciBzb3Vy
Y2VMb2NhdGlvbiA9IHRoaXMuX2NvbXBpbGVkTG9jYXRpb25Ub1NvdXJjZUxvY2F0aW9uKHNvdXJj
ZUlkLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgICAgIGlmICh0aGlzLl9mb3JtYXRT
b3VyY2VGaWxlcykgeworICAgICAgICAgICAgZnVuY3Rpb24gZGlkUmVxdWVzdFNvdXJjZU1hcHBp
bmcobWFwcGluZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVu
YW1lIHNjcmlwdExvY2F0aW9uVG9Tb3VyY2VMaW5lIHRvIG9yaWdpbmFsVG9Gb3JtYXR0ZWQuCisg
ICAgICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBtYXBwaW5nLnNjcmlwdExvY2F0aW9uVG9T
b3VyY2VMaW5lKHNvdXJjZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhzb3Vy
Y2VGaWxlLmlkLCBsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBz
b3VyY2VGaWxlID0gdGhpcy5fc291cmNlRmlsZXNbc291cmNlTG9jYXRpb24uc291cmNlRmlsZUlk
XTsKKyAgICAgICAgICAgIHNvdXJjZUZpbGUucmVxdWVzdFNvdXJjZU1hcHBpbmcoZGlkUmVxdWVz
dFNvdXJjZU1hcHBpbmcpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbGxiYWNrKHNv
dXJjZUxvY2F0aW9uLnNvdXJjZUZpbGVJZCwgc291cmNlTG9jYXRpb24ubGluZU51bWJlcik7Cisg
ICAgfSwKIAotICAgICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0U291cmNlTWFwcGluZyhtYXBwaW5n
KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IG1hcHBpbmcuc2NyaXB0
TG9jYXRpb25Ub1NvdXJjZUxpbmUoc2NyaXB0TG9jYXRpb24pOwotICAgICAgICAgICAgY2FsbGJh
Y2soc291cmNlRmlsZS5pZCwgbGluZU51bWJlcik7CisgICAgX3VpTG9jYXRpb25Ub1NjcmlwdExv
Y2F0aW9uOiBmdW5jdGlvbihzb3VyY2VGaWxlSWQsIGxpbmVOdW1iZXIsIGNhbGxiYWNrKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdFNvdXJjZUZpbGVzKSB7CisgICAgICAgICAgICBm
dW5jdGlvbiBkaWRSZXF1ZXN0U291cmNlTWFwcGluZyhtYXBwaW5nKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiByZW5hbWUgc291cmNlTGluZVRvU2NyaXB0TG9jYXRp
b24gdG8gZm9ybWF0dGVkVG9PcmlnaW5hbC4KKyAgICAgICAgICAgICAgICB2YXIgc291cmNlTG9j
YXRpb24gPSBtYXBwaW5nLnNvdXJjZUxpbmVUb1NjcmlwdExvY2F0aW9uKGxpbmVOdW1iZXIpCisg
ICAgICAgICAgICAgICAgdmFyIGNvbXBpbGVkTG9jYXRpb24gPSB0aGlzLl9zb3VyY2VMb2NhdGlv
blRvQ29tcGlsZWRMb2NhdGlvbihzb3VyY2VGaWxlSWQsIHNvdXJjZUxvY2F0aW9uLmxpbmVOdW1i
ZXIsIHNvdXJjZUxvY2F0aW9uLmNvbHVtbk51bWJlcik7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2soY29tcGlsZWRMb2NhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc291
cmNlRmlsZSA9IHRoaXMuX3NvdXJjZUZpbGVzW3NvdXJjZUZpbGVJZF07CisgICAgICAgICAgICBz
b3VyY2VGaWxlLnJlcXVlc3RTb3VyY2VNYXBwaW5nKGRpZFJlcXVlc3RTb3VyY2VNYXBwaW5nLmJp
bmQodGhpcykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGNvbXBpbGVkTG9j
YXRpb24gPSB0aGlzLl9zb3VyY2VMb2NhdGlvblRvQ29tcGlsZWRMb2NhdGlvbihzb3VyY2VGaWxl
SWQsIGxpbmVOdW1iZXIsIDApOworICAgICAgICAgICAgY2FsbGJhY2soY29tcGlsZWRMb2NhdGlv
bik7CiAgICAgICAgIH0KLSAgICAgICAgc291cmNlRmlsZS5yZXF1ZXN0U291cmNlTWFwcGluZyhk
aWRSZXF1ZXN0U291cmNlTWFwcGluZyk7CiAgICAgfSwKIAotICAgIF91aUxvY2F0aW9uVG9TY3Jp
cHRMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlRmlsZUlkLCBsaW5lTnVtYmVyLCBjYWxsYmFjaykK
KyAgICBfY29tcGlsZWRMb2NhdGlvblRvU291cmNlTG9jYXRpb246IGZ1bmN0aW9uKHNvdXJjZUlk
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgewotICAgICAgICBmdW5jdGlvbiBkaWRS
ZXF1ZXN0U291cmNlTWFwcGluZyhtYXBwaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYWxs
YmFjayhtYXBwaW5nLnNvdXJjZUxpbmVUb1NjcmlwdExvY2F0aW9uKGxpbmVOdW1iZXIpKTsKKyAg
ICAgICAgdmFyIHNvdXJjZU1hcHBpbmcgPSB0aGlzLl9jb21waWxlclNvdXJjZU1hcHBpbmdzW3Nv
dXJjZUlkXTsKKyAgICAgICAgaWYgKHNvdXJjZU1hcHBpbmcpIHsKKyAgICAgICAgICAgIHZhciBs
b2NhdGlvbiA9IHNvdXJjZU1hcHBpbmcuY29tcGlsZWRMb2NhdGlvblRvU291cmNlTG9jYXRpb24o
bGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICAgICAgICAgIGxvY2F0aW9uLnNvdXJjZUZp
bGVJZCA9IGxvY2F0aW9uLnNvdXJjZVVSTDsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBzb3VyY2VGaWxlID0gdGhpcy5fc291cmNlRmlsZUZv
clNjcmlwdChudWxsLCBzb3VyY2VJZCk7CisgICAgICAgIHJldHVybiB7IHNvdXJjZUZpbGVJZDog
c291cmNlRmlsZS5pZCwgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVtYmVyOiBjb2x1
bW5OdW1iZXIgfTsKKyAgICB9LAorCisgICAgX3NvdXJjZUxvY2F0aW9uVG9Db21waWxlZExvY2F0
aW9uOiBmdW5jdGlvbihzb3VyY2VGaWxlSWQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAg
ICB7CisgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nID0gdGhpcy5fY29tcGlsZXJTb3VyY2VNYXBw
aW5nc0J5U291cmNlRmlsZUlkW3NvdXJjZUZpbGVJZF07CisgICAgICAgIGlmIChzb3VyY2VNYXBw
aW5nKSB7CisgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBzb3VyY2VNYXBwaW5nLnNvdXJjZUxv
Y2F0aW9uVG9Db21waWxlZExvY2F0aW9uKHNvdXJjZUZpbGVJZCwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyKTsKKyAgICAgICAgICAgIGxvY2F0aW9uLnNvdXJjZUlkID0gc291cmNlTWFwcGluZy5f
c291cmNlSWQ7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgc291cmNlRmlsZSA9IHRoaXMuX3NvdXJjZUZpbGVzW3NvdXJjZUZpbGVJZF07Cisg
ICAgICAgIHZhciBsb2NhdGlvbiA9IHsgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVt
YmVyOiAwIH07CisgICAgICAgIGlmIChzb3VyY2VGaWxlLnVybCkgeworICAgICAgICAgICAgdmFy
IHNjcmlwdCA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNjcmlwdEZvclVSTEFuZExvY2F0
aW9uKHNvdXJjZUZpbGUudXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOworICAgICAgICAg
ICAgbG9jYXRpb24uc291cmNlSWQgPSBzY3JpcHQuc291cmNlSWQ7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgbG9jYXRpb24uc291cmNlSWQgPSBzb3VyY2VGaWxlLmlkOworICAgICAgICBy
ZXR1cm4gbG9jYXRpb247CisgICAgfSwKKworICAgIGluc3RhbGxDb21waWxlclNvdXJjZU1hcHBp
bmc6IGZ1bmN0aW9uKHNvdXJjZUlkLCBzb3VyY2VNYXBwaW5nKQorICAgIHsKKyAgICAgICAgdGhp
cy5fY29tcGlsZXJTb3VyY2VNYXBwaW5nc1tzb3VyY2VJZF0gPSBzb3VyY2VNYXBwaW5nOworICAg
ICAgICBzb3VyY2VNYXBwaW5nLl9zb3VyY2VJZCA9IHNvdXJjZUlkOworICAgICAgICB2YXIgc291
cmNlRmlsZVVSTHMgPSBzb3VyY2VNYXBwaW5nLnNvdXJjZXMoKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzb3VyY2VGaWxlVVJMcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFy
IHNvdXJjZUZpbGVJZCA9IHNvdXJjZUZpbGVVUkxzW2ldOworICAgICAgICAgICAgLy8gRklYTUU6
IGNyZWF0ZSByZWFsIHNvdXJjZSBmaWxlcyBhbmQgZGlzcGF0Y2ggY29ycmVzcG9uZGluZyBldmVu
dHMuCisgICAgICAgICAgICB0aGlzLl9zb3VyY2VGaWxlc1tzb3VyY2VGaWxlSWRdID0geyBpZDog
c291cmNlRmlsZUlkLCBicmVha3BvaW50czogW10gfTsKKyAgICAgICAgICAgIHRoaXMuX2NvbXBp
bGVyU291cmNlTWFwcGluZ3NCeVNvdXJjZUZpbGVJZFtzb3VyY2VGaWxlSWRdID0gc291cmNlTWFw
cGluZzsKICAgICAgICAgfQotICAgICAgICB0aGlzLl9zb3VyY2VGaWxlc1tzb3VyY2VGaWxlSWRd
LnJlcXVlc3RTb3VyY2VNYXBwaW5nKGRpZFJlcXVlc3RTb3VyY2VNYXBwaW5nLmJpbmQodGhpcykp
OwogICAgIH0sCiAKICAgICByZXF1ZXN0U291cmNlRmlsZUNvbnRlbnQ6IGZ1bmN0aW9uKHNvdXJj
ZUZpbGVJZCwgY2FsbGJhY2spCkBAIC0xMTMsNiArMTc2LDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyUHJlc2VudGF0aW9uTW9kZWwucHJvdG90eXBlID0gewogCiAgICAgcmVnaXN0ZXJBbmNob3I6
IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNlSWQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
dXBkYXRlSGFuZGxlcikKICAgICB7CisgICAgICAgIGlmIChzb3VyY2VVUkwgJiYgIVdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1vZGVsLnNjcmlwdEZvclVSTEFuZExvY2F0aW9uKHNvdXJjZVVSTCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICB2
YXIgYW5jaG9yID0geyBzb3VyY2VVUkw6IHNvdXJjZVVSTCwgc291cmNlSWQ6IHNvdXJjZUlkLCBs
aW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciwgdXBkYXRl
SGFuZGxlcjogdXBkYXRlSGFuZGxlciB9OwogICAgICAgICB0aGlzLl9hbmNob3JzLnB1c2goYW5j
aG9yKTsKICAgICAgICAgdGhpcy5fdXBkYXRlQW5jaG9yKGFuY2hvcik7CkBAIC0zMTYsNiArMzgy
LDggQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwucHJvdG90eXBlID0g
ewogICAgICAgICAvLyBGSVhNRSg2MjcyNSk6IHN0YWNrIHRyYWNlIGxpbmUvY29sdW1uIG51bWJl
cnMgYXJlIG9uZS1iYXNlZC4KICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBtZXNzYWdlLnN0YWNr
VHJhY2UgPyBtZXNzYWdlLnN0YWNrVHJhY2VbMF0ubGluZU51bWJlciAtIDEgOiBtZXNzYWdlLmxp
bmUgLSAxOwogICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gbWVzc2FnZS5zdGFja1RyYWNlID8g
bWVzc2FnZS5zdGFja1RyYWNlWzBdLmNvbHVtbk51bWJlciAtIDEgOiAwOworICAgICAgICBpZiAo
IVdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNjcmlwdEZvclVSTEFuZExvY2F0aW9uKG1lc3Nh
Z2UudXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKQorICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB0aGlzLl9zY3JpcHRMb2NhdGlvblRvVUlMb2NhdGlvbihtZXNzYWdlLnVybCwgbnVs
bCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBkaWRHZXRVSUxvY2F0aW9uLmJpbmQodGhpcykp
OwogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0
LnFyYwppbmRleCBlZWYxMTgwLi4yMDZmMmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC0xNCw2ICsxNCw3IEBACiAgICAgPGZpbGU+Q2Fs
bFN0YWNrU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q2hlY2tib3guanM8L2ZpbGU+
CiAgICAgPGZpbGU+Q29sb3IuanM8L2ZpbGU+CisgICAgPGZpbGU+Q29tcGlsZXJTb3VyY2VNYXBw
aW5nLmpzPC9maWxlPgogICAgIDxmaWxlPkNvbnNvbGVQYW5lbC5qczwvZmlsZT4KICAgICA8Zmls
ZT5Db25zb2xlVmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5Db250ZXh0TWVudS5qczwvZmlsZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
Lmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1s
CmluZGV4IDhmODJhMzguLjJiYjE0MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtMTUzLDYgKzE1Myw3IEBAIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRGV0YWlsZWRIZWFwc2hv
dFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkRlYnVnZ2VyTW9kZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbXBpbGVyU291cmNlTWFw
cGluZy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iU291cmNlRmlsZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iRE9NQWdlbnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IlRpbWVsaW5lQWdlbnQuanMiPjwvc2NyaXB0Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>