<?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>52295</bug_id>
          
          <creation_ts>2011-01-12 06:59:46 -0800</creation_ts>
          <short_desc>Web Inspector: Add check-inspector-strings script, fix bugs found</short_desc>
          <delta_ts>2011-01-12 10:32:45 -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>1</everconfirmed>
          <reporter name="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Mikhail Naganov">mnaganov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>333064</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-12 06:59:46 -0800</bug_when>
    <thetext>Incidentally I discovered that localizedStrings.js contains a number of obsolete strings. Then I wrote a simple script for diffing strings, and also found that several UI strings are absent in localizedStrings.js.

The script detects 3 kinds of problematic strings:

  - new strings: strings that are used in WebInspector.UIString, but absent in localizedStrings.js

  - unused strings: strings that present in localizedStrings.js, but can&apos;t be found as string literals in Inspector scripts (not only in WebInspector.UIString calls!)

  - suspicious strings: strings that present in localizedStrings.js, but present as string literals. This may mean that either someone forgot to use WebInspector.UIString, OR this string is used in more complex scenario (like returned from a function and then passed to WebInspector.UIString) -- in this case the string must be prefixed with /*@LS*/ comment.

After fixing all the bugs found, the only unused string is &quot;Drag&quot; from BreakPointsSidebarPane.js:272, which may be used in future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333072</commentid>
    <comment_count>1</comment_count>
      <attachid>78688</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-12 07:21:19 -0800</bug_when>
    <thetext>Created attachment 78688
patch

Strings removed from localizedStrings.js:

&quot;%s (%s transferred)&quot;                                                           
&quot;Any Request&quot;                                                                   
&quot;Enable resource tracking&quot;                                                      
&quot;Enabling resource tracking will reload the page and make page loading slower.&quot; 
&quot;GRAPHS&quot;                                                                        
&quot;Media&quot;                                                                         
&quot;Prototype&quot;                                                                     
&quot;RESOURCES&quot;                                                                     
&quot;Resource tracking disabled. Click to enable.&quot;                                  
&quot;Resource tracking enabled. Click to disable.&quot;                                  
&quot;Set XHR Breakpoint&quot;                                                            
&quot;Sort by Duration&quot;                                                              
&quot;Sort by End Time&quot;                                                              
&quot;Sort by Latency&quot;                                                               
&quot;Sort by Response Time&quot;                                                         
&quot;Sort by Size&quot;                                                                  
&quot;Sort by Start Time&quot;                                                            
&quot;Sort by Transfer Size&quot;                                                         
&quot;Stop on Attributes Modifications&quot;                                              
&quot;Stop on Node Removal&quot;                                                          
&quot;Stop on Subtree Modifications&quot;                                                 
&quot;Storage&quot;                                                                       
&quot;TIMELINES&quot;                                                                     
&quot;Timing.&quot;                                                                       
&quot;You need to enable resource tracking to use this panel.&quot;                       
&quot;inline stylesheet&quot;                                                             

Strings added to localizedStrings.js:

&quot;(from cache)&quot;                             
&quot;Any XHR&quot;                                  
&quot;Database not found.&quot;                      
&quot;File System is disabled.&quot;                 
&quot;File System&quot;                              
&quot;Recording&quot;                                
&quot;Request Cookies&quot;                          
&quot;Response Cookies&quot;                         
&quot;Reveal in Elements Panel&quot;                 
&quot;This request has no detailed timing info.&quot;
&quot;Timing&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333081</commentid>
    <comment_count>2</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-12 07:39:56 -0800</bug_when>
    <thetext>Forgot that I also added these 3 lines discovered after I prefixed strings from Resource.Type.toString with /*@LR*/:

