<?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>45085</bug_id>
          
          <creation_ts>2010-09-01 19:51:55 -0700</creation_ts>
          <short_desc>[WTFURL] Add a mechanism for classifying types of characters</short_desc>
          <delta_ts>2010-10-13 10:21:24 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>273174</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-01 19:51:55 -0700</bug_when>
    <thetext>[WTFURL] Add a mechanism for classifying types of characters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273176</commentid>
    <comment_count>1</comment_count>
      <attachid>66315</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-01 19:53:47 -0700</bug_when>
    <thetext>Created attachment 66315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293293</commentid>
    <comment_count>2</comment_count>
      <attachid>66315</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-10-13 00:32:20 -0700</bug_when>
    <thetext>Comment on attachment 66315
Patch

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

r=me If the above comments are addressed.

&gt; JavaScriptCore/wtf/url/src/URLCharacterTypes.cpp:37
&gt; +    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x00 - 0x0f
&gt; +    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x10 - 0x1f
&gt; +    0, // 0x20  &apos; &apos; (escape spaces in queries)

Not sure about this, but maybe instead of 0 for no flags, there should be a symbolic constant like InvalidCharacter.

&gt; JavaScriptCore/wtf/url/src/URLCharacterTypes.h:42
&gt; +    // Bits that identify different character types. These types identify different
&gt; +    // bits that are set for each 8-bit character in the characterTypeTable.

This comment seems redundant. The enum and its values are fairly self-documenting.

&gt; JavaScriptCore/wtf/url/src/URLCharacterTypes.h:50
&gt; +    enum CharTypes {
&gt; +      QueryCharacter = 1,
&gt; +      UserInfoCharacter = 2,
&gt; +      IPv4Character = 4,
&gt; +      HexCharacter = 8,
&gt; +      DecimalCharacter = 16,
&gt; +      OctalCharacter = 32,
&gt; +    };

WebKit convention is usually to use a shifted 1 as the value for enums that are meant to be used with masking (1 &lt;&lt; 0, 1 &lt;&lt; 1, 1 &lt;&lt; 2, etc).

Might also want to look at how the similar character classes are documented in KURL.cpp.

(On a personal note, I find it surprising that both URL parsers have a character flags table but have completely different classes!)

&gt; JavaScriptCore/wtf/url/src/URLCharacterTypes.h:58
&gt; +    // This table contains the flags in CharTypes for each 8-bit character.
&gt; +    // Some canonicalization functions have their own specialized lookup table.
&gt; +    // For those with simple requirements, we have collected the flags in one
&gt; +    // place so there are fewer lookup tables to load into the CPU cache.
&gt; +    //
&gt; +    // Using an unsigned char type has a small but measurable performance benefit
&gt; +    // over using a 32-bit number.

This comment seems overly verbose and the second part in particular is needless detail, unless there&apos;s a reason to believe someone would accidentally change the &quot;unsigned char&quot; to &quot;unsigned&quot;. If some of these details do need to be documented, then perhaps the comment should go in the implementation file, since this is a private static data member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293487</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-13 10:21:24 -0700</bug_when>
    <thetext>Committed r69669: &lt;http://trac.webkit.org/changeset/69669&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66315</attachid>
            <date>2010-09-01 19:53:47 -0700</date>
            <delta_ts>2010-10-13 00:32:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45085-20100901195346.patch</filename>
            <type>text/plain</type>
            <size>17100</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBlZmEyZWI0Yjk5NmU4NDkzNzA1ODA2NjNhZjgyNmRmOTg4ZDAwZTg2Li5h
