<?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>227244</bug_id>
          
          <creation_ts>2021-06-21 16:53:31 -0700</creation_ts>
          <short_desc>Replace builder.append(String::fromUTF8(...)) uses with a more efficient new StringTypeAdapter</short_desc>
          <delta_ts>2021-07-05 09:08:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1771533</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-21 16:53:31 -0700</bug_when>
    <thetext>A few places in WebCore use builder.append(String::fromUTF8(...)) to add UTF8 content to a StringBuilder. This makes an extra String allocation per call and can be improved by adding a StringTypeAdapter for this use case to directly convert into the StringBuilder&apos;s buffer. Something like:

struct FromUTF8Converter {
    Span&lt;const std::byte&gt; buffer;
};

inline FromUTF8Converter fromUTF8(Span&lt;const std::byte&gt; buffer)
{
    return { buffer };
}

template&lt;&gt; class StringTypeAdapter&lt;FromUTF8Converter, void&gt; {
public:
    StringTypeAdapter(const FromUTF8Converter&amp; converter)
        : m_converter { converter }
    {
        auto [utf16StringLength, isAllASCII] = computeUTF16StringLengthAreAllASCII(m_converter.buffer.data(), m_converter.buffer.size()) }

        m_utf16StringLength = utf16StringLength;
        m_isAllASCII = isAllASCII;
    }

    unsigned length() const
    { 
        if (m_isAllASCII)
            return m_converter.buffer.size();
        return m_utf16StringLength;
    }

    bool is8Bit() const { return m_isAllASCII; }
    
    void writeTo(LChar* destination) const
    {
        ASSERT(m_isAllASCII);
        memcpy(destination, m_converter.buffer.data(), m_converter.buffer.data() + m_converter.buffer.size(), );
    }

    void writeTo(UChar* destination) const
    {
        convertUTF8ToUTF16(m_converter.buffer.data(), m_converter.buffer.size(), destination, destination + m_utf16StringLength);
    }

private:
    const FromUTF8Converter&amp; m_converter;
    unsigned m_utf16StringLength;
    bool m_isAllASCII;
};


...


builder.append(fromUTF8(data));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771972</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-23 09:35:31 -0700</bug_when>
    <thetext>Great idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771973</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-23 09:36:31 -0700</bug_when>
    <thetext>Once we do this we could use this with makeString too, so we don’t really need String::fromUTF8 any more (although of course we can keep it); using it with makeString is more flexible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773269</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-28 16:54:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/79888871&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774819</commentid>
    <comment_count>4</comment_count>
      <attachid>432888</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-07-05 08:55:52 -0700</bug_when>
    <thetext>Created attachment 432888
Patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432888</attachid>
            <date>2021-07-05 08:55:52 -0700</date>
            <delta_ts>2021-07-05 09:08:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227244-20210705085551.patch</filename>
            <type>text/plain</type>
            <size>22699</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc5NTI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDIxLTA3LTA1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXBsYWNlIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoLi4uKSkgdXNlcyB3aXRoIGEg