&quot;media&quot;
&quot;websocket&quot;
&quot;xhr&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333102</commentid>
    <comment_count>3</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-12 08:51:39 -0800</bug_when>
    <thetext>    2011-01-12  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;
    
            Reviewed by Pavel Feldman.
    
            Add check-inspector-strings script.
            Fix inconsistencies in Inspector strings found by the script.
    
            https://bugs.webkit.org/show_bug.cgi?id=52295
    
            * English.lproj/localizedStrings.js:
            * inspector/front-end/BreakpointsSidebarPane.js:
            (WebInspector.EventListenerBreakpointsSidebarPane):
            * inspector/front-end/ProfilesPanel.js:
            (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
            * inspector/front-end/Resource.js:
            (WebInspector.Resource.Type.toString):
            * inspector/front-end/ResourcesPanel.js:
            (WebInspector.ResourceRevisionTreeElement):
            * inspector/front-end/utilities.js:
            ():
            * Scripts/check-inspector-strings: Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333105</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-01-12 09:02:10 -0800</bug_when>
    <thetext>Mikhail, thanks for doing this. It is more useful, when landing, to provide a link
to the trac / provide the SVN revision number of when this landed then providing
the ChangeLog entry which can be found either at that link or in an attached patch.

Here you could link to:
http://trac.webkit.org/changeset/75613

This looks great! Thanks for doing this. I just recently opened the following, which
I will now move to a duplicate of this:
&lt;http://webkit.org/b/52196&gt; Web Inspector: Some Localized Strings are Outdated

It looks like you most of what I noticed, but I still had at least one difference:

  There is &quot;Assertion failed: &quot; in localizedStrings.js and &quot;Assertion failed:&quot; without
  the trailing space in code. Did your script catch this, or maybe I am looking at
  an older tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333107</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-01-12 09:02:23 -0800</bug_when>
    <thetext>*** Bug 52196 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333112</commentid>
    <comment_count>6</comment_count>
      <attachid>78688</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-01-12 09:09:19 -0800</bug_when>
    <thetext>Comment on attachment 78688
patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +2011-01-12  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Fix inconsistencies in Inspector strings found by the new check-inspector-strings script.
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=52295
&gt; +

It would be very helpful to point out here that the /*@LS*/ &quot;sigil&quot; which annotates a String
that could be localized but is being used outside of known localized functions.

For instance, if I started working on inspector code, I would be very confused about this
comment and I&apos;d do a git annotate to see this ChangeLog / commit message. A comment
here would be helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333115</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-01-12 09:10:25 -0800</bug_when>
    <thetext>&gt; &quot;sigil&quot; which annotates a String

Should just be: annotates a String</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333117</commentid>
    <comment_count>8</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-12 09:12:45 -0800</bug_when>
    <thetext>Sorry, there was a &quot;mid-air collision&quot; while I was submitting my comment, and for the second time I forgot to provide a Trac link. Thanks for adding it!

Yes, &quot;Assertion failed:&quot; is OK now, it was fixed by Yury in http://trac.webkit.org/changeset/73607</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333121</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-01-12 09:34:17 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Sorry, there was a &quot;mid-air collision&quot; while I was submitting my comment,
&gt; and for the second time I forgot to provide a Trac link. Thanks for adding it!
&gt; 
&gt; Yes, &quot;Assertion failed:&quot; is OK now, it was fixed by Yury in http://trac.webkit.org/changeset/73607

Excellent, thanks!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333122</commentid>
    <comment_count>10</comment_count>
      <attachid>78688</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-12 09:42:01 -0800</bug_when>
    <thetext>Comment on attachment 78688
patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +
&gt; 
&gt; It would be very helpful to point out here that the /*@LS*/ &quot;sigil&quot; which annotates a String
&gt; that could be localized but is being used outside of known localized functions.
&gt; 
&gt; For instance, if I started working on inspector code, I would be very confused about this
&gt; comment and I&apos;d do a git annotate to see this ChangeLog / commit message. A comment
&gt; here would be helpful.

I think, the l10n topic deserves its own wiki page. A newbie needs also to know about WebInspector.UIString, about localizedStrings.js, etc...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333134</commentid>
    <comment_count>11</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-01-12 10:10:42 -0800</bug_when>
    <thetext>I don&apos;t think the /*@LS*/ technique is a good approch. Instead it should be illegal to pass a non string literal to WebInspector.UIString.

The /*@LS*/ makes the code ugly and as Joe mentioned is confusing.

If the length of WebInspector.UIString is at issue we can have a shorter global function for localized strings that would be prettier, shorter and less confusing than /*@LS*/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333138</commentid>
    <comment_count>12</comment_count>
      <attachid>78688</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-01-12 10:18:31 -0800</bug_when>
    <thetext>Comment on attachment 78688
patch

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

&gt; Source/WebCore/inspector/front-end/Resource.js:84
&gt; -                return &quot;document&quot;;
&gt; +                return /*@LS*/&quot;document&quot;;
&gt;              case this.Stylesheet:
&gt; -                return &quot;stylesheet&quot;;
&gt; +                return /*@LS*/&quot;stylesheet&quot;;
&gt;              case this.Image:
&gt; -                return &quot;image&quot;;
&gt; +                return /*@LS*/&quot;image&quot;;
&gt; -                return &quot;font&quot;;
&gt;              case this.Script:
&gt; -                return &quot;script&quot;;
&gt; +                return /*@LS*/&quot;script&quot;;
&gt;              case this.XHR:
&gt; -                return &quot;xhr&quot;;
&gt; +                return /*@LS*/&quot;xhr&quot;;
&gt;              case this.Media:
&gt; -                return &quot;media&quot;;
&gt; +                return /*@LS*/&quot;media&quot;;
&gt;              case this.WebSocket:
&gt; -                return &quot;websocket&quot;;
&gt; +                return /*@LS*/&quot;websocket&quot;;
&gt;              case this.Other:
&gt;              default:
&gt; -                return &quot;other&quot;;
&gt; +                return /*@LS*/&quot;other&quot;;

These should not be localized. Instead the toUIString should have a similar switch that returns UIStrings. Because these are all lowercase they are not good UIStrings. &quot;xhr&quot; should be &quot;XHR&quot; in the UI. &quot;websocket&quot; should be &quot;WebSocket&quot; or &quot;Web Socket&quot;. And the others likely should have Title case. So you are masking a &quot;bug&quot; by doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333142</commentid>
    <comment_count>13</comment_count>
      <attachid>78688</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-12 10:23:38 -0800</bug_when>
    <thetext>Comment on attachment 78688
patch

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

&gt;&gt; Source/WebCore/inspector/front-end/Resource.js:84
&gt;&gt; +                return /*@LS*/&quot;other&quot;;
&gt; 
&gt; These should not be localized. Instead the toUIString should have a similar switch that returns UIStrings. Because these are all lowercase they are not good UIStrings. &quot;xhr&quot; should be &quot;XHR&quot; in the UI. &quot;websocket&quot; should be &quot;WebSocket&quot; or &quot;Web Socket&quot;. And the others likely should have Title case. So you are masking a &quot;bug&quot; by doing this.

I agree with you about this place, but what about Number.bytesToString? Formatter is passed as a parameter, and there are several uses of bytesToString, where the parameter isn&apos;t WebInspector.UIString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333151</commentid>
    <comment_count>14</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-01-12 10:32:45 -0800</bug_when>
    <thetext>Not passing a formatter to bytesToString should be considered a bug. The fact that is falls back to sprintf leads to unlocalized strings. We should change bytesToString (and friends) to always use UIString, even though utilities.js dosen&apos;t currently have a dependancy on WebInspector i think it is fine to prevent unlocalized strings.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78688</attachid>
            <date>2011-01-12 07:21:19 -0800</date>
            <delta_ts>2011-01-12 10:23:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch-52295</filename>
            <type>text/plain</type>
            <size>15543</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0YTlmMDZiLi42MmE1ZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTEtMDEtMTIgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggaW5j
b25zaXN0ZW5jaWVzIGluIEluc3BlY3RvciBzdHJpbmdzIGZvdW5kIGJ5IHRoZSBuZXcgY2hlY2st
aW5zcGVjdG9yLXN0cmluZ3Mgc2NyaXB0LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjI5NQorCisgICAgICAgICogRW5nbGlzaC5scHJvai9sb2Nh
bGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJl
YWtwb2ludHNTaWRlYmFyUGFuZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9m
aWxlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90
eXBlLnNldFJlY29yZGluZ1Byb2ZpbGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
UmVzb3VyY2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS50b1N0cmlu
Zyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVJldmlzaW9uVHJlZUVsZW1lbnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOgorICAgICAgICAoKToKKwogMjAx
MS0wMS0xMSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9F
bmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNo
Lmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggZDEzN2NmYy4uOTU4NjdhNCAxMDA2NDQK
QmluYXJ5IGZpbGVzIGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzIGFuZCBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5n
cy5qcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwppbmRleCA2MTk1MjVjLi42MTAzYzAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9p
bnRzU2lkZWJhclBhbmUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCkBAIC0yNjUsMTcgKzI2NSwxNyBAQCBXZWJJbnNw
ZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBmdW5jdGlvbigpCiAg
ICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5FdmVudExpc3RlbmVyQnJlYWtwb2ludEFk
ZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOwogCiAgICAgdGhpcy5fYnJlYWtwb2lu
dEl0ZW1zID0ge307Ci0gICAgdGhpcy5fY3JlYXRlQ2F0ZWdvcnkoIktleWJvYXJkIiwgImxpc3Rl
bmVyIiwgWyJrZXlkb3duIiwgImtleXVwIiwgImtleXByZXNzIiwgInRleHRJbnB1dCJdKTsKLSAg
ICB0aGlzLl9jcmVhdGVDYXRlZ29yeSgiTW91c2UiLCAibGlzdGVuZXIiLCBbImNsaWNrIiwgImRi
bGNsaWNrIiwgIm1vdXNlZG93biIsICJtb3VzZXVwIiwgIm1vdXNlb3ZlciIsICJtb3VzZW1vdmUi
LCAibW91c2VvdXQiLCAibW91c2V3aGVlbCJdKTsKKyAgICB0aGlzLl9jcmVhdGVDYXRlZ29yeSgv
KkBMUyovIktleWJvYXJkIiwgImxpc3RlbmVyIiwgWyJrZXlkb3duIiwgImtleXVwIiwgImtleXBy
ZXNzIiwgInRleHRJbnB1dCJdKTsKKyAgICB0aGlzLl9jcmVhdGVDYXRlZ29yeSgvKkBMUyovIk1v
dXNlIiwgImxpc3RlbmVyIiwgWyJjbGljayIsICJkYmxjbGljayIsICJtb3VzZWRvd24iLCAibW91
c2V1cCIsICJtb3VzZW92ZXIiLCAibW91c2Vtb3ZlIiwgIm1vdXNlb3V0IiwgIm1vdXNld2hlZWwi
XSk7CiAgICAgLy8gRklYTUU6IHVuY29tbWVudCBmb2xsb3dpbmcgb25jZSBpbnNwZWN0b3Igc3Rv
cHMgYmVpbmcgZHJvcCB0YXJnZXIgaW4gbWFqb3IgcG9ydHMuCiAgICAgLy8gT3RoZXJ3aXNlLCBp
bnNwZWN0b3IgcGFnZSByZWFjdHMgb24gZHJvcCBldmVudCBhbmQgdHJpZXMgdG8gbG9hZCB0aGUg
ZXZlbnQgZGF0YS4KLSAgICAvLyB0aGlzLl9jcmVhdGVDYXRlZ29yeSgiRHJhZyIsICJsaXN0ZW5l
ciIsIFsiZHJhZyIsICJkcm9wIiwgImRyYWdzdGFydCIsICJkcmFnZW5kIiwgImRyYWdlbnRlciIs
ICJkcmFnbGVhdmUiLCAiZHJhZ292ZXIiXSk7Ci0gICAgdGhpcy5fY3JlYXRlQ2F0ZWdvcnkoIkNv
bnRyb2wiLCAibGlzdGVuZXIiLCBbInJlc2l6ZSIsICJzY3JvbGwiLCAiem9vbSIsICJmb2N1cyIs
ICJibHVyIiwgInNlbGVjdCIsICJjaGFuZ2UiLCAic3VibWl0IiwgInJlc2V0Il0pOwotICAgIHRo
aXMuX2NyZWF0ZUNhdGVnb3J5KCJDbGlwYm9hcmQiLCAibGlzdGVuZXIiLCBbImNvcHkiLCAiY3V0
IiwgInBhc3RlIiwgImJlZm9yZWNvcHkiLCAiYmVmb3JlY3V0IiwgImJlZm9yZXBhc3RlIl0pOwot
ICAgIHRoaXMuX2NyZWF0ZUNhdGVnb3J5KCJMb2FkIiwgImxpc3RlbmVyIiwgWyJsb2FkIiwgInVu
bG9hZCIsICJhYm9ydCIsICJlcnJvciJdKTsKLSAgICB0aGlzLl9jcmVhdGVDYXRlZ29yeSgiRE9N
IE11dGF0aW9uIiwgImxpc3RlbmVyIiwgWyJET01BY3RpdmF0ZSIsICJET01Gb2N1c0luIiwgIkRP
TUZvY3VzT3V0IiwgIkRPTUF0dHJNb2RpZmllZCIsICJET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQi
LCAiRE9NTm9kZUluc2VydGVkIiwgIkRPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudCIsICJET01O
b2RlUmVtb3ZlZCIsICJET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudCIsICJET01TdWJ0cmVlTW9k
aWZpZWQiLCAiRE9NQ29udGVudExvYWRlZCJdKTsKLSAgICB0aGlzLl9jcmVhdGVDYXRlZ29yeSgi
RGV2aWNlIiwgImxpc3RlbmVyIiwgWyJkZXZpY2VvcmllbnRhdGlvbiIsICJkZXZpY2Vtb3Rpb24i
XSk7Ci0gICAgdGhpcy5fY3JlYXRlQ2F0ZWdvcnkoIlRpbWVyIiwgImluc3RydW1lbnRhdGlvbiIs
IFsic2V0VGltZXIiLCAiY2xlYXJUaW1lciIsICJ0aW1lckZpcmVkIl0pOworICAgIC8vIHRoaXMu
X2NyZWF0ZUNhdGVnb3J5KC8qQExTKi8iRHJhZyIsICJsaXN0ZW5lciIsIFsiZHJhZyIsICJkcm9w
IiwgImRyYWdzdGFydCIsICJkcmFnZW5kIiwgImRyYWdlbnRlciIsICJkcmFnbGVhdmUiLCAiZHJh
Z292ZXIiXSk7CisgICAgdGhpcy5fY3JlYXRlQ2F0ZWdvcnkoLypATFMqLyJDb250cm9sIiwgImxp
c3RlbmVyIiwgWyJyZXNpemUiLCAic2Nyb2xsIiwgInpvb20iLCAiZm9jdXMiLCAiYmx1ciIsICJz
ZWxlY3QiLCAiY2hhbmdlIiwgInN1Ym1pdCIsICJyZXNldCJdKTsKKyAgICB0aGlzLl9jcmVhdGVD
YXRlZ29yeSgvKkBMUyovIkNsaXBib2FyZCIsICJsaXN0ZW5lciIsIFsiY29weSIsICJjdXQiLCAi
cGFzdGUiLCAiYmVmb3JlY29weSIsICJiZWZvcmVjdXQiLCAiYmVmb3JlcGFzdGUiXSk7CisgICAg
dGhpcy5fY3JlYXRlQ2F0ZWdvcnkoLypATFMqLyJMb2FkIiwgImxpc3RlbmVyIiwgWyJsb2FkIiwg
InVubG9hZCIsICJhYm9ydCIsICJlcnJvciJdKTsKKyAgICB0aGlzLl9jcmVhdGVDYXRlZ29yeSgv
KkBMUyovIkRPTSBNdXRhdGlvbiIsICJsaXN0ZW5lciIsIFsiRE9NQWN0aXZhdGUiLCAiRE9NRm9j
dXNJbiIsICJET01Gb2N1c091dCIsICJET01BdHRyTW9kaWZpZWQiLCAiRE9NQ2hhcmFjdGVyRGF0
YU1vZGlmaWVkIiwgIkRPTU5vZGVJbnNlcnRlZCIsICJET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1l
bnQiLCAiRE9NTm9kZVJlbW92ZWQiLCAiRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQiLCAiRE9N
U3VidHJlZU1vZGlmaWVkIiwgIkRPTUNvbnRlbnRMb2FkZWQiXSk7CisgICAgdGhpcy5fY3JlYXRl
Q2F0ZWdvcnkoLypATFMqLyJEZXZpY2UiLCAibGlzdGVuZXIiLCBbImRldmljZW9yaWVudGF0aW9u
IiwgImRldmljZW1vdGlvbiJdKTsKKyAgICB0aGlzLl9jcmVhdGVDYXRlZ29yeSgvKkBMUyovIlRp
bWVyIiwgImluc3RydW1lbnRhdGlvbiIsIFsic2V0VGltZXIiLCAiY2xlYXJUaW1lciIsICJ0aW1l
ckZpcmVkIl0pOwogfQogCiBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzU2lk
ZWJhclBhbmUucHJvdG90eXBlID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCmluZGV4IGJmZjViZTcuLjY1ZmMxNWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwu
anMKQEAgLTYyMyw3ICs2MjMsNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBpZiAoIXRoaXMuX3RlbXBvcmFyeVJlY29yZGluZ1Byb2ZpbGUp
IHsKICAgICAgICAgICAgICAgICB0aGlzLl90ZW1wb3JhcnlSZWNvcmRpbmdQcm9maWxlID0gewog
ICAgICAgICAgICAgICAgICAgICB0eXBlSWQ6IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZS5U
eXBlSWQsCi0gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IlJlY29yZGluZyIpLAorICAgICAgICAgICAgICAgICAgICB0aXRsZTogV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJSZWNvcmRpbmfigKYiKSwKICAgICAgICAgICAgICAgICAgICAgdWlkOiAtMSwKICAg
ICAgICAgICAgICAgICAgICAgaXNUZW1wb3Jhcnk6IHRydWUKICAgICAgICAgICAgICAgICB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2UuanMKaW5kZXgg
MDYzY2E0My4uZmQ1NmVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Jlc291cmNlLmpzCkBAIC02NCwyNCArNjQsMjQgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNl
LlR5cGUgPSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgIGNh
c2UgdGhpcy5Eb2N1bWVudDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImRvY3VtZW50IjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gLypATFMqLyJkb2N1bWVudCI7CiAgICAgICAgICAgICBjYXNl
IHRoaXMuU3R5bGVzaGVldDoKLSAgICAgICAgICAgICAgICByZXR1cm4gInN0eWxlc2hlZXQiOwor
ICAgICAgICAgICAgICAgIHJldHVybiAvKkBMUyovInN0eWxlc2hlZXQiOwogICAgICAgICAgICAg
Y2FzZSB0aGlzLkltYWdlOgotICAgICAgICAgICAgICAgIHJldHVybiAiaW1hZ2UiOworICAgICAg
ICAgICAgICAgIHJldHVybiAvKkBMUyovImltYWdlIjsKICAgICAgICAgICAgIGNhc2UgdGhpcy5G
b250OgotICAgICAgICAgICAgICAgIHJldHVybiAiZm9udCI7CisgICAgICAgICAgICAgICAgcmV0
dXJuIC8qQExTKi8iZm9udCI7CiAgICAgICAgICAgICBjYXNlIHRoaXMuU2NyaXB0OgotICAgICAg
ICAgICAgICAgIHJldHVybiAic2NyaXB0IjsKKyAgICAgICAgICAgICAgICByZXR1cm4gLypATFMq
LyJzY3JpcHQiOwogICAgICAgICAgICAgY2FzZSB0aGlzLlhIUjoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gInhociI7CisgICAgICAgICAgICAgICAgcmV0dXJuIC8qQExTKi8ieGhyIjsKICAgICAg
ICAgICAgIGNhc2UgdGhpcy5NZWRpYToKLSAgICAgICAgICAgICAgICByZXR1cm4gIm1lZGlhIjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gLypATFMqLyJtZWRpYSI7CiAgICAgICAgICAgICBjYXNl
IHRoaXMuV2ViU29ja2V0OgotICAgICAgICAgICAgICAgIHJldHVybiAid2Vic29ja2V0IjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gLypATFMqLyJ3ZWJzb2NrZXQiOwogICAgICAgICAgICAgY2Fz
ZSB0aGlzLk90aGVyOgogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gIm90aGVyIjsKKyAgICAgICAgICAgICAgICByZXR1cm4gLypATFMqLyJvdGhlciI7CiAgICAg
ICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9SZXNvdXJjZXNQYW5lbC5qcwppbmRleCBlY2I4MjZmLi4wNzUyNDlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMK
QEAgLTEyMjcsNyArMTIyNyw3IEBAIFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlVHJlZUVs
ZW1lbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5CYXNlCiAKIFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZVJldmlzaW9uVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdG9yYWdlUGFuZWws
IHJldmlzaW9uKQogewotICAgIHZhciB0aXRsZSA9IHJldmlzaW9uLnRpbWVzdGFtcCA/IHJldmlz
aW9uLnRpbWVzdGFtcC50b0xvY2FsZVRpbWVTdHJpbmcoKSA6ICIob3JpZ2luYWwpIjsKKyAgICB2
YXIgdGl0bGUgPSByZXZpc2lvbi50aW1lc3RhbXAgPyByZXZpc2lvbi50aW1lc3RhbXAudG9Mb2Nh
bGVUaW1lU3RyaW5nKCkgOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihvcmlnaW5hbCkiKTsKICAg
ICBXZWJJbnNwZWN0b3IuQmFzZVN0b3JhZ2VUcmVlRWxlbWVudC5jYWxsKHRoaXMsIHN0b3JhZ2VQ
YW5lbCwgbnVsbCwgdGl0bGUsICJyZXNvdXJjZS1zaWRlYmFyLXRyZWUtaXRlbSByZXNvdXJjZXMt
Y2F0ZWdvcnktIiArIHJldmlzaW9uLmNhdGVnb3J5Lm5hbWUpOwogICAgIGlmIChyZXZpc2lvbi50
aW1lc3RhbXApCiAgICAgICAgIHRoaXMudG9vbHRpcCA9IHJldmlzaW9uLnRpbWVzdGFtcC50b0xv
Y2FsZVN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC91dGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0
aWxpdGllcy5qcwppbmRleCAxMWY2Mzg2Li42NTNlNTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwpAQCAtNjU4LDIzICs2NTgsMjMgQEAg
TnVtYmVyLnNlY29uZHNUb1N0cmluZyA9IGZ1bmN0aW9uKHNlY29uZHMsIGZvcm1hdHRlckZ1bmN0
aW9uLCBoaWdoZXJSZXNvbHV0aW9uKQogCiAgICAgdmFyIG1zID0gc2Vjb25kcyAqIDEwMDA7CiAg
ICAgaWYgKGhpZ2hlclJlc29sdXRpb24gJiYgbXMgPCAxMDAwKQotICAgICAgICByZXR1cm4gZm9y
bWF0dGVyRnVuY3Rpb24oIiUuM2ZtcyIsIG1zKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlckZ1
bmN0aW9uKC8qQExTKi8iJS4zZm1zIiwgbXMpOwogICAgIGVsc2UgaWYgKG1zIDwgMTAwMCkKLSAg
ICAgICAgcmV0dXJuIGZvcm1hdHRlckZ1bmN0aW9uKCIlLjBmbXMiLCBtcyk7CisgICAgICAgIHJl
dHVybiBmb3JtYXR0ZXJGdW5jdGlvbigvKkBMUyovIiUuMGZtcyIsIG1zKTsKIAogICAgIGlmIChz
ZWNvbmRzIDwgNjApCi0gICAgICAgIHJldHVybiBmb3JtYXR0ZXJGdW5jdGlvbigiJS4yZnMiLCBz
ZWNvbmRzKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlckZ1bmN0aW9uKC8qQExTKi8iJS4yZnMi
LCBzZWNvbmRzKTsKIAogICAgIHZhciBtaW51dGVzID0gc2Vjb25kcyAvIDYwOwogICAgIGlmICht
aW51dGVzIDwgNjApCi0gICAgICAgIHJldHVybiBmb3JtYXR0ZXJGdW5jdGlvbigiJS4xZm1pbiIs
IG1pbnV0ZXMpOworICAgICAgICByZXR1cm4gZm9ybWF0dGVyRnVuY3Rpb24oLypATFMqLyIlLjFm
bWluIiwgbWludXRlcyk7CiAKICAgICB2YXIgaG91cnMgPSBtaW51dGVzIC8gNjA7CiAgICAgaWYg
KGhvdXJzIDwgMjQpCi0gICAgICAgIHJldHVybiBmb3JtYXR0ZXJGdW5jdGlvbigiJS4xZmhycyIs
IGhvdXJzKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlckZ1bmN0aW9uKC8qQExTKi8iJS4xZmhy
cyIsIGhvdXJzKTsKIAogICAgIHZhciBkYXlzID0gaG91cnMgLyAyNDsKLSAgICByZXR1cm4gZm9y
bWF0dGVyRnVuY3Rpb24oIiUuMWYgZGF5cyIsIGRheXMpOworICAgIHJldHVybiBmb3JtYXR0ZXJG
dW5jdGlvbigvKkBMUyovIiUuMWYgZGF5cyIsIGRheXMpOwogfQogCiBOdW1iZXIuYnl0ZXNUb1N0
cmluZyA9IGZ1bmN0aW9uKGJ5dGVzLCBmb3JtYXR0ZXJGdW5jdGlvbiwgaGlnaGVyUmVzb2x1dGlv
bikKQEAgLTY4NSwxOSArNjg1LDE5IEBAIE51bWJlci5ieXRlc1RvU3RyaW5nID0gZnVuY3Rpb24o
Ynl0ZXMsIGZvcm1hdHRlckZ1bmN0aW9uLCBoaWdoZXJSZXNvbHV0aW9uKQogICAgICAgICBoaWdo
ZXJSZXNvbHV0aW9uID0gdHJ1ZTsKIAogICAgIGlmIChieXRlcyA8IDEwMjQpCi0gICAgICAgIHJl
dHVybiBmb3JtYXR0ZXJGdW5jdGlvbigiJS4wZkIiLCBieXRlcyk7CisgICAgICAgIHJldHVybiBm
b3JtYXR0ZXJGdW5jdGlvbigvKkBMUyovIiUuMGZCIiwgYnl0ZXMpOwogCiAgICAgdmFyIGtpbG9i
eXRlcyA9IGJ5dGVzIC8gMTAyNDsKICAgICBpZiAoaGlnaGVyUmVzb2x1dGlvbiAmJiBraWxvYnl0
ZXMgPCAxMDI0KQotICAgICAgICByZXR1cm4gZm9ybWF0dGVyRnVuY3Rpb24oIiUuMmZLQiIsIGtp
bG9ieXRlcyk7CisgICAgICAgIHJldHVybiBmb3JtYXR0ZXJGdW5jdGlvbigvKkBMUyovIiUuMmZL
QiIsIGtpbG9ieXRlcyk7CiAgICAgZWxzZSBpZiAoa2lsb2J5dGVzIDwgMTAyNCkKLSAgICAgICAg
cmV0dXJuIGZvcm1hdHRlckZ1bmN0aW9uKCIlLjBmS0IiLCBraWxvYnl0ZXMpOworICAgICAgICBy
ZXR1cm4gZm9ybWF0dGVyRnVuY3Rpb24oLypATFMqLyIlLjBmS0IiLCBraWxvYnl0ZXMpOwogCiAg
ICAgdmFyIG1lZ2FieXRlcyA9IGtpbG9ieXRlcyAvIDEwMjQ7CiAgICAgaWYgKGhpZ2hlclJlc29s
dXRpb24pCi0gICAgICAgIHJldHVybiBmb3JtYXR0ZXJGdW5jdGlvbigiJS4yZk1CIiwgbWVnYWJ5
dGVzKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlckZ1bmN0aW9uKC8qQExTKi8iJS4yZk1CIiwg
bWVnYWJ5dGVzKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmb3JtYXR0ZXJGdW5jdGlvbigi
JS4wZk1CIiwgbWVnYWJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlckZ1bmN0aW9uKC8q
QExTKi8iJS4wZk1CIiwgbWVnYWJ5dGVzKTsKIH0KIAogTnVtYmVyLmNvbnN0cmFpbiA9IGZ1bmN0
aW9uKG51bSwgbWluLCBtYXgpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNTkxYmJhNi4uZjAxNTc1NyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTAxLTEyICBN
aWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNoZWNrLWluc3BlY3Rvci1zdHJp
bmdzIHNjcmlwdC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTIyOTUKKworICAgICAgICAqIFNjcmlwdHMvY2hlY2staW5zcGVjdG9yLXN0cmluZ3M6
IEFkZGVkLgorCiAyMDExLTAxLTExICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL2NoZWNrLWluc3BlY3Rvci1zdHJpbmdzIGIvVG9vbHMvU2NyaXB0cy9jaGVjay1pbnNw
ZWN0b3Itc3RyaW5ncwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MDFkNTAy
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9jaGVjay1pbnNwZWN0b3Itc3RyaW5n
cwpAQCAtMCwwICsxLDExNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IGNvZGVjcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN5
cworCitmcm9tIHdlYmtpdHB5LnN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IGRldGVjdF9jaGVja291
dAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmxvZ3V0aWxzIGltcG9ydCBjb25maWd1cmVf
bG9nZ2luZworZnJvbSB3ZWJraXRweS5zdHlsZS5jaGVja2VyIGltcG9ydCBQcm9jZXNzb3JCYXNl
Citmcm9tIHdlYmtpdHB5LnN0eWxlLmZpbGVyZWFkZXIgaW1wb3J0IFRleHRGaWxlUmVhZGVyCitm
cm9tIHdlYmtpdHB5LnN0eWxlLm1haW4gaW1wb3J0IGNoYW5nZV9kaXJlY3RvcnkKKworX2luc3Bl
Y3Rvcl9kaXJlY3RvcnkgPSAiU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZCIKK19s
b2NhbGl6ZWRfc3RyaW5ncyA9ICJTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXpl
ZFN0cmluZ3MuanMiCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiY2hlY2staW5zcGVjdG9y
LXN0cmluZ3MiKQorCitjbGFzcyBTdHJpbmdzRXh0cmFjdG9yKFByb2Nlc3NvckJhc2UpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwYXR0ZXJucyk6CisgICAgICAgIHNlbGYuX3BhdHRlcm5zID0g
cGF0dGVybnMKKyAgICAgICAgc2VsZi5zdHJpbmdzID0gW10KKyAgICAgICAgZm9yIHAgaW4gc2Vs
Zi5fcGF0dGVybnM6CisgICAgICAgICAgICBzZWxmLnN0cmluZ3MuYXBwZW5kKFtdKQorCisgICAg
ZGVmIHNob3VsZF9wcm9jZXNzKHNlbGYsIGZpbGVfcGF0aCk6CisgICAgICAgIHJldHVybiBmaWxl
X3BhdGguZW5kc3dpdGgoIi5qcyIpIGFuZCAobm90IGZpbGVfcGF0aC5lbmRzd2l0aCgiSW5qZWN0
ZWRTY3JpcHQuanMiKSkKKworICAgIGRlZiBwcm9jZXNzKHNlbGYsIGxpbmVzLCBmaWxlX3BhdGgs
IGxpbmVfbnVtYmVycz1Ob25lKToKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAg
ICAgICBjb21tZW50X3N0YXJ0ID0gbGluZS5maW5kKCIvLyIpCisgICAgICAgICAgICBpZiBjb21t
ZW50X3N0YXJ0ICE9IC0xOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzpjb21tZW50X3N0
YXJ0XQorICAgICAgICAgICAgaW5kZXggPSAwCisgICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBz
ZWxmLl9wYXR0ZXJuczoKKyAgICAgICAgICAgICAgICBsaW5lX3N0cmluZ3MgPSByZS5maW5kYWxs
KHBhdHRlcm4sIGxpbmUpCisgICAgICAgICAgICAgICAgZm9yIHN0cmluZyBpbiBsaW5lX3N0cmlu
Z3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nc1tpbmRleF0uYXBwZW5kKHN0cmlu
ZykKKyAgICAgICAgICAgICAgICBpbmRleCArPSAxCisKK2NsYXNzIExvY2FsaXplZFN0cmluZ3NF
eHRyYWN0b3I6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmxvY2FsaXpl
ZF9zdHJpbmdzID0gW10KKworICAgIGRlZiBwcm9jZXNzX2ZpbGUoc2VsZiwgZmlsZV9wYXRoKToK
KyAgICAgICAgbG9jYWxpemVkX3N0cmluZ3NfZmlsZSA9IGNvZGVjcy5vcGVuKGZpbGVfcGF0aCwg
ZW5jb2Rpbmc9InV0Zi0xNiIsIG1vZGU9InIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBj
b250ZW50cyA9IGxvY2FsaXplZF9zdHJpbmdzX2ZpbGUucmVhZCgpCisgICAgICAgICAgICBsaW5l
cyA9IGNvbnRlbnRzLnNwbGl0KCJcbiIpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoK
KyAgICAgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHIibG9jYWxpemVkU3RyaW5nc1xbXCIo
KD86W15cIlxcXXxcXC4pKj8pXCIiLCBsaW5lKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgor
ICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2FsaXplZF9zdHJpbmdzLmFwcGVuZChtYXRjaC5n
cm91cCgxKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvY2FsaXplZF9zdHJpbmdz
X2ZpbGUuY2xvc2UoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGNvbmZpZ3Vy
ZV9sb2dnaW5nKCkKKworICAgIGNoZWNrb3V0ID0gZGV0ZWN0X2NoZWNrb3V0KCkKKyAgICBpZiBj
aGVja291dCBpcyBOb25lOgorICAgICAgICBfbG9nLmVycm9yKCJXZWJLaXQgY2hlY2tvdXQgbm90
IGZvdW5kOiBZb3UgbXVzdCBydW4gdGhpcyBzY3JpcHQgIgorICAgICAgICAgICAgICAgICAgICJm
cm9tIHdpdGhpbiBhIFdlYktpdCBjaGVja291dC4iKQorICAgICAgICBzeXMuZXhpdCgxKQorICAg
IGNoZWNrb3V0X3Jvb3QgPSBjaGVja291dC5yb290X3BhdGgoKQorICAgIF9sb2cuZGVidWcoIldl
YktpdCBjaGVja291dCBmb3VuZCB3aXRoIHJvb3Q6ICVzIiAlIGNoZWNrb3V0X3Jvb3QpCisgICAg
Y2hhbmdlX2RpcmVjdG9yeShjaGVja291dF9yb290PWNoZWNrb3V0X3Jvb3QsIHBhdGhzPU5vbmUp
CisKKyAgICBzdHJpbmdzX2V4dHJhY3RvciA9IFN0cmluZ3NFeHRyYWN0b3IoW3IiKD86V2ViSW5z
cGVjdG9yXC4oPzpVSVN0cmluZ3xmb3JtYXRMb2NhbGl6ZWQpXCh8L1wqQExTXCovKVwiKCg/Olte
XCJcXF18XFwuKSo/KVwiIiwgciJcIigoPzpbXlwiXFxdfFxcLikqPylcIiJdKQorICAgIGZpbGVf
cmVhZGVyID0gVGV4dEZpbGVSZWFkZXIoc3RyaW5nc19leHRyYWN0b3IpCisgICAgZmlsZV9yZWFk
ZXIucHJvY2Vzc19wYXRocyhbX2luc3BlY3Rvcl9kaXJlY3RvcnldKQorICAgIGxvY2FsaXplZF9z
dHJpbmdzX2V4dHJhY3RvciA9IExvY2FsaXplZFN0cmluZ3NFeHRyYWN0b3IoKQorICAgIGxvY2Fs
aXplZF9zdHJpbmdzX2V4dHJhY3Rvci5wcm9jZXNzX2ZpbGUoX2xvY2FsaXplZF9zdHJpbmdzKQor
ICAgIHVpX3N0cmluZ3MgPSBmcm96ZW5zZXQoc3RyaW5nc19leHRyYWN0b3Iuc3RyaW5nc1swXSkK
KyAgICBzdHJpbmdzID0gZnJvemVuc2V0KHN0cmluZ3NfZXh0cmFjdG9yLnN0cmluZ3NbMV0pCisg
ICAgbG9jYWxpemVkX3N0cmluZ3MgPSBmcm96ZW5zZXQobG9jYWxpemVkX3N0cmluZ3NfZXh0cmFj
dG9yLmxvY2FsaXplZF9zdHJpbmdzKQorCisgICAgbmV3X3N0cmluZ3MgPSB1aV9zdHJpbmdzIC0g
bG9jYWxpemVkX3N0cmluZ3MKKyAgICBmb3IgcyBpbiBuZXdfc3RyaW5nczoKKyAgICAgICAgX2xv
Zy5pbmZvKCJOZXc6IFwiJXNcIiIgJSAocykpCisgICAgb2xkX3N0cmluZ3MgPSBsb2NhbGl6ZWRf
c3RyaW5ncyAtIHVpX3N0cmluZ3MKKyAgICBzdXNwaWNpb3VzX3N0cmluZ3MgPSBzdHJpbmdzICYg
b2xkX3N0cmluZ3MKKyAgICBmb3IgcyBpbiBzdXNwaWNpb3VzX3N0cmluZ3M6CisgICAgICAgIF9s
b2cuaW5mbygiU3VzcGljaW91czogXCIlc1wiIiAlIChzKSkKKyAgICB1bnVzZWRfc3RyaW5ncyA9
IG9sZF9zdHJpbmdzIC0gc3RyaW5ncworICAgIGZvciBzIGluIHVudXNlZF9zdHJpbmdzOgorICAg
ICAgICBfbG9nLmluZm8oIlVudXNlZDogXCIlc1wiIiAlIChzKSkK
</data>
<flag name="review"
          id="70040"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="70041"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>