NzhkZmQzMzlhZjcyNzdiOGI3Njc5ZjRkZTk5YzY4OGY3N2EzMGFlIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0y
LDYgKzIsMjQgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAg
ICAgICBbV1RGVVJMXSBBZGQgYSBtZWNoYW5pc20gZm9yIGNsYXNzaWZ5aW5nIHR5cGVzIG9mIGNo
YXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1MDg1CisKKyAgICAgICAgVmFyaW91cyBjaGFyYWN0ZXJzIGhhdmUgZGlmZmVyZW50IGVzY2Fw
aW5nIHJ1bGVzIGRlcGVuZGluZyBvbiB3aGVyZQorICAgICAgICB0aGV5IGFyZSBpbiBVUkxzLiAg
VGhpcyBwYXRjaCBhZGRzIGEgdGFibGUgY29udGFpbmluZyB0aGF0IGluZm9ybWF0aW9uLgorCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiB3dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5jcHA6IEFkZGVkLgorICAgICAgICAq
IHd0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpV
UkxDaGFyYWN0ZXJUeXBlczo6aXNRdWVyeUNoYXIpOgorICAgICAgICAoV1RGOjpVUkxDaGFyYWN0
ZXJUeXBlczo6aXNJUHY0Q2hhcik6CisgICAgICAgIChXVEY6OlVSTENoYXJhY3RlclR5cGVzOjpp
c0hleENoYXIpOgorICAgICAgICAoV1RGOjpVUkxDaGFyYWN0ZXJUeXBlczo6aXNDaGFyT2ZUeXBl
KToKKworMjAxMC0wOS0wMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEFjdHVhbGx5IHBhcnNl
IGEgVVJMIGZyb20gUGFyc2VkVVJMCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NTA4MAogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzNmViNDVlNDA2ZGQ2NTk2
MTNhMDIxNzUwOTVjYjRjYzE2ZGM4OWRjLi5kNTI1ZmMwNjI3YWVjMDU1MGVlZGM2MWZkMDhlOTBm
N2U1Y2MxZGE0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMwNiw2ICszMDYsOCBAQAogCQk5NzE0QUY1
RTEyMkYzMjA3MDA5MkQ5RjUgLyogUGFyc2VkVVJMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTRBRjU3MTIyRjMxRjUwMDkyRDlGNSAvKiBQYXJz
ZWRVUkwuY3BwICovOyB9OwogCQk5NzE0QUY1RjEyMkYzMjA3MDA5MkQ5RjUgLyogUGFyc2VkVVJM
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzE0QUY1
ODEyMkYzMUY1MDA5MkQ5RjUgLyogUGFyc2VkVVJMLmggKi87IH07CiAJCTk3MTRBRjYwMTIyRjMy
MDcwMDkyRDlGNSAvKiBVUkxTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTRBRjU5MTIyRjMxRjUwMDkyRDlGNSAvKiBVUkxTdHJpbmcuaCAq
LzsgfTsKKwkJOTcxNEIwOTkxMjJGNDdBNjAwOTJEOUY1IC8qIFVSTENoYXJhY3RlclR5cGVzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTRCMDk3
MTIyRjQ3OUYwMDkyRDlGNSAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgKi87IH07CisJCTk3MTRC
MDlBMTIyRjQ3QTYwMDkyRDlGNSAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxNEIwOTgxMjJGNDc5RjAwOTJEOUY1
IC8qIFVSTENoYXJhY3RlclR5cGVzLmggKi87IH07CiAJCTk3MUVERUE2MTE2OUUwRDMwMDVFNDI2
MiAvKiBUZXJtaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5N0Y2OTAzQTExNjlERjdGMDBBNkJCNDYgLyogVGVybWluYXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExNzEyQjNCMTFDN0Iy
MTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMTcxMkIzQTExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2Fj
aGUuY3BwICovOyB9OwogCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNzEyQjNF
MTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MzMsNiArOTM1LDggQEAKIAkJOTcxNEFGNTcx
MjJGMzFGNTAwOTJEOUY1IC8qIFBhcnNlZFVSTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBQYXJzZWRVUkwuY3BwOyBwYXRoID0gdXJsL2FwaS9QYXJzZWRVUkwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzE0QUY1ODEyMkYzMUY1MDA5MkQ5RjUg
LyogUGFyc2VkVVJMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBhcnNlZFVS
TC5oOyBwYXRoID0gdXJsL2FwaS9QYXJzZWRVUkwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTcxNEFGNTkxMjJGMzFGNTAwOTJEOUY1IC8qIFVSTFN0cmluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBVUkxTdHJpbmcuaDsgcGF0aCA9IHVybC9hcGkvVVJMU3Ry
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTRCMDk3MTIyRjQ3OUYwMDky
RDlGNSAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBVUkxDaGFyYWN0ZXJUeXBlcy5jcHA7IHBhdGggPSB1cmwvc3JjL1VSTENoYXJh
Y3RlclR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxNEIwOTgxMjJG
NDc5RjAwOTJEOUY1IC8qIFVSTENoYXJhY3RlclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFVSTENoYXJhY3RlclR5cGVzLmg7IHBhdGggPSB1cmwvc3JjL1VSTENoYXJh
Y3RlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3RjY5MDNBMTE2OURG
N0YwMEE2QkI0NiAvKiBUZXJtaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRlcm1pbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3MTJCM0Ex
MUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlZ0V4cENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTE3MTJCM0UxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ0V4cENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTM1LDYgKzE5MzksOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJOTcx
NEFGMzExMjJGMjdFNzAwOTJEOUY1IC8qIFJhd1VSTEJ1ZmZlci5oICovLAogCQkJCTk3MTRBRjMy
MTIyRjI3RTcwMDkyRDlGNSAvKiBVUkxCdWZmZXIuaCAqLywKKwkJCQk5NzE0QjA5NzEyMkY0NzlG
MDA5MkQ5RjUgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3BwICovLAorCQkJCTk3MTRCMDk4MTIyRjQ3
OUYwMDkyRDlGNSAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5oICovLAogCQkJCTk3MTRBRjMzMTIyRjI3
RTcwMDkyRDlGNSAvKiBVUkxDb21wb25lbnQuaCAqLywKIAkJCQk5NzE0QUYzNDEyMkYyN0U3MDA5
MkQ5RjUgLyogVVJMUGFyc2VyLmggKi8sCiAJCQkJOTcxNEFGMzUxMjJGMjdFNzAwOTJEOUY1IC8q
IFVSTFNlZ21lbnRzLmNwcCAqLywKQEAgLTIzMDMsNiArMjMwOSw3IEBACiAJCQkJOTcxNEFGNEYx
MjJGMjg5QTAwOTJEOUY1IC8qIFVSTFNlZ21lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzE0
QUY1RjEyMkYzMjA3MDA5MkQ5RjUgLyogUGFyc2VkVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NzE0QUY2MDEyMkYzMjA3MDA5MkQ5RjUgLyogVVJMU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk5NzE0QjA5QTEyMkY0N0E2MDA5MkQ5RjUgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtMjc1Niw2ICsyNzYzLDcgQEAKIAkJCQlBNzRERTFEMDEyMEI4NzU2MDBENDBE
NUIgLyogQVJNdjdBc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxNEFGNDYxMjJG
Mjg4NTAwOTJEOUY1IC8qIFVSTFNlZ21lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTRB
RjVFMTIyRjMyMDcwMDkyRDlGNSAvKiBQYXJzZWRVUkwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTcxNEIwOTkxMjJGNDdBNjAwOTJEOUY1IC8qIFVSTENoYXJhY3RlclR5cGVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3VybC9zcmMvVVJMQ2hhcmFj
dGVyVHlwZXMuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlw
ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM0NDRkYTE4MjRjYzYwYzgwMThlYzJlYTM4ODYzOTEzMmMwNzEw
ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvdXJsL3NyYy9VUkxDaGFy
YWN0ZXJUeXBlcy5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKy8vIENvcHlyaWdodCAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisv
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVVJMQ2hh
cmFjdGVyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIg
VVJMQ2hhcmFjdGVyVHlwZXM6OmNoYXJhY3RlclR5cGVUYWJsZVsweDEwMF0gPSB7CisgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgLy8gMHgwMCAtIDB4
MGYKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAv
LyAweDEwIC0gMHgxZgorICAgIDAsIC8vIDB4MjAgICcgJyAoZXNjYXBlIHNwYWNlcyBpbiBxdWVy
aWVzKQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjEgICEK
KyAgICAwLCAvLyAweDIyICAiCisgICAgMCwgLy8gMHgyMyAgIyAgKGludmFsaWQgaW4gcXVlcnkg
c2luY2UgaXQgbWFya3MgdGhlIHJlZikKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyLCAvLyAweDI0ICAkCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciwgLy8gMHgyNSAgJQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8v
IDB4MjYgICYKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDI3
ICAnCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyOCAgKAor
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjkgICkKKyAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDJhICAqCisgICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgyYiAgKworICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MmMgICwKKyAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDJkICAtCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIsIC8vIDB4MmUgIC4KKyAgICBRdWVyeUNoYXJh
Y3RlciwgLy8gMHgyZiAgLworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFs
Q2hhcmFjdGVyLCAvLyAweDMwICAwCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwg
T2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzEgIDEKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0
ZXIgfCBPY3RhbENoYXJhY3RlciwgLy8gMHgzMiAgMgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyIHwgRGVjaW1hbENo
YXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyLCAvLyAweDMzICAzCisgICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIgfCBEZWNp
bWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzQgIDQKKyAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciB8
IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciwgLy8gMHgzNSAgNQorICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFj
dGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyLCAvLyAweDM2ICA2CisgICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhD
aGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIsIC8vIDB4MzcgIDcK
KyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8
IEhleENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIsIC8vIDB4MzggIDgKKyAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3Rl
ciB8IERlY2ltYWxDaGFyYWN0ZXIsIC8vIDB4MzkgIDkKKyAgICBRdWVyeUNoYXJhY3RlciwgLy8g
MHgzYSAgOgorICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDNiICA7CisgICAgMCwgLy8gMHgzYyAg
PAorICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDNkICA9CisgICAgMCwgLy8gMHgzZSAgPgorICAg
IFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDNmICA/CisgICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4NDAg
IEAKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3Rl
ciB8IEhleENoYXJhY3RlciwgLy8gMHg0MSAgQQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDQyICBCCisg
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBI
ZXhDaGFyYWN0ZXIsIC8vIDB4NDMgIEMKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg0NCAgRAorICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hh
cmFjdGVyLCAvLyAweDQ1ICBFCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NDYgIEYKKyAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDQ3ICBHCisgICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg0OCAgSAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NDkgIEkKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyLCAvLyAweDRhICBKCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciwgLy8gMHg0YiAgSworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIsIC8vIDB4NGMgIEwKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAv
LyAweDRkICBNCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg0
ZSAgTgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NGYgIE8K
KyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDUwICBQCisgICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1MSAgUQorICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NTIgIFIKKyAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDUzICBTCisgICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg1NCAgVAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIsIC8vIDB4NTUgIFUKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyLCAvLyAweDU2ICBWCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciwgLy8gMHg1NyAgVworICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBJUHY0Q2hhcmFjdGVyLCAvLyAweDU4ICBYCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciwgLy8gMHg1OSAgWQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIsIC8vIDB4NWEgIFoKKyAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg1YiAgWworICAgIFF1
ZXJ5Q2hhcmFjdGVyLCAvLyAweDVjICAnXCcKKyAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg1ZCAg
XQorICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDVlICBeCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciwgLy8gMHg1ZiAgXworICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDYw
ICBgCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0
ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NjEgIGEKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENoYXJhY3RlciwgLy8gMHg2MiAgYgor
ICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwg
SGV4Q2hhcmFjdGVyLCAvLyAweDYzICBjCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhDaGFyYWN0ZXIsIC8vIDB4NjQgIGQKKyAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleENo
YXJhY3RlciwgLy8gMHg2NSAgZQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4Q2hhcmFjdGVyLCAvLyAweDY2ICBmCisgICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg2NyAgZworICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NjggIGgKKyAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDY5ICBpCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciwgLy8gMHg2YSAgagorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIsIC8vIDB4NmIgIGsKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyLCAvLyAweDZjICBsCisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rlciwg
Ly8gMHg2ZCAgbQorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4
NmUgIG4KKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDZmICBv
CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3MCAgcAorICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzEgIHEKKyAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDcyICByCisgICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3MyAgcworICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4NzQgIHQKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDc1ICB1CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciwgLy8gMHg3NiAgdgorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIsIC8vIDB4NzcgIHcKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgSVB2NENoYXJhY3RlciwgLy8gMHg3OCAgeAorICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIsIC8vIDB4NzkgIHkKKyAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyLCAvLyAweDdhICB6CisgICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4N2IgIHsKKyAgICBR
dWVyeUNoYXJhY3RlciwgLy8gMHg3YyAgfAorICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDdkICB9
CisgICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHg3ZSAgfgorICAg
IDAsIC8vIDB4N2YKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAvLyAweDgwIC0gMHg4ZgorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIC8vIDB4OTAgLSAweDlmCisgICAgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgLy8gMHhhMCAtIDB4YWYKKyAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAvLyAweGIwIC0gMHhiZgor
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC8vIDB4
YzAgLSAweGNmCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgLy8gMHhkMCAtIDB4ZGYKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAvLyAweGUwIC0gMHhlZgorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC8vIDB4ZjAgLSAweGZmCit9OworCit9CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5oIGIv
SmF2YVNjcmlwdENvcmUvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NjJiOGM2YmRmNGI3ODczNDg4OWVjYjU1MGJmMDk0NTE4YTNhNGU5Ci0tLSAvZGV2L251bGwK
KysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuaApAQCAt
MCwwICsxLDY5IEBACisvLyBDb3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8v
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
Ky8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
I2lmbmRlZiBVUkxDaGFyYWN0ZXJUeXBlc19oCisjZGVmaW5lIFVSTENoYXJhY3RlclR5cGVzX2gK
KworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFVSTENoYXJhY3RlclR5cGVzIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNRdWVyeUNoYXIodW5zaWduZWQgY2hhciBjKSB7IHJl
dHVybiBpc0NoYXJPZlR5cGUoYywgUXVlcnlDaGFyYWN0ZXIpOyB9CisgICAgc3RhdGljIGlubGlu
ZSBib29sIGlzSVB2NENoYXIodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiBpc0NoYXJPZlR5cGUo
YywgSVB2NENoYXJhY3Rlcik7IH0KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNIZXhDaGFyKHVu
c2lnbmVkIGNoYXIgYykgeyByZXR1cm4gaXNDaGFyT2ZUeXBlKGMsIEhleENoYXJhY3Rlcik7IH0K
KworcHJpdmF0ZToKKyAgICAvLyBCaXRzIHRoYXQgaWRlbnRpZnkgZGlmZmVyZW50IGNoYXJhY3Rl
ciB0eXBlcy4gVGhlc2UgdHlwZXMgaWRlbnRpZnkgZGlmZmVyZW50CisgICAgLy8gYml0cyB0aGF0
IGFyZSBzZXQgZm9yIGVhY2ggOC1iaXQgY2hhcmFjdGVyIGluIHRoZSBjaGFyYWN0ZXJUeXBlVGFi
bGUuCisgICAgZW51bSBDaGFyVHlwZXMgeworICAgICAgUXVlcnlDaGFyYWN0ZXIgPSAxLAorICAg
ICAgVXNlckluZm9DaGFyYWN0ZXIgPSAyLAorICAgICAgSVB2NENoYXJhY3RlciA9IDQsCisgICAg
ICBIZXhDaGFyYWN0ZXIgPSA4LAorICAgICAgRGVjaW1hbENoYXJhY3RlciA9IDE2LAorICAgICAg
T2N0YWxDaGFyYWN0ZXIgPSAzMiwKKyAgICB9OworCisgICAgLy8gVGhpcyB0YWJsZSBjb250YWlu
cyB0aGUgZmxhZ3MgaW4gQ2hhclR5cGVzIGZvciBlYWNoIDgtYml0IGNoYXJhY3Rlci4KKyAgICAv
LyBTb21lIGNhbm9uaWNhbGl6YXRpb24gZnVuY3Rpb25zIGhhdmUgdGhlaXIgb3duIHNwZWNpYWxp
emVkIGxvb2t1cCB0YWJsZS4KKyAgICAvLyBGb3IgdGhvc2Ugd2l0aCBzaW1wbGUgcmVxdWlyZW1l
bnRzLCB3ZSBoYXZlIGNvbGxlY3RlZCB0aGUgZmxhZ3MgaW4gb25lCisgICAgLy8gcGxhY2Ugc28g
dGhlcmUgYXJlIGZld2VyIGxvb2t1cCB0YWJsZXMgdG8gbG9hZCBpbnRvIHRoZSBDUFUgY2FjaGUu
CisgICAgLy8KKyAgICAvLyBVc2luZyBhbiB1bnNpZ25lZCBjaGFyIHR5cGUgaGFzIGEgc21hbGwg
YnV0IG1lYXN1cmFibGUgcGVyZm9ybWFuY2UgYmVuZWZpdAorICAgIC8vIG92ZXIgdXNpbmcgYSAz
Mi1iaXQgbnVtYmVyLgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlclR5
cGVUYWJsZVsweDEwMF07CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNDaGFyT2ZUeXBlKHVu
c2lnbmVkIGNoYXIgYywgQ2hhclR5cGVzIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gISEo
Y2hhcmFjdGVyVHlwZVRhYmxlW2NdICYgdHlwZSk7CisgICAgfQorfTsKKworfQorCisjZW5kaWYK
</data>
<flag name="review"
          id="55299"
          type_id="1"
          status="+"
          setter="mjs"
    />
    <flag name="commit-queue"
          id="55300"
          type_id="3"
          status="-"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>