bW9yZSBlZmZpY2llbnQgbmV3IFN0cmluZ1R5cGVBZGFwdGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyNDQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzc5ODg4ODcxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVwZGF0ZSBjYWxsZXJzIHBhc3NpbmcgU3RyaW5nOjpmcm9tVVRGOCgpIHRvIG1ha2VT
dHJpbmcgdG8gdXNlIG5ldworICAgICAgICBtb3JlIGVmZmljaWVudCBtYWtlU3RyaW5nKGZyb21V
VEY4KC4uLikpIGhlbHBlciBpbnN0ZWFkLgorCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRy
eUNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6
CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rSW1wbCk6CisKIDIw
MjEtMDctMDIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIDEwIG1vcmUgdW5pZmllZCBzb3VyY2UgY3BwIGZpbGVzIGZvciBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmNwcAkocmV2aXNpb24gMjc5NTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcg
KzE3Miw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3QKICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVFdmFsRXJyb3IoZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwogCiAgICAgYXV0byBp
bXBvcnRGYWlsTWVzc2FnZSA9IFsmXSAoY29uc3QgV2FzbTo6SW1wb3J0JiBpbXBvcnQsIGNvbnN0
IGNoYXIqIGJlZm9yZSwgY29uc3QgY2hhciogYWZ0ZXIpIHsKLSAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoYmVmb3JlLCAiICIsIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0Lm1vZHVsZSksICI6Iiwg
U3RyaW5nOjpmcm9tVVRGOChpbXBvcnQuZmllbGQpLCAiICIsIGFmdGVyKTsKKyAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoYmVmb3JlLCAnICcsIGZyb21VVEY4KGltcG9ydC5tb2R1bGUpLCAiOiIs
IGZyb21VVEY4KGltcG9ydC5maWVsZCksICcgJywgYWZ0ZXIpOwogICAgIH07CiAKICAgICBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwgbW9kdWxlSW5mb3JtYXRpb24pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjc5NTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlua0lt
cGwoSgogICAgIH07CiAKICAgICBhdXRvIGltcG9ydEZhaWxNZXNzYWdlID0gWyZdIChjb25zdCBX
YXNtOjpJbXBvcnQmIGltcG9ydCwgY29uc3QgY2hhciogYmVmb3JlLCBjb25zdCBjaGFyKiBhZnRl
cikgewotICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhiZWZvcmUsICIgIiwgU3RyaW5nOjpmcm9t
VVRGOChpbXBvcnQubW9kdWxlKSwgIjoiLCBTdHJpbmc6OmZyb21VVEY4KGltcG9ydC5maWVsZCks
ICIgIiwgYWZ0ZXIpOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhiZWZvcmUsICcgJywgZnJv
bVVURjgoaW1wb3J0Lm1vZHVsZSksICc6JywgZnJvbVVURjgoaW1wb3J0LmZpZWxkKSwgJyAnLCBh
ZnRlcik7CiAgICAgfTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgaW1wb3J0IDogbW9kdWxlSW5m
b3JtYXRpb24uaW1wb3J0cykgewpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3OTUyNSkKKysrIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMjEtMDctMDUg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgYnVpbGRl
ci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOCguLi4pKSB1c2VzIHdpdGggYSBtb3JlIGVmZmljaWVu
dCBuZXcgU3RyaW5nVHlwZUFkYXB0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNzI0NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzk4ODg4NzE+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG5l
dyBTdHJpbmdUeXBlQWRhcHRvciBmb3IgY29udmVydGluZyBVVEYtOCBidWZmZXJzIHRvIHdvcmsg
d2l0aCBTdHJpbmcuCisgICAgICAgIEJvdGggZnJvbVVURjggYW5kIGZyb21VVEY4UmVwbGFjaW5n
SW52YWxpZFNlcXVlbmNlcyB2YXJpYW50cyBhcmUgc3VwcG9ydGVkCisgICAgICAgIGFuZCBTdHJp
bmc6OmZyb21VVEY4IGFuZCBTdHJpbmc6OmZyb21VVEY4UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNl
cyBhcmUgbm93CisgICAgICAgIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIG1ha2VTdHJpbmcoKS4K
KworICAgICAgICBUZXN0cyBhZGRlZCB0byBUZXN0V2ViS2l0QVBJLgorCisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaDoKKyAgICAgICAgKFdURjo6ZnJvbVVURjgpOgorICAg
ICAgICAoV1RGOjpmcm9tVVRGOFJlcGxhY2luZ0ludmFsaWRTZXF1ZW5jZXMpOgorICAgICAgICBB
ZGQgU3RyaW5nVHlwZUFkYXB0b3IgZm9yIFVURjhDb252ZXJ0ZXJNb2RlIHdoaWNoIGNhbiBiZSB1
c2VkIHZpYSBmcm9tVVRGOCgpIAorICAgICAgICBhbmQgZnJvbVVURjhSZXBsYWNpbmdJbnZhbGlk
U2VxdWVuY2VzKCkgaGVscGVycy4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6
CisgICAgICAgIChXVEY6OlN0cmluZzo6ZnJvbVVURjgpOgorICAgICAgICAoV1RGOjpTdHJpbmc6
OmZyb21VVEY4UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNlcyk6CisgICAgICAgIChXVEY6OmZyb21V
VEY4SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIFJlcGxhY2UgaW1wbGVtZW50YXRpb24gb2YgZnJv
bVVURjggd2l0aCBjYWxscyB0byBtYWtlU3RyaW5nKGZyb21VVEY4KC4uLikpCisgICAgICAgIGFu
ZCBtYWtlU3RyaW5nKGZyb21VVEY4UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNlcyguLi4pKS4KKwor
ICAgICAgICAqIHd0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdURjo6
VW5pY29kZTo6Y2FsY3VsYXRlVVRGMTZTdHJpbmdMZW5ndGhBbmRBcmVBbGxBU0NJSUZyb21VVEY4
KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Y2FsY3VsYXRlVVRGMTZTdHJpbmdMZW5ndGhBbmRB
cmVBbGxBU0NJSUZyb21VVEY4UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNlcyk6CisgICAgICAgICog
d3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24uaDoKKyAgICAgICAgQWRkIG5ldyBoZWxwZXJzIHRv
IGNhbGN1bGF0ZSBqdXN0IHdoYXQgaXMgbmVlZGVkIGZvciBTdHJpbmdUeXBlQWRhcHRvciBjb252
ZXJzaW9ucy4KKwogMjAyMS0wNy0wMiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBbbWFjT1NdIE9ubHkgdXNlIFdlYkdMIG9uIE1ldGFsIGJ5IGRlZmF1bHQg
b24gc2FmZSB2ZXJzaW9ucyBvZiBtYWNPUwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaAkocmV2aXNpb24gMjc5NTI1KQorKysgU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYv
dW5pY29kZS9VVEY4Q29udmVyc2lvbi5oPgogCiAvLyBUaGlzIG1hY3JvIGlzIGhlbHBmdWwgZm9y
IHRlc3RpbmcgaG93IG1hbnkgaW50ZXJtZWRpYXRlIFN0cmluZ3MgYXJlIGNyZWF0ZWQgd2hpbGUg
ZXZhbHVhdGluZyBhbgogLy8gZXhwcmVzc2lvbiBjb250YWluaW5nIG9wZXJhdG9yKy4KQEAgLTQw
MSw2ICs0MDIsMTE0IEBAIHByaXZhdGU6CiAgICAgY29uc3QgQVNDSUlDYXNlQ29udmVydGVyJiBt
X2NvbnZlcnRlcjsKIH07CiAKK2VudW0gY2xhc3MgVVRGOENvbnZlcnRlck1vZGUgeworICAgIE5v
cm1hbCwKKyAgICBSZXBsYWNpbmdJbnZhbGlkU2VxdWVuY2VzCit9OworCit0ZW1wbGF0ZTxVVEY4
Q29udmVydGVyTW9kZSBtb2RlPgorc3RydWN0IEZyb21VVEY4Q29udmVydGVyIHsKKyAgICBTcGFu
PGNvbnN0IGNoYXI+IGJ1ZmZlcjsKK307CisKK2lubGluZSBGcm9tVVRGOENvbnZlcnRlcjxVVEY4
Q29udmVydGVyTW9kZTo6Tm9ybWFsPiBmcm9tVVRGOChjb25zdCBMQ2hhciogYnVmZmVyLCBzaXpl
X3QgbGVuZ3RoKQoreworICAgIHJldHVybiB7eyByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihidWZmZXIpLCBsZW5ndGggfX07Cit9CisKK2lubGluZSBGcm9tVVRGOENvbnZlcnRlcjxVVEY4
Q29udmVydGVyTW9kZTo6Tm9ybWFsPiBmcm9tVVRGOChjb25zdCBMQ2hhciogYnVmZmVyKQorewor
ICAgIHJldHVybiB7eyByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCBzdHJs
ZW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSkgfX07Cit9CisKK2lubGlu
ZSBGcm9tVVRGOENvbnZlcnRlcjxVVEY4Q29udmVydGVyTW9kZTo6Tm9ybWFsPiBmcm9tVVRGOChj
b25zdCBjaGFyKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIHt7IGJ1ZmZl
ciwgbGVuZ3RoIH19OworfQorCitpbmxpbmUgRnJvbVVURjhDb252ZXJ0ZXI8VVRGOENvbnZlcnRl
ck1vZGU6Ok5vcm1hbD4gZnJvbVVURjgoY29uc3QgY2hhciogYnVmZmVyKQoreworICAgIHJldHVy
biB7eyBidWZmZXIsIHN0cmxlbihidWZmZXIpIH19OworfQorCitpbmxpbmUgRnJvbVVURjhDb252
ZXJ0ZXI8VVRGOENvbnZlcnRlck1vZGU6Ok5vcm1hbD4gZnJvbVVURjgoY29uc3QgQ1N0cmluZyYg
c3RyaW5nKQoreworICAgIHJldHVybiB7eyBzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkg
fX07Cit9CisKK2lubGluZSBGcm9tVVRGOENvbnZlcnRlcjxVVEY4Q29udmVydGVyTW9kZTo6UmVw
bGFjaW5nSW52YWxpZFNlcXVlbmNlcz4gZnJvbVVURjhSZXBsYWNpbmdJbnZhbGlkU2VxdWVuY2Vz
KGNvbnN0IExDaGFyKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIHt7IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGxlbmd0aCB9fTsKK30KKworaW5s
aW5lIEZyb21VVEY4Q29udmVydGVyPFVURjhDb252ZXJ0ZXJNb2RlOjpSZXBsYWNpbmdJbnZhbGlk
U2VxdWVuY2VzPiBmcm9tVVRGOFJlcGxhY2luZ0ludmFsaWRTZXF1ZW5jZXMoY29uc3QgTENoYXIq
IGJ1ZmZlcikKK3sKKyAgICByZXR1cm4ge3sgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
YnVmZmVyKSwgc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlcikpIH19
OworfQorCitpbmxpbmUgRnJvbVVURjhDb252ZXJ0ZXI8VVRGOENvbnZlcnRlck1vZGU6OlJlcGxh
Y2luZ0ludmFsaWRTZXF1ZW5jZXM+IGZyb21VVEY4UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNlcyhj
b25zdCBjaGFyKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIHt7IGJ1ZmZl
ciwgbGVuZ3RoIH19OworfQorCitpbmxpbmUgRnJvbVVURjhDb252ZXJ0ZXI8VVRGOENvbnZlcnRl
ck1vZGU6OlJlcGxhY2luZ0ludmFsaWRTZXF1ZW5jZXM+IGZyb21VVEY4UmVwbGFjaW5nSW52YWxp
ZFNlcXVlbmNlcyhjb25zdCBjaGFyKiBidWZmZXIpCit7CisgICAgcmV0dXJuIHt7IGJ1ZmZlciwg
c3RybGVuKGJ1ZmZlcikgfX07Cit9CisKK2lubGluZSBGcm9tVVRGOENvbnZlcnRlcjxVVEY4Q29u
dmVydGVyTW9kZTo6UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNlcz4gZnJvbVVURjhSZXBsYWNpbmdJ
bnZhbGlkU2VxdWVuY2VzKGNvbnN0IENTdHJpbmcmIHN0cmluZykKK3sKKyAgICByZXR1cm4ge3sg
c3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpIH19OworfQorCit0ZW1wbGF0ZTxVVEY4Q29u
dmVydGVyTW9kZSBtb2RlPiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxGcm9tVVRGOENvbnZlcnRl
cjxtb2RlPiwgdm9pZD4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEZy
b21VVEY4Q29udmVydGVyPG1vZGU+JiBjb252ZXJ0ZXIpCisgICAgICAgIDogbV9jb252ZXJ0ZXIg
eyBjb252ZXJ0ZXIgfQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IFVURjhD
b252ZXJ0ZXJNb2RlOjpOb3JtYWwpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IFVu
aWNvZGU6OmNhbGN1bGF0ZVVURjE2U3RyaW5nTGVuZ3RoQW5kQXJlQWxsQVNDSUlGcm9tVVRGOCht
X2NvbnZlcnRlci5idWZmZXIuZGF0YSgpLCBtX2NvbnZlcnRlci5idWZmZXIuZGF0YSgpICsgbV9j
b252ZXJ0ZXIuYnVmZmVyLnNpemUoKSkpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnRpZShtX2xl
bmd0aCwgbV9pczhCaXQpID0gKnJlc3VsdDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1faXM4
Qml0IHx8IG1fbGVuZ3RoID09IG1fY29udmVydGVyLmJ1ZmZlci5zaXplKCkpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJbnB1dCB3aXRoIGludmFsaWQgVVRGLTgg
c2VxdWVuY2VzIGFyZSB0cmVhdGVkIGFzIDAtbGVuZ3RoIHN0cmluZ3MuCisgICAgICAgICAgICAg
ICAgbV9sZW5ndGggPSAwOworICAgICAgICAgICAgICAgIG1faXM4Qml0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGQ6OnRpZShtX2xlbmd0aCwg
bV9pczhCaXQpID0gVW5pY29kZTo6Y2FsY3VsYXRlVVRGMTZTdHJpbmdMZW5ndGhBbmRBcmVBbGxB
U0NJSUZyb21VVEY4UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNlcyhtX2NvbnZlcnRlci5idWZmZXIu
ZGF0YSgpLCBtX2NvbnZlcnRlci5idWZmZXIuZGF0YSgpICsgbV9jb252ZXJ0ZXIuYnVmZmVyLnNp
emUoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9s
ZW5ndGg7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0OyB9Cisg
ICAgCisgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2lzOEJpdCk7CisgICAgICAgIGlmIChtX2xlbmd0aCkgeworICAgICAg
ICAgICAgQVNTRVJUKG1fbGVuZ3RoID09IG1fY29udmVydGVyLmJ1ZmZlci5zaXplKCkpOworICAg
ICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2NvbnZlcnRlci5idWZmZXIuZGF0YSgpLCBt
X2NvbnZlcnRlci5idWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
d3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBpZiBjb25z
dGV4cHIgKG1vZGUgPT0gVVRGOENvbnZlcnRlck1vZGU6Ok5vcm1hbCkgeworICAgICAgICAgICAg
Ym9vbCByZXN1bHQgPSBVbmljb2RlOjpjb252ZXJ0VVRGOFRvVVRGMTYobV9jb252ZXJ0ZXIuYnVm
ZmVyLmRhdGEoKSwgbV9jb252ZXJ0ZXIuYnVmZmVyLmRhdGEoKSArIG1fY29udmVydGVyLmJ1ZmZl
ci5zaXplKCksICZkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24gKyBtX2xlbmd0aCk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYm9vbCByZXN1bHQgPSBVbmljb2RlOjpjb252ZXJ0VVRGOFRvVVRGMTZSZXBsYWNpbmdJbnZh
bGlkU2VxdWVuY2VzKG1fY29udmVydGVyLmJ1ZmZlci5kYXRhKCksIG1fY29udmVydGVyLmJ1ZmZl
ci5kYXRhKCkgKyBtX2NvbnZlcnRlci5idWZmZXIuc2l6ZSgpLCAmZGVzdGluYXRpb24sIGRlc3Rp
bmF0aW9uICsgbV9sZW5ndGgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
KyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBGcm9tVVRGOENvbnZlcnRl
cjxtb2RlPiYgbV9jb252ZXJ0ZXI7CisgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgYm9vbCBt
X2lzOEJpdDsKK307CisKKwogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRlcj4KIGlubGluZSBib29s
IGFyZThCaXQoQWRhcHRlciBhZGFwdGVyKQogewpAQCAtNDc2LDkgKzU4NSwxMSBAQCBTdHJpbmcg
bWFrZVN0cmluZyhTdHJpbmdUeXBlcy4uLiBzdHJpbmdzCiAKIHVzaW5nIFdURjo6SW5kZW50YXRp
b247CiB1c2luZyBXVEY6OkluZGVudGF0aW9uU2NvcGU7Cit1c2luZyBXVEY6OmZyb21VVEY4Owor
dXNpbmcgV1RGOjpmcm9tVVRGOFJlcGxhY2luZ0ludmFsaWRTZXF1ZW5jZXM7Cit1c2luZyBXVEY6
Omxvd2VyY2FzZTsKIHVzaW5nIFdURjo6bWFrZVN0cmluZzsKIHVzaW5nIFdURjo6cGFkOwotdXNp
bmcgV1RGOjpsb3dlcmNhc2U7CiB1c2luZyBXVEY6OnRyeU1ha2VTdHJpbmc7CiB1c2luZyBXVEY6
OnVwcGVyY2FzZTsKIApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkocmV2aXNpb24g
Mjc5NTI1KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+
CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KICNpbmNsdWRlIDx3dGYv
dW5pY29kZS9VVEY4Q29udmVyc2lvbi5oPgpAQCAtNzIzLDQzICs3MjQsMTQgQEAgU3RyaW5nIFN0
cmluZzo6bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UoYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXRlbXBsYXRlPGJvb2wgcmVwbGFjZUludmFsaWRTZXF1ZW5jZXM+Ci1TdHJpbmcgZnJvbVVURjhJ
bXBsKGNvbnN0IExDaGFyKiBzdHJpbmdTdGFydCwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBpZiAo
bGVuZ3RoID4gU3RyaW5nSW1wbFNoYXBlOjpNYXhMZW5ndGgpCi0gICAgICAgIENSQVNIKCk7Ci0K
LSAgICBpZiAoIXN0cmluZ1N0YXJ0KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBpZiAoY2hh
cmFjdGVyc0FyZUFsbEFTQ0lJKHN0cmluZ1N0YXJ0LCBsZW5ndGgpKQotICAgICAgICByZXR1cm4g
U3RyaW5nSW1wbDo6Y3JlYXRlKHN0cmluZ1N0YXJ0LCBsZW5ndGgpOwotCi0gICAgVmVjdG9yPFVD
aGFyLCAxMDI0PiBidWZmZXIobGVuZ3RoKTsKLSAgICBVQ2hhciogYnVmZmVyU3RhcnQgPSBidWZm
ZXIuZGF0YSgpOwotIAotICAgIFVDaGFyKiBidWZmZXJDdXJyZW50ID0gYnVmZmVyU3RhcnQ7Ci0g
ICAgY29uc3QgY2hhciogc3RyaW5nQ3VycmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KHN0cmluZ1N0YXJ0KTsKLSAgICBjb25zdGV4cHIgYXV0byBmdW5jdGlvbiA9IHJlcGxhY2VJ
bnZhbGlkU2VxdWVuY2VzID8gY29udmVydFVURjhUb1VURjE2UmVwbGFjaW5nSW52YWxpZFNlcXVl
bmNlcyA6IGNvbnZlcnRVVEY4VG9VVEYxNjsKLSAgICBpZiAoIWZ1bmN0aW9uKHN0cmluZ0N1cnJl
bnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZ1N0YXJ0ICsgbGVuZ3RoKSwg
JmJ1ZmZlckN1cnJlbnQsIGJ1ZmZlckN1cnJlbnQgKyBidWZmZXIuc2l6ZSgpLCBudWxscHRyKSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgdW5zaWduZWQgdXRmMTZMZW5ndGggPSBi
dWZmZXJDdXJyZW50IC0gYnVmZmVyU3RhcnQ7Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTih1dGYxNkxlbmd0aCA8PSBsZW5ndGgpOwotICAgIHJldHVybiBTdHJp
bmdJbXBsOjpjcmVhdGUoYnVmZmVyU3RhcnQsIHV0ZjE2TGVuZ3RoKTsKLX0KLQogU3RyaW5nIFN0
cmluZzo6ZnJvbVVURjgoY29uc3QgTENoYXIqIHN0cmluZ1N0YXJ0LCBzaXplX3QgbGVuZ3RoKQog
ewotICAgIHJldHVybiBmcm9tVVRGOEltcGw8ZmFsc2U+KHN0cmluZ1N0YXJ0LCBsZW5ndGgpOwor
ICAgIHJldHVybiBtYWtlU3RyaW5nKFdURjo6ZnJvbVVURjgoc3RyaW5nU3RhcnQsIGxlbmd0aCkp
OwogfQogCiBTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOFJlcGxhY2luZ0ludmFsaWRTZXF1ZW5jZXMo
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGZy
b21VVEY4SW1wbDx0cnVlPihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIHJldHVybiBtYWtlU3Ry
aW5nKFdURjo6ZnJvbVVURjhSZXBsYWNpbmdJbnZhbGlkU2VxdWVuY2VzKGNoYXJhY3RlcnMsIGxl
bmd0aCkpOwogfQogCiBTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOChjb25zdCBMQ2hhciogc3RyaW5n
KQpAQCAtNzcxLDcgKzc0Myw3IEBAIFN0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNvbnN0IExDaGFy
KiBzdHIKIAogU3RyaW5nIFN0cmluZzo6ZnJvbVVURjgoY29uc3QgQ1N0cmluZyYgcykKIHsKLSAg
ICByZXR1cm4gZnJvbVVURjgocy5kYXRhKCkpOworICAgIHJldHVybiBmcm9tVVRGOChzLmRhdGEo
KSwgcy5sZW5ndGgoKSk7CiB9CiAKIFN0cmluZyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZh
bGxiYWNrKGNvbnN0IExDaGFyKiBzdHJpbmcsIHNpemVfdCBzaXplKQpJbmRleDogU291cmNlL1dU
Ri93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI3OTUyNSkKKysrIFNv
dXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUsNiArMTU1LDYyIEBAIHVuc2lnbmVkIGNhbGN1bGF0ZVN0cmluZ0hhc2hBbmRMZW5ndGhG
cm8KICAgICByZXR1cm4gc3RyaW5nSGFzaGVyLmhhc2hXaXRoVG9wOEJpdHNNYXNrZWQoKTsKIH0K
IAorc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+PiBjYWxjdWxhdGVVVEYx
NlN0cmluZ0xlbmd0aEFuZEFyZUFsbEFTQ0lJRnJvbVVURjgoY29uc3QgY2hhciogZGF0YVN0YXJ0
LCBjb25zdCBjaGFyKiBkYXRhRW5kKQoreworICAgIHVuc2lnbmVkIHV0ZjE2TGVuZ3RoID0gMDsK
KworICAgIFVDaGFyMzIgb3JBbGxEYXRhID0gMDsKKworICAgIGF1dG8gZGF0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGFTdGFydCk7CisgICAgdW5zaWduZWQgaW5wdXRP
ZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoID0gZGF0YUVuZCAtIGRhdGFTdGFy
dDsKKworICAgIHdoaWxlIChpbnB1dE9mZnNldCA8IGlucHV0TGVuZ3RoKSB7CisgICAgICAgIFVD
aGFyMzIgY2hhcmFjdGVyOworICAgICAgICBVOF9ORVhUKGRhdGEsIGlucHV0T2Zmc2V0LCBpbnB1
dExlbmd0aCwgY2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA8IDApCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0
ZXIpKSB7CisgICAgICAgICAgICBBU1NFUlQoIVVfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcikpOwor
ICAgICAgICAgICAgdXRmMTZMZW5ndGgrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVChVX0lTX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyKSk7CisgICAgICAgICAgICB1dGYx
Nkxlbmd0aCArPSAyOworICAgICAgICB9CisgICAgICAgIG9yQWxsRGF0YSB8PSBjaGFyYWN0ZXI7
CisgICAgfQorCisgICAgcmV0dXJuIHt7IHV0ZjE2TGVuZ3RoLCBpc0FTQ0lJKG9yQWxsRGF0YSkg
fX07Cit9CisKK3N0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gY2FsY3VsYXRlVVRGMTZTdHJpbmdM
ZW5ndGhBbmRBcmVBbGxBU0NJSUZyb21VVEY4UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNlcyhjb25z
dCBjaGFyKiBkYXRhU3RhcnQsIGNvbnN0IGNoYXIqIGRhdGFFbmQpCit7CisgICAgdW5zaWduZWQg
dXRmMTZMZW5ndGggPSAwOworCisgICAgVUNoYXIzMiBvckFsbERhdGEgPSAwOworCisgICAgYXV0
byBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YVN0YXJ0KTsKKyAg
ICB1bnNpZ25lZCBpbnB1dE9mZnNldCA9IDA7CisgICAgdW5zaWduZWQgaW5wdXRMZW5ndGggPSBk
YXRhRW5kIC0gZGF0YVN0YXJ0OworCisgICAgd2hpbGUgKGlucHV0T2Zmc2V0IDwgaW5wdXRMZW5n
dGgpIHsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAgICAgIFU4X05FWFRfT1JfRkZG
RChkYXRhLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgsIGNoYXJhY3Rlcik7CisKKyAgICAgICAg
aWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIEFTU0VSVCghVV9JU19TVVJS
T0dBVEUoY2hhcmFjdGVyKSk7CisgICAgICAgICAgICB1dGYxNkxlbmd0aCsrOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKFVfSVNfU1VQUExFTUVOVEFSWShjaGFyYWN0ZXIp
KTsKKyAgICAgICAgICAgIHV0ZjE2TGVuZ3RoICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgb3JB
bGxEYXRhIHw9IGNoYXJhY3RlcjsKKyAgICB9CisKKyAgICByZXR1cm4geyB1dGYxNkxlbmd0aCwg
aXNBU0NJSShvckFsbERhdGEpIH07Cit9CisKIGJvb2wgZXF1YWxVVEYxNldpdGhVVEY4KGNvbnN0
IFVDaGFyKiBhLCBjb25zdCBjaGFyKiBiLCBjb25zdCBjaGFyKiBiRW5kKQogewogICAgIHdoaWxl
IChiIDwgYkVuZCkgewpJbmRleDogU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24u
aAkocmV2aXNpb24gMjc5NTI1KQorKysgU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29udmVy
c2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw5IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSA8b3B0aW9uYWw+CiAjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KKyNpbmNs
dWRlIDx3dGYvU3Bhbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CiAKIG5hbWVzcGFj
ZSBXVEYgewpAQCAtNTAsNiArNTIsOCBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb252ZXJ0
TGF0aW4xVG9VCiBXVEZfRVhQT1JUX1BSSVZBVEUgQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0VVRG
MTZUb1VURjgoY29uc3QgVUNoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgVUNoYXIqIHNvdXJjZUVu
ZCwgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQsIGJvb2wgc3RyaWN0ID0gdHJ1
ZSk7CiAKIFdURl9FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBjYWxjdWxhdGVTdHJpbmdIYXNoQW5k
TGVuZ3RoRnJvbVVURjhNYXNraW5nVG9wOEJpdHMoY29uc3QgY2hhciogZGF0YSwgY29uc3QgY2hh
ciogZGF0YUVuZCwgdW5zaWduZWQmIGRhdGFMZW5ndGgsIHVuc2lnbmVkJiB1dGYxNkxlbmd0aCk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+PiBjYWxjdWxhdGVVVEYxNlN0cmluZ0xlbmd0aEFuZEFyZUFsbEFTQ0lJRnJvbVVURjgoY29u
c3QgY2hhciogZGF0YSwgY29uc3QgY2hhciogZGF0YUVuZCk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
c3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBjYWxjdWxhdGVVVEYxNlN0cmluZ0xlbmd0aEFuZEFy
ZUFsbEFTQ0lJRnJvbVVURjhSZXBsYWNpbmdJbnZhbGlkU2VxdWVuY2VzKGNvbnN0IGNoYXIqIGRh
dGEsIGNvbnN0IGNoYXIqIGRhdGFFbmQpOwogCiAvLyBDYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9u
cyBtdXN0IGNoZWNrIHRoYXQgdGhlIGxlbmd0aHMgYXJlIHRoZSBzYW1lOyBhY2NvcmRpbmdseSB3
ZSBvbWl0IGFuIGVuZCBhcmd1bWVudCBmb3IgVVRGLTE2IGFuZCBMYXRpbi0xLgogYm9vbCBlcXVh
bFVURjE2V2l0aFVURjgoY29uc3QgVUNoYXIqIHN0cmluZ0luVVRGMTYsIGNvbnN0IGNoYXIqIHN0
cmluZ0luVVRGOCwgY29uc3QgY2hhciogc3RyaW5nSW5VVEY4RW5kKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI3OTUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA3LTA1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6ZnJvbVVU
RjgoLi4uKSkgdXNlcyB3aXRoIGEgbW9yZSBlZmZpY2llbnQgbmV3IFN0cmluZ1R5cGVBZGFwdGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyNDQK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5ODg4ODcxPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxsZXJzIHBhc3NpbmcgU3RyaW5n
Ojpmcm9tVVRGOCgpIHRvIFN0cmluZ0J1aWxkZXIuYXBwZW5kKCkgdG8gdXNlIG5ldworICAgICAg
ICBtb3JlIGVmZmljaWVudCBTdHJpbmdCdWlsZGVyLmFwcGVuZChmcm9tVVRGOCguLi4pKSBoZWxw
ZXIgaW5zdGVhZC4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE6OnNldFVSTCk6CisgICAgICAgICogd29y
a2Vycy9TY3JpcHRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0QnVmZmVyOjp0
b1N0cmluZyBjb25zdCk6CisKIDIwMjEtMDctMDIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBbTWFjT1Mgd2sxXSBjcnlwdG8vd29ya2Vycy9zdWJ0bGUvaHJzYS1w
b3N0TWVzc2FnZS13b3JrZXIuaHRtbCBpcyBhIGZsYWt5IGZhaWx1cmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VsZWN0aW9uRGF0YS5jcHAJKHJldmlzaW9uIDI3OTUy
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTMsMTIgKzkzLDEwIEBAIHZvaWQgU2VsZWN0aW9uRGF0YTo6c2V0VVJM
KGNvbnN0IFVSTCYgdXIKICAgICAgICAgYWN0dWFsTGFiZWwgPSB1cmwuc3RyaW5nKCk7CiAKICAg
ICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKLSAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7
Ci0gICAgbWFya3VwLmFwcGVuZCh1cmwuc3RyaW5nKCkpOwotICAgIG1hcmt1cC5hcHBlbmQoIlwi
PiIpOworICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhyZWY9XCIiLCB1cmwuc3RyaW5nKCksICJcIj4i
KTsKICAgICBHVW5pcXVlUHRyPGdjaGFyPiBlc2NhcGVkKGdfbWFya3VwX2VzY2FwZV90ZXh0KGFj
dHVhbExhYmVsLnV0ZjgoKS5kYXRhKCksIC0xKSk7Ci0gICAgbWFya3VwLmFwcGVuZChTdHJpbmc6
OmZyb21VVEY4KGVzY2FwZWQuZ2V0KCkpKTsKLSAgICBtYXJrdXAuYXBwZW5kKCI8L2E+Iik7Cisg
ICAgbWFya3VwLmFwcGVuZChmcm9tVVRGOChlc2NhcGVkLmdldCgpKSwgIjwvYT4iKTsKKwogICAg
IHNldE1hcmt1cChtYXJrdXAudG9TdHJpbmcoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvU2NyaXB0QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1NjcmlwdEJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3OTUyNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvU2NyaXB0QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCBTdHJpbmcgU2NyaXB0QnVmZmVyOjp0b1N0cmluZygpIGNvbnN0CiAKICAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CiAgICAgbV9idWZmZXItPmZvckVhY2hTZWdtZW50KFsmXShhdXRvJiBz
ZWdtZW50KSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoc2VnbWVu
dC5kYXRhKCksIHNlZ21lbnQuc2l6ZSgpKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZyb21V
VEY4KHNlZ21lbnQuZGF0YSgpLCBzZWdtZW50LnNpemUoKSkpOwogICAgIH0pOwogICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc5NTI1KQor
KysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAyMS0wNy0wNSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVwbGFjZSBidWlsZGVyLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KC4uLikpIHVzZXMgd2l0aCBh
IG1vcmUgZWZmaWNpZW50IG5ldyBTdHJpbmdUeXBlQWRhcHRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjQ0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS83OTg4ODg3MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcGRhdGUgY2FsbGVycyBwYXNzaW5nIFN0cmluZzo6ZnJvbVVURjgoKSB0byBtYWtl
U3RyaW5nIHRvIHVzZSBuZXcKKyAgICAgICAgbW9yZSBlZmZpY2llbnQgbWFrZVN0cmluZyhmcm9t
VVRGOCguLi4pKSBoZWxwZXIgaW5zdGVhZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0
b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudCk6CisKIDIwMjEtMDctMDIg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIE1h
YyBDYXRhbHlzdCBidWlsZCBmaXggYWZ0ZXIgcjI3OTUxNC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMjc5NTI1KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIGNvbnN0IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VI
YW5kbGVycyYKIH0KIAogUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGll
bnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2Jz
ZXJ2ZXImIG9ic2VydmVyKQotICAgIDogbV9ob3N0QW5kUG9ydChTdHJpbmc6OmZyb21VVEY4KGFk
ZHJlc3MpICsgJzonICsgU3RyaW5nOjpudW1iZXIocG9ydCkpCisgICAgOiBtX2hvc3RBbmRQb3J0
KG1ha2VTdHJpbmcoZnJvbVVURjgoYWRkcmVzcyksICc6JywgcG9ydCkpCiAgICAgLCBtX29ic2Vy
dmVyKG9ic2VydmVyKQogICAgICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJs
ZV9uZXcoKSkpCiB7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNzk1NjgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAyMS0wNy0wNSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBidWlsZGVyLmFwcGVuZChTdHJpbmc6OmZyb21V
VEY4KC4uLikpIHVzZXMgd2l0aCBhIG1vcmUgZWZmaWNpZW50IG5ldyBTdHJpbmdUeXBlQWRhcHRl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjQ0
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83OTg4ODg3MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdHMgZm9yIG5ldyBmcm9tVVRGOCgp
IGFuZCBmcm9tVVRGOFJlcGxhY2luZ0ludmFsaWRTZXF1ZW5jZXMoKQorICAgICAgICBoZWxwZXJz
IGZvciBtYWtlU3RyaW5nL1N0cmluZ0J1aWxkZXIuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9TdHJpbmdDb25jYXRlbmF0ZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKwogMjAyMS0wNy0wNSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUGFjayBoZWFkZXIgYW5kIC5wYyBmaWxlcyBpbiB0aGUg
YnVpbHQtcHJvZHVjdCBhcmNoaXZlCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9TdHJpbmdDb25jYXRlbmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvU3RyaW5nQ29uY2F0ZW5hdGUuY3BwCShyZXZpc2lvbiAyNzk1MjUpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdDb25jYXRlbmF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Niw0ICsxOTYsMzAgQEAgVEVTVChXVEYsIFN0cmluZ0NvbmNhdGVuYXRl
X1BhZCkKICAgICBFWFBFQ1RfU1RSRVEoIiBCMzJBRjAwNzFGOSBpZCAxMjMxMjMyMzEyMzEzMjMx
ICgwLjAwMCwwLjAwMC0wLjAwMCwwLjAwMCkgMC4wMEtCIiwgbWFrZVN0cmluZyhwYWQoJyAnLCAx
MiwgaGV4KDEyMzEyMzEyMzEyMzEzKSksICIgaWQgIiwgMTIzMTIzMjMxMjMxMzIzMSwgIiAoIiwg
Rm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKDAuZiwgMyksICcsJywgRm9ybWF0dGVkTnVtYmVy
OjpmaXhlZFdpZHRoKDAuZiwgMyksICctJywgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKDAu
ZiwgMyksICcsJywgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKDAuZiwgMyksICIpICIsIEZv
cm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aCgwLmYsIDIpLCAiS0IiKS51dGY4KCkuZGF0YSgpKTsK
IH0KIAorc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyIGludmFsaWRVVEY4RXhhbXBsZVszXSA9
IHsgc3RhdGljX2Nhc3Q8Y2hhcj4oMHhGMCksIHN0YXRpY19jYXN0PGNoYXI+KDB4OTApLCBzdGF0
aWNfY2FzdDxjaGFyPigweDAwKSB9OworCisvLyBVbmljb2RlIENoYXJhY3RlciAnTElORUFSIEIg
U1lMTEFCTEUgQjAwOCBBJyAoVSsxMDAwMCkKK3N0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciBz
dXJyb2dhdGVQYWlyRXhhbXBsZVs1XSA9IHsgc3RhdGljX2Nhc3Q8Y2hhcj4oMHhGMCksIHN0YXRp
Y19jYXN0PGNoYXI+KDB4OTApLCBzdGF0aWNfY2FzdDxjaGFyPigweDgwKSwgc3RhdGljX2Nhc3Q8
Y2hhcj4oMHg4MCksIHN0YXRpY19jYXN0PGNoYXI+KDB4MDApIH07CisKKy8vIFVuaWNvZGUgQ2hh
cmFjdGVyICdSRVBMQUNFTUVOVCBDSEFSQUNURVInIChVK0ZGRkQpCitzdGF0aWMgY29uc3RleHBy
IGNvbnN0IGNoYXIgcmVwbGFjZW1lbnRDaGFyYWN0ZXJTdHJpbmdbNF0gPSB7IHN0YXRpY19jYXN0
PGNoYXI+KDB4RUYpLCBzdGF0aWNfY2FzdDxjaGFyPigweEJGKSwgc3RhdGljX2Nhc3Q8Y2hhcj4o
MHhCRCksIHN0YXRpY19jYXN0PGNoYXI+KDB4MDApIH07CisKK1RFU1QoV1RGLCBTdHJpbmdDb25j
YXRlbmF0ZV9Gcm9tVVRGOCkKK3sKKyAgICBFWFBFQ1RfU1RSRVEoIngiLCBtYWtlU3RyaW5nKGZy
b21VVEY4KCJ4IikpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgieHl6IiwgbWFr
ZVN0cmluZyhmcm9tVVRGOCgieHl6IikpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJF
UShzdXJyb2dhdGVQYWlyRXhhbXBsZSwgbWFrZVN0cmluZyhmcm9tVVRGOChzdXJyb2dhdGVQYWly
RXhhbXBsZSkpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUSgiIiwgbWFrZVN0cmlu
Zyhmcm9tVVRGOChpbnZhbGlkVVRGOEV4YW1wbGUpKS51dGY4KCkuZGF0YSgpKTsKKyAgICBFWFBF
Q1RfU1RSRVEocmVwbGFjZW1lbnRDaGFyYWN0ZXJTdHJpbmcsIG1ha2VTdHJpbmcoZnJvbVVURjgo
cmVwbGFjZW1lbnRDaGFyYWN0ZXJTdHJpbmcpKS51dGY4KCkuZGF0YSgpKTsKK30KKworVEVTVChX
VEYsIFN0cmluZ0NvbmNhdGVuYXRlX0Zyb21VVEY4UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNlcykK
K3sKKyAgICBFWFBFQ1RfU1RSRVEoIngiLCBtYWtlU3RyaW5nKGZyb21VVEY4UmVwbGFjaW5nSW52
YWxpZFNlcXVlbmNlcygieCIpKS51dGY4KCkuZGF0YSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoInh5
eiIsIG1ha2VTdHJpbmcoZnJvbVVURjhSZXBsYWNpbmdJbnZhbGlkU2VxdWVuY2VzKCJ4eXoiKSku
dXRmOCgpLmRhdGEoKSk7CisgICAgRVhQRUNUX1NUUkVRKHN1cnJvZ2F0ZVBhaXJFeGFtcGxlLCBt
YWtlU3RyaW5nKGZyb21VVEY4UmVwbGFjaW5nSW52YWxpZFNlcXVlbmNlcyhzdXJyb2dhdGVQYWly
RXhhbXBsZSkpLnV0ZjgoKS5kYXRhKCkpOworICAgIEVYUEVDVF9TVFJFUShyZXBsYWNlbWVudENo
YXJhY3RlclN0cmluZywgbWFrZVN0cmluZyhmcm9tVVRGOFJlcGxhY2luZ0ludmFsaWRTZXF1ZW5j
ZXMoaW52YWxpZFVURjhFeGFtcGxlKSkudXRmOCgpLmRhdGEoKSk7CisgICAgRVhQRUNUX1NUUkVR
KHJlcGxhY2VtZW50Q2hhcmFjdGVyU3RyaW5nLCBtYWtlU3RyaW5nKGZyb21VVEY4UmVwbGFjaW5n
SW52YWxpZFNlcXVlbmNlcyhyZXBsYWNlbWVudENoYXJhY3RlclN0cmluZykpLnV0ZjgoKS5kYXRh
KCkpOworfQorCiB9Cg==
</data>
<flag name="commit-queue"
          id="454968"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>