<?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>26953</bug_id>
          
          <creation_ts>2009-07-03 10:44:16 -0700</creation_ts>
          <short_desc>[V8] Do not do unnecessary handles casts and inline couple of methods</short_desc>
          <delta_ts>2009-07-14 09:17:15 -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>WebCore JavaScript</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="anton muhin">antonm</reporter>
          <assigned_to name="anton muhin">antonm</assigned_to>
          <cc>ager</cc>
    
    <cc>dglazkov</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129728</commentid>
    <comment_count>0</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-03 10:44:16 -0700</bug_when>
    <thetext>Currently convertToNativeObject accepts v8::Handle&lt;v8::Value&gt;, but can be only used for v8::Handle&lt;v8::Object&gt; (see a cast).  This cast is cheap, but is not free (e.g. it checks if handle is empty).  So this patch lifts casts to callers and makes conversion methods require v8::Handle&lt;v8::Object&gt;

Alongside: inline convertToNativeObject to enable more compiler optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129734</commentid>
    <comment_count>1</comment_count>
      <attachid>32244</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-03 12:10:33 -0700</bug_when>
    <thetext>Created attachment 32244
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130186</commentid>
    <comment_count>2</comment_count>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-07 05:36:11 -0700</bug_when>
    <thetext>&gt;          template &lt;class C&gt;
&gt; -        static C* convertToNativeObject(V8ClassIndex::V8WrapperType type, v8::Handle&lt;v8::Value&gt; object)
&gt; +        static C* convertToNativeObject(V8ClassIndex::V8WrapperType type, v8::Handle&lt;v8::Object&gt; object)
&gt;          {
&gt; -            return static_cast&lt;C*&gt;(convertToNativeObjectImpl(type, object));
&gt; -        }
&gt; +            // Native event listener is per frame, it cannot be handled by this generic function.
&gt; +            ASSERT(type != V8ClassIndex::EVENTLISTENER);
&gt; +            ASSERT(type != V8ClassIndex::EVENTTARGET);
&gt; +
&gt; +            ASSERT(maybeDOMWrapper(object));
&gt; +
&gt; +            ASSERT(
&gt; +            #define MAKE_CASE(TYPE, NAME) (type != V8ClassIndex::TYPE) &amp;&amp;
&gt; +                DOM_NODE_TYPES(MAKE_CASE)
&gt; +            #if ENABLE(SVG)
&gt; +                SVG_NODE_TYPES(MAKE_CASE)
&gt; +            #endif
&gt; +                true
&gt; +                );
&gt; +
&gt; +            return convertDOMWrapperToNative&lt;C&gt;(object);
&gt; +            #undef MAKE_CASE
&gt; +		}

Indentation is broken here (tab?).  

You should undef MAKE_CASE as soon as it is no longer used.  

Do we really need that massive macro-generated assert?

-- Mads</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130236</commentid>
    <comment_count>3</comment_count>
      <attachid>32384</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-07 10:35:33 -0700</bug_when>
    <thetext>Created attachment 32384
Addressing Mads&apos; comments

Mads, thanks a lot for review!

I hope I addressed all your comments.  I don&apos;t know if we need this assert at all, but I just don&apos;t want to touch it as my knowledge of bindings is currently limited.  But if you all agree it should go away, I&apos;d be more than happy to remove it.

Sorry, original patch didn&apos;t compile cleanly in debug mode (some checks in asserts), so I needed to through in some more changes, but of the similar kind---don&apos;t downcast to v8::Value.

And I need a patch for webkit/glue part as well (sending it to you, guys).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130237</commentid>
    <comment_count>4</comment_count>
      <attachid>32385</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-07 10:37:03 -0700</bug_when>
    <thetext>Created attachment 32385
Removing forgotten line from ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130656</commentid>
    <comment_count>5</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-09 06:25:20 -0700</bug_when>
    <thetext>ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130660</commentid>
    <comment_count>6</comment_count>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-09 07:37:18 -0700</bug_when>
    <thetext>The main part of this change looks fine to me, but the type ASSERT is still fishy:

It seems that you are macro expanding into a lot of single-line comments?

Also, with the calculation of the boolean value outside of the ASSERT, it will happen in release mode as well which is probably not what you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130695</commentid>
    <comment_count>7</comment_count>
      <attachid>32525</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-09 12:16:03 -0700</bug_when>
    <thetext>Created attachment 32525
Do not generate long boolen expression unless ASSERTs enabled

Mads, thanks a lot for another round!

I&apos;d easily remove ASSERT---I do agree it fishy---I just wanted to keep it closer to the original version.  So if you repeat it again, next patch would be w/o ASSERT :)  For now I&apos;m just putting boolean generation under proper condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130714</commentid>
    <comment_count>8</comment_count>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-09 13:21:14 -0700</bug_when>
    <thetext>418 #if !ASSERT_DISABLED

should this be #ifndef NDEBUG?

419	            const bool typeIsValid =
420	#define MAKE_CASE(TYPE, NAME) // (type != V8ClassIndex::TYPE) &amp;&amp;

You still have the actual inequality checking commented out so that MAKE_CASE expands to nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130902</commentid>
    <comment_count>9</comment_count>
      <attachid>32567</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-10 11:43:28 -0700</bug_when>
    <thetext>Created attachment 32567
Addressing Mads&apos; comments and merging with new head</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130903</commentid>
    <comment_count>10</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-10 11:46:12 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; 418 #if !ASSERT_DISABLED
&gt; ut 
&gt; should this be #ifndef NDEBUG?

If I&apos;m reading definition of ASSERT in WebKit/JavaScriptCore/wtf/Assertions.h, it rather depends on ASSERT_DISABLED when on NDEBUG directly.  But of course I could use NDEBUG here.

&gt; 
&gt; 419                const bool typeIsValid =
&gt; 420    #define MAKE_CASE(TYPE, NAME) // (type != V8ClassIndex::TYPE) &amp;&amp;
&gt; 
&gt; You still have the actual inequality checking commented out so that MAKE_CASE
&gt; expands to nothing.

My bad, sorry, hopefully fixed and merged with new head.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130906</commentid>
    <comment_count>11</comment_count>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-10 11:58:38 -0700</bug_when>
    <thetext>This looks good to me.

Over to Dimitri for the official review.  Dimitri, would you use !ASSERT_DISABLED or  #ifndef NDEBUG to only compute the boolean value if the ASSERT generates code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130947</commentid>
    <comment_count>12</comment_count>
      <attachid>32567</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-10 13:52:06 -0700</bug_when>
    <thetext>Comment on attachment 32567
Addressing Mads&apos; comments and merging with new head

Definitely #ifndef NDEBUG. Looks fine otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130948</commentid>
    <comment_count>13</comment_count>
      <attachid>32567</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-10 13:52:36 -0700</bug_when>
    <thetext>Comment on attachment 32567
Addressing Mads&apos; comments and merging with new head

I&apos;ll clear review flag until you have a newer patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131303</commentid>
    <comment_count>14</comment_count>
      <attachid>32659</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-13 06:58:39 -0700</bug_when>
    <thetext>Created attachment 32659
Switching to NDEBUG

Thanks a lot for another round, guys!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131327</commentid>
    <comment_count>15</comment_count>
      <attachid>32659</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-13 09:21:33 -0700</bug_when>
    <thetext>Comment on attachment 32659
Switching to NDEBUG

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131583</commentid>
    <comment_count>16</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-14 09:17:15 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/45859.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32244</attachid>
            <date>2009-07-03 12:10:33 -0700</date>
            <delta_ts>2009-07-07 10:37:03 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>inlineNobject.patch</filename>
            <type>text/plain</type>
            <size>14834</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ1NTM1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMDktMDct
MDMgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEbyBub3QgZG8gdW5uZWNlc3NhcnkgY29u
dmVyc2lvbnMgZnJvbSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG8KKyAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBhbmQgYWNjb21wYW55aW5nIGNoYW5nZXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk1MworCisgICAgICAgIFRocmVlIHRo
aW5nczoKKworICAgICAgICAxKSBkbyBub3QgY2FzdCBmcm9tIHY4OjpWYWx1ZSB0byB2ODo6T2Jq
ZWN0IGlmIHVubmVjZXNzYXJ5LS0tY2FzdHMgYXJlIGNoZWFwLAorICAgICAgICBidXQgYXJlIG5v
dCBmcmVlICh0aGV5IGNoZWNrIGZvciBlbXB0aW5lc3Mgb2YgaGFuZGxlKTsKKyAgICAgICAgMikg
aW5saW5lIGNvbnZlcnNpb24gZnJvbSB3cmFwcGVyIHRvIG5vZGU7CisgICAgICAgIDMpIHNpbXBs
aWZ5IGNhc2UgdG8gYW4gQVNTRVJULgorCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2NvZGlu
Zy9jb250cmlidXRpbmcuaHRtbCBGT1IgTU9SRSBJTkZPUk1BVElPTgorCisgICAgICAgIFRoaXMg
aXMganVzdCBhIHJlZmFjdG9yaW5nLCBzbyBubyBuZXcgdGVzdHMgYXJlIG5lZWRlZC4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y29udmVy
dFRvU1ZHUE9EVHlwZUltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZUV2ZW50KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9DYW52YXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFD
S19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b206OkdldFRhcmdldEZyYW1lKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3Vz
dG9tOjpDbGVhclRpbWVvdXRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX0FDQ0VTU19D
SEVDSyk6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RF
Q0wpOgorCiAyMDA5LTA3LTAyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBKYW4gQWxvbnpvLgpJbmRleDogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0JKHJldmlzaW9uIDQ1NDk0KQorKysgYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTgwMCw3ICs4MDAsNyBAQCBzdWIgR2VuZXJhdGVG
dW5jdGlvbkNhbGxiYWNrCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5h
dGl2ZUNsYXNzTmFtZSogaW1wID0gJmltcF9pbnN0YW5jZTtcbiIpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKLSAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiBFTkQKICAgICAgICAgSG9sZGVyVG9OYXRpdmUo
JGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOwogICAgIH0KQEAgLTE4NTgs
NyArMTg1OCw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIAogICAgICAgICAjIFBlcmZvcm0gdHlw
ZSBjaGVja3Mgb24gdGhlIHBhcmFtZXRlciwgaWYgaXQgaXMgZXhwZWN0ZWQgTm9kZSB0eXBlLAog
ICAgICAgICAjIHJldHVybiBOVUxMLgotICAgICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5z
dGFuY2UoJHZhbHVlKSA/IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDwke2ltcGxDbGFz
c05hbWV9PihWOENsYXNzSW5kZXg6OiR7Y2xhc3NJbmRleH0sICR2YWx1ZSkgOiAwIjsKKyAgICAg
ICAgcmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOFByb3h5Ojpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8JHtpbXBsQ2xhc3NOYW1lfT4oVjhDbGFzc0luZGV4Ojoke2NsYXNz
SW5kZXh9LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KCR2YWx1ZSkpIDogMCI7CiAgICAg
fQogfQogCkluZGV4OiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5k
aW5ncy92OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNDU0OTQpCisrKyBiaW5kaW5ncy92OC9WOFBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyNiw0MCArMjMyNiw5IEBAIFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSBWOFByb3h5Ojpkb20KICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpG
cm9tSW50KHR5cGUtPkludDMyVmFsdWUoKSk7CiB9CiAKLXZvaWQqIFY4UHJveHk6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCi17Ci0gICAgLy8gTmF0aXZlIGV2ZW50IGxpc3RlbmVy
IGlzIHBlciBmcmFtZSwgaXQgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBnZW5lcmljIGZ1bmN0
aW9uLgotICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7Ci0g
ICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpFVkVOVFRBUkdFVCk7Ci0KLSAgICBBU1NF
UlQobWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0jZGVm
aW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRToKLSAgICAg
ICAgRE9NX05PREVfVFlQRVMoTUFLRV9DQVNFKQotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIFNW
R19OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKLSNlbmRpZgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OlhNTEhUVFBS
RVFVRVNUOgotICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxYTUxIdHRw
UmVxdWVzdD4ob2JqZWN0KTsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RVZFTlQ6Ci0gICAgICAg
IHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50PihvYmplY3QpOwotICAgIGNh
c2UgVjhDbGFzc0luZGV4OjpDU1NSVUxFOgotICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxDU1NSdWxlPihvYmplY3QpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSN1bmRlZiBNQUtFX0NBU0UKLQotICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBl
clRvTmF0aXZlPHZvaWQ+KG9iamVjdCk7Ci19Ci0KLQogdm9pZCogVjhQcm94eTo6Y29udmVydFRv
U1ZHUE9EVHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIGlzV3JhcHBlck9mVHlwZShvYmpl
Y3QsIHR5cGUpID8gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmplY3QpIDogMDsK
KyAgICByZXR1cm4gaXNXcmFwcGVyT2ZUeXBlKG9iamVjdCwgdHlwZSkgPyBjb252ZXJ0RE9NV3Jh
cHBlclRvTmF0aXZlPHZvaWQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qob2JqZWN0KSkg
OiAwOwogfQogCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4UHJveHk6Omxvb2t1cERPTVdyYXBw
ZXIoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSkKSW5kZXg6IGJpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5k
aW5ncy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDQ1NDk0KQorKysgYmluZGluZ3MvdjgvVjhQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsMTAgKzM3OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIEEgaGVscGVyIGZ1bmN0aW9uIGV4dHJhY3QgbmF0aXZlIG9iamVjdCBw
b2ludGVyIGZyb20gYSBET00gd3JhcHBlcgogICAgICAgICAvLyBhbmQgY2FzdCB0byB0aGUgc3Bl
Y2lmaWVkIHR5cGUuCiAgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBDPgotICAgICAgICBzdGF0aWMg
QyogY29udmVydERPTVdyYXBwZXJUb05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0
KQorICAgICAgICBzdGF0aWMgQyogY29udmVydERPTVdyYXBwZXJUb05hdGl2ZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG9iamVjdCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1heWJl
RE9NV3JhcHBlcihvYmplY3QpKTsKLSAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBw
dHIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCktPkdldEludGVybmFsRmll
bGQoVjhDdXN0b206OmtET01XcmFwcGVyT2JqZWN0SW5kZXgpOworICAgICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHB0ciA9IG9iamVjdC0+R2V0SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6
a0RPTVdyYXBwZXJPYmplY3RJbmRleCk7CiAgICAgICAgICAgICByZXR1cm4gZXh0cmFjdENQb2lu
dGVyPEM+KHB0cik7CiAgICAgICAgIH0KIApAQCAtNDA3LDEwICs0MDcsMjYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRO
b2RlVG9WOE9iamVjdChOb2RlKik7CiAKICAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+Ci0gICAg
ICAgIHN0YXRpYyBDKiBjb252ZXJ0VG9OYXRpdmVPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCisgICAgICAgIHN0YXRp
YyBDKiBjb252ZXJ0VG9OYXRpdmVPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5
cGUsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Qyo+KGNvbnZlcnRUb05hdGl2ZU9iamVjdEltcGwodHlwZSwg
b2JqZWN0KSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5hdGl2ZSBldmVudCBsaXN0ZW5l
ciBpcyBwZXIgZnJhbWUsIGl0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgZ2VuZXJpYyBmdW5j
dGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRMSVNU
RU5FUik7CisgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UVEFS
R0VUKTsKKworICAgICAgICAgICAgQVNTRVJUKG1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKKwor
ICAgICAgICAgICAgQVNTRVJUKAorICAgICAgICAgICAgI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwg
TkFNRSkgKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpUWVBFKSAmJgorICAgICAgICAgICAgICAgIERP
TV9OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKKyAgICAgICAgICAgICNpZiBFTkFCTEUoU1ZHKQorICAg
ICAgICAgICAgICAgIFNWR19OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKKyAgICAgICAgICAgICNlbmRp
ZgorICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAg
ICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDPihvYmplY3QpOworICAgICAgICAg
ICAgI3VuZGVmIE1BS0VfQ0FTRQorCQl9CiAKICAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIApA
QCAtNDMxLDcgKzQ0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFpc0RPTUV2ZW50V3JhcHBlcihqc0V2ZW50KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2
ZW50Pihqc0V2ZW50KTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0
aXZlPEV2ZW50Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGpzRXZlbnQpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50
VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCopOwpAQCAtNTIyLDggKzUzOCw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZhbHVlIGlzIGEg
RE9NIEV2ZW50IHdyYXBwZXIuCiAgICAgICAgIHN0YXRpYyBib29sIGlzRE9NRXZlbnRXcmFwcGVy
KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQqIGNvbnZlcnRU
b05hdGl2ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4pOwotCiAgICAgICAgIC8vIFRha2UgQyBwb2ludGVyIG91dCBvZiBhIHY4IHdy
YXBwZXIuCiAgICAgICAgIHN0YXRpYyB2b2lkKiBleHRyYWN0Q1BvaW50ZXJJbXBsKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBvYmplY3QpCiAgICAgICAgIHsKSW5kZXg6IGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2
aXNpb24gNDU0OTQpCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMCArNjQsMTAgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRvQ2FudmFzUwogICAgICAgICByZXR1cm4gQ2FudmFz
U3R5bGU6OmNyZWF0ZSh0b1dlYkNvcmVTdHJpbmcodmFsdWUpKTsKIAogICAgIGlmIChWOENhbnZh
c0dyYWRpZW50OjpIYXNJbnN0YW5jZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBDYW52YXNTdHls
ZTo6Y3JlYXRlKFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzR3JhZGll
bnQ+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4UHJveHk6
OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzR3JhZGllbnQ+KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QodmFsdWUpKSk7CiAKICAgICBpZiAoVjhDYW52YXNQYXR0ZXJuOjpIYXNJ
bnN0YW5jZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4UHJv
eHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUGF0dGVybj4odmFsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpjcmVhdGUoVjhQcm94eTo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxDYW52YXNQYXR0ZXJuPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZh
bHVlKSkpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC00MDUsNyArNDA1LDcgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgIC8vIHdlIGxlYXZlIGl0IG51bGws
IGFuZCBwdXRJbWFnZURhdGEoKSB3aWxsIHRocm93IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgogICAg
IC8vIChUWVBFX01JU01BVENIX0VSUikuCiAgICAgaWYgKFY4UHJveHk6OmlzV3JhcHBlck9mVHlw
ZShhcmdzWzBdLCBWOENsYXNzSW5kZXg6OklNQUdFREFUQSkpCi0gICAgICAgIGltYWdlRGF0YSA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRleDo6
SU1BR0VEQVRBLCBhcmdzWzBdKTsKKyAgICAgICAgaW1hZ2VEYXRhID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PEltYWdlRGF0YT4oVjhDbGFzc0luZGV4OjpJTUFHRURBVEEsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAKSW5kZXg6IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCShyZXZp
c2lvbiA0NTQ5NCkKKysrIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgRnJhbWUqIFY4Q3VzdG9tOjpHZXRUYXJn
ZXRGcmFtZSh2ODo6TG9jYQogICAgIEZyYW1lKiB0YXJnZXQgPSAwOwogICAgIHN3aXRjaCAoVjhD
bGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkpIHsKICAgICBjYXNlIFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XOiB7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5k
b3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBo
b3N0KTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cgPSBWOFByb3h5Ojps
b29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKICAgICAgICAg
aWYgKHdpbmRvdy5Jc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OwogCkluZGV4
OiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NDk0
KQorKysgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dQb3N0
TWVzc2FnZSkKICAgICAvLyAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7CiAg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyKSB7CiAgICAgICAgIGlmIChWOFByb3h5Ojppc1dyYXBw
ZXJPZlR5cGUoYXJnc1sxXSwgVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCkpCi0gICAgICAgICAg
ICBwb3J0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENs
YXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdzWzFdKTsKKyAgICAgICAgICAgIHBvcnQgPSBWOFBy
b3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVT
U0FHRVBPUlQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSkpOwogICAgICAg
ICB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFy
Z3NbMl0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJp
bmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CkBAIC04NTUsNyArODU1LDcgQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1NldEludGVydmFsKQogCiB2b2lkIFY4Q3VzdG9t
OjpDbGVhclRpbWVvdXRJbXBsKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIERPTVdpbmRvdyogaW1w
ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4
OjpET01XSU5ET1csIGhvbGRlcik7CiAgICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShp
bXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm47CkBAIC04ODIsNyArODgyLDcgQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0NsZWFySW50ZXJ2YQogTkFNRURfQUNDRVNTX0NI
RUNLKERPTVdpbmRvdykKIHsKICAgICBBU1NFUlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEt
PkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpET01XSU5ET1cpOwotICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJ
bmRleDo6RE9NV0lORE9XLCBob3N0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRv
dyA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhv
c3QpOwogICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAv
LyB0aGUgZnJhbWUgaXMgZ29uZS4KIApAQCAtOTA4LDcgKzkwOCw3IEBAIE5BTUVEX0FDQ0VTU19D
SEVDSyhET01XaW5kb3cpCiBJTkRFWEVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cpCiB7CiAgICAg
QVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93ID0g
VjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9zdCk7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01X
cmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKICAgICBpZiAod2luZG93Lklz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBiaW5kaW5ncy92OC9jdXN0
b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ5NCkKKysrIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBA
QCBDQUxMQkFDS19GVU5DX0RFQ0woRG9jdW1lbnRFdmFsdWF0ZSkKIAogICAgIFhQYXRoTlNSZXNv
bHZlciogcmVzb2x2ZXIgPSAwOwogICAgIGlmIChWOFhQYXRoTlNSZXNvbHZlcjo6SGFzSW5zdGFu
Y2UoYXJnc1syXSkpCi0gICAgICAgIHJlc29sdmVyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhDbGFzc0luZGV4OjpYUEFUSE5TUkVTT0xWRVIsIGFy
Z3NbMl0pOworICAgICAgICByZXNvbHZlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxYUGF0aE5TUmVzb2x2ZXI+KFY4Q2xhc3NJbmRleDo6WFBBVEhOU1JFU09MVkVSLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMl0pKTsKICAgICBlbHNlIGlmIChhcmdzWzJdLT5J
c09iamVjdCgpKQogICAgICAgICByZXNvbHZlciA9IG5ldyBWOEN1c3RvbVhQYXRoTlNSZXNvbHZl
cihhcmdzWzJdLT5Ub09iamVjdCgpKTsKICAgICBlbHNlIGlmICghYXJnc1syXS0+SXNOdWxsKCkg
JiYgIWFyZ3NbMl0tPklzVW5kZWZpbmVkKCkpCkBAIC03MCw3ICs3MCw3IEBAIENBTExCQUNLX0ZV
TkNfREVDTChEb2N1bWVudEV2YWx1YXRlKQogICAgIGludCB0eXBlID0gdG9JbnQzMihhcmdzWzNd
KTsKICAgICBYUGF0aFJlc3VsdCogaW5SZXN1bHQgPSAwOwogICAgIGlmIChWOFhQYXRoUmVzdWx0
OjpIYXNJbnN0YW5jZShhcmdzWzRdKSkKLSAgICAgICAgaW5SZXN1bHQgPSBWOFByb3h5Ojpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8WFBhdGhSZXN1bHQ+KFY4Q2xhc3NJbmRleDo6WFBBVEhSRVNVTFQs
IGFyZ3NbNF0pOworICAgICAgICBpblJlc3VsdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxYUGF0aFJlc3VsdD4oVjhDbGFzc0luZGV4OjpYUEFUSFJFU1VMVCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzRdKSk7CiAKICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9u
Q2F0Y2hlcjsKICAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IHJlc3VsdCA9IGRvY3VtZW50LT5ldmFs
dWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZSwgcmVzb2x2ZXIsIHR5cGUsIGluUmVzdWx0LCBl
Yyk7CkluZGV4OiBiaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lv
biA0NTQ5NCkKKysrIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlv
blJlbG9hZCkKICAgICAvLyBGSVhNRTogd2UgaWdub3JlIHRoZSAiZm9yY2VnZXQiIHBhcmFtZXRl
ci4KIAogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnJlbG9hZCIpOwotICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBMb2NhdGlvbiogaW1wID0gVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FU
SU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtMjgx
LDcgKzI4MSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblJlbG9hZCkKIENBTExCQUNL
X0ZVTkNfREVDTChMb2NhdGlvblJlcGxhY2UpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRp
b24ucmVwbGFjZSIpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhv
bGRlcigpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIo
KTsKICAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExv
Y2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUqIGZy
YW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtMzAyLDcgKzMwMiw3IEBAIENBTExCQUNLX0ZVTkNfREVD
TChMb2NhdGlvblJlcGxhY2UpCiBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25Bc3NpZ24pCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24uYXNzaWduIik7Ci0gICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04s
IGhvbGRlcik7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CkBAIC0zMzMsNyAr
MzMzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uVmFsdWVPZikKIENBTExCQUNLX0ZV
TkNfREVDTChMb2NhdGlvblRvU3RyaW5nKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9u
LnRvU3RyaW5nIik7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9s
ZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigp
OwogICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9j
YXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAgICAgaWYgKCFWOFByb3h5
OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32384</attachid>
            <date>2009-07-07 10:35:33 -0700</date>
            <delta_ts>2009-07-07 10:37:03 -0700</delta_ts>
            <desc>Addressing Mads&apos; comments</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>15432</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ1NTk3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMDktMDct
MDcgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTSE9SVCBERVNDUklQVElPTi9CVUcgVElU
TEUgR09FUyBIRVJFIChPT1BTISkKKyAgICAgICAgRG8gbm90IGRvIHVubmVjZXNzYXJ5IGNvbnZl
cnNpb25zIGZyb20gdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvCisgICAgICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gYW5kIGFjY29tcGFueWluZyBjaGFuZ2VzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NTMKKworICAgICAgICBUaHJlZSB0aGlu
Z3M6CisKKyAgICAgICAgMSkgZG8gbm90IGNhc3QgZnJvbSB2ODo6VmFsdWUgdG8gdjg6Ok9iamVj
dCBpZiB1bm5lY2Vzc2FyeS0tLWNhc3RzIGFyZSBjaGVhcCwKKyAgICAgICAgYnV0IGFyZSBub3Qg
ZnJlZSAodGhleSBjaGVjayBmb3IgZW1wdGluZXNzIG9mIGhhbmRsZSk7CisgICAgICAgIDIpIGlu
bGluZSBjb252ZXJzaW9uIGZyb20gd3JhcHBlciB0byBub2RlOworICAgICAgICAzKSBzaW1wbGlm
eSBjYXNlIHRvIGFuIEFTU0VSVC4KKworICAgICAgICBUaGlzIGlzIGp1c3QgYSByZWZhY3Rvcmlu
Zywgc28gbm8gbmV3IHRlc3RzIGFyZSBuZWVkZWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmV2YWx1YXRlSW5OZXdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbnZlcnRUb1NWR1BPRFR5cGVJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpj
b252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpjb252ZXJ0
VG9OYXRpdmVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvQ2FudmFzU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4Q3VzdG9tOjpHZXRUYXJnZXRGcmFtZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNf
REVDTCk6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbTo6Q2xlYXJUaW1lb3V0SW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOQU1FRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAoV2ViQ29yZTo6
SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERv
Y3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKwogMjAwOS0wNy0wNyAgQW50b24g
TXVoaW4gIDxhbnRvbm1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEZpc2hlci4KSW5kZXg6IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA0
NTU1OCkKKysrIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNv
cHkpCkBAIC04MDAsNyArODAwLDcgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsYmFjawogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVDbGFzc05hbWUqIGltcCA9
ICZpbXBfaW5zdGFuY2U7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCA8PEVORCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFy
Z3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhv
bGRlcigpOwogRU5ECiAgICAgICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFz
c05hbWUsICRjbGFzc0luZGV4KTsKICAgICB9CkBAIC0xODU4LDcgKzE4NTgsNyBAQCBzdWIgSlNW
YWx1ZVRvTmF0aXZlCiAKICAgICAgICAgIyBQZXJmb3JtIHR5cGUgY2hlY2tzIG9uIHRoZSBwYXJh
bWV0ZXIsIGlmIGl0IGlzIGV4cGVjdGVkIE5vZGUgdHlwZSwKICAgICAgICAgIyByZXR1cm4gTlVM
TC4KLSAgICAgICAgcmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOFBy
b3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8JHtpbXBsQ2xhc3NOYW1lfT4oVjhDbGFzc0luZGV4
Ojoke2NsYXNzSW5kZXh9LCAkdmFsdWUpIDogMCI7CisgICAgICAgIHJldHVybiAiVjgke3R5cGV9
OjpIYXNJbnN0YW5jZSgkdmFsdWUpID8gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PCR7
aW1wbENsYXNzTmFtZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4fSwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOwogICAgIH0KIH0KIApJbmRleDogYmluZGlu
Z3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJ
KHJldmlzaW9uIDQ1NTU4KQorKysgYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbk5ld0NvbnRl
eHQoY29uc3QKICAgICAvLyBTZXQgdXAgdGhlIERPTSB3aW5kb3cgYXMgdGhlIHByb3RvdHlwZSBv
ZiB0aGUgbmV3IGdsb2JhbCBvYmplY3QuCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gd2lu
ZG93Q29udGV4dCA9IG1fY29udGV4dDsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRv
d0dsb2JhbCA9IHdpbmRvd0NvbnRleHQtPkdsb2JhbCgpOwotICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3aW5kb3dXcmFwcGVyID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5k
ZXg6OkRPTVdJTkRPVywgd2luZG93R2xvYmFsKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdpbmRvd1dyYXBwZXIgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCB3aW5kb3dHbG9iYWwpOwogCiAgICAgQVNTRVJUKFY4UHJveHk6OmNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmU8RE9NV2luZG93Pih3aW5kb3dXcmFwcGVyKSA9PSBtX2ZyYW1lLT5k
b21XaW5kb3coKSk7CiAKQEAgLTIzMjYsNDAgKzIzMjYsOSBAQCBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgVjhQcm94eTo6ZG9tCiAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6RnJvbUludCh0
eXBlLT5JbnQzMlZhbHVlKCkpOwogfQogCi12b2lkKiBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVP
YmplY3RJbXBsKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gb2JqZWN0KQotewotICAgIC8vIE5hdGl2ZSBldmVudCBsaXN0ZW5lciBpcyBwZXIg
ZnJhbWUsIGl0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgZ2VuZXJpYyBmdW5jdGlvbi4KLSAg
ICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UTElTVEVORVIpOwotICAgIEFTU0VS
VCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRUQVJHRVQpOwotCi0gICAgQVNTRVJUKG1heWJl
RE9NV3JhcHBlcihvYmplY3QpKTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotI2RlZmluZSBNQUtF
X0NBU0UoVFlQRSwgTkFNRSkgY2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6Ci0gICAgICAgIERPTV9O
T0RFX1RZUEVTKE1BS0VfQ0FTRSkKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBTVkdfTk9ERV9U
WVBFUyhNQUtFX0NBU0UpCi0jZW5kaWYKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVDoK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8WE1MSHR0cFJlcXVlc3Q+
KG9iamVjdCk7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OkVWRU5UOgotICAgICAgICByZXR1cm4g
Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4ob2JqZWN0KTsKLSAgICBjYXNlIFY4Q2xh
c3NJbmRleDo6Q1NTUlVMRToKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRp
dmU8Q1NTUnVsZT4ob2JqZWN0KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0jdW5kZWYgTUFLRV9DQVNFCi0KLSAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2
ZTx2b2lkPihvYmplY3QpOwotfQotCi0KIHZvaWQqIFY4UHJveHk6OmNvbnZlcnRUb1NWR1BPRFR5
cGVJbXBsKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gb2JqZWN0KQogewotICAgIHJldHVybiBpc1dyYXBwZXJPZlR5cGUob2JqZWN0LCB0eXBl
KSA/IGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8dm9pZD4ob2JqZWN0KSA6IDA7CisgICAgcmV0
dXJuIGlzV3JhcHBlck9mVHlwZShvYmplY3QsIHR5cGUpID8gY29udmVydERPTVdyYXBwZXJUb05h
dGl2ZTx2b2lkPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpIDogMDsKIH0K
IAogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUp
CkluZGV4OiBiaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3Mvdjgv
VjhQcm94eS5oCShyZXZpc2lvbiA0NTU1OCkKKysrIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzc4LDEwICszNzgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyBBIGhlbHBlciBmdW5jdGlvbiBleHRyYWN0IG5hdGl2ZSBvYmplY3QgcG9pbnRlciBm
cm9tIGEgRE9NIHdyYXBwZXIKICAgICAgICAgLy8gYW5kIGNhc3QgdG8gdGhlIHNwZWNpZmllZCB0
eXBlLgogICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGNvbnZl
cnRET01XcmFwcGVyVG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKKyAgICAg
ICAgc3RhdGljIEMqIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtYXliZURPTVdyYXBw
ZXIob2JqZWN0KSk7Ci0gICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcHRyID0gdjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpLT5HZXRJbnRlcm5hbEZpZWxkKFY4Q3Vz
dG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4KTsKKyAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBwdHIgPSBvYmplY3QtPkdldEludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XcmFw
cGVyT2JqZWN0SW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RDUG9pbnRlcjxDPihw
dHIpOwogICAgICAgICB9CiAKQEAgLTQwNyw5ICs0MDcsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnROb2RlVG9WOE9i
amVjdChOb2RlKik7CiAKICAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+Ci0gICAgICAgIHN0YXRp
YyBDKiBjb252ZXJ0VG9OYXRpdmVPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5
cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCisgICAgICAgIHN0YXRpYyBDKiBjb252
ZXJ0VG9OYXRpdmVPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Qyo+KGNvbnZlcnRUb05hdGl2ZU9iamVjdEltcGwodHlwZSwgb2JqZWN0KSk7
CisgICAgICAgICAgICAvLyBOYXRpdmUgZXZlbnQgbGlzdGVuZXIgaXMgcGVyIGZyYW1lLCBpdCBj
YW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIGdlbmVyaWMgZnVuY3Rpb24uCisgICAgICAgICAgICBB
U1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UTElTVEVORVIpOworICAgICAgICAgICAg
QVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpFVkVOVFRBUkdFVCk7CisKKyAgICAgICAgICAg
IEFTU0VSVChtYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CisKKyAgICAgICAgICAgIGNvbnN0IGJv
b2wgdHlwZUlzVmFsaWQgPQorI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgLy8gKHR5cGUg
IT0gVjhDbGFzc0luZGV4OjpUWVBFKSAmJgorICAgICAgICAgICAgICAgIERPTV9OT0RFX1RZUEVT
KE1BS0VfQ0FTRSkKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICAgICAgICAgIFNWR19OT0RFX1RZ
UEVTKE1BS0VfQ0FTRSkKKyNlbmRpZgorI3VuZGVmIE1BS0VfQ0FTRQorICAgICAgICAgICAgICAg
IHRydWU7CisgICAgICAgICAgICBBU1NFUlQodHlwZUlzVmFsaWQpOworCisgICAgICAgICAgICBy
ZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDPihvYmplY3QpOwogICAgICAgICB9CiAK
ICAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlw
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKQEAgLTQzMSw3ICs0NDcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghaXNET01FdmVudFdyYXBwZXIo
anNFdmVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4g
Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4oanNFdmVudCk7CisgICAgICAgICAgICBy
ZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4odjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChqc0V2ZW50KSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQq
KTsKQEAgLTUyMiw4ICs1MzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIENo
ZWNrIHdoZXRoZXIgYSBWOCB2YWx1ZSBpcyBhIERPTSBFdmVudCB3cmFwcGVyLgogICAgICAgICBz
dGF0aWMgYm9vbCBpc0RPTUV2ZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCi0g
ICAgICAgIHN0YXRpYyB2b2lkKiBjb252ZXJ0VG9OYXRpdmVPYmplY3RJbXBsKFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLQogICAgICAgICAvLyBU
YWtlIEMgcG9pbnRlciBvdXQgb2YgYSB2OCB3cmFwcGVyLgogICAgICAgICBzdGF0aWMgdm9pZCog
ZXh0cmFjdENQb2ludGVySW1wbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQogICAgICAg
ICB7CkluZGV4OiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NTU4KQorKysgYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQsMTAgKzY0LDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiB0b0Nh
bnZhc1MKICAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpjcmVhdGUodG9XZWJDb3JlU3RyaW5n
KHZhbHVlKSk7CiAKICAgICBpZiAoVjhDYW52YXNHcmFkaWVudDo6SGFzSW5zdGFuY2UodmFsdWUp
KQotICAgICAgICByZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShWOFByb3h5Ojpjb252ZXJ0RE9N
V3JhcHBlclRvTmF0aXZlPENhbnZhc0dyYWRpZW50Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4g
Q2FudmFzU3R5bGU6OmNyZWF0ZShWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPENh
bnZhc0dyYWRpZW50Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkpOwogCiAg
ICAgaWYgKFY4Q2FudmFzUGF0dGVybjo6SGFzSW5zdGFuY2UodmFsdWUpKQotICAgICAgICByZXR1
cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZl
PENhbnZhc1BhdHRlcm4+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3Jl
YXRlKFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUGF0dGVybj4odjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpKTsKIAogICAgIHJldHVybiAwOwogfQpA
QCAtNDA1LDcgKzQwNSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250
ZXgKICAgICAvLyB3ZSBsZWF2ZSBpdCBudWxsLCBhbmQgcHV0SW1hZ2VEYXRhKCkgd2lsbCB0aHJv
dyB0aGUgY29ycmVjdCBleGNlcHRpb24KICAgICAvLyAoVFlQRV9NSVNNQVRDSF9FUlIpLgogICAg
IGlmIChWOFByb3h5Ojppc1dyYXBwZXJPZlR5cGUoYXJnc1swXSwgVjhDbGFzc0luZGV4OjpJTUFH
RURBVEEpKQotICAgICAgICBpbWFnZURhdGEgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8SW1hZ2VEYXRhPihWOENsYXNzSW5kZXg6OklNQUdFREFUQSwgYXJnc1swXSk7CisgICAgICAg
IGltYWdlRGF0YSA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbWFnZURhdGE+KFY4
Q2xhc3NJbmRleDo6SU1BR0VEQVRBLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3Nb
MF0pKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCkluZGV4OiBiaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9jdXN0
b20vVjhDdXN0b21CaW5kaW5nLmNwcAkocmV2aXNpb24gNDU1NTgpCisrKyBiaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3
IEBAIEZyYW1lKiBWOEN1c3RvbTo6R2V0VGFyZ2V0RnJhbWUodjg6OkxvY2EKICAgICBGcmFtZSog
dGFyZ2V0ID0gMDsKICAgICBzd2l0Y2ggKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQz
MlZhbHVlKCkpKSB7CiAgICAgY2FzZSBWOENsYXNzSW5kZXg6OkRPTVdJTkRPVzogewotICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93ID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBl
cihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9zdCk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd2luZG93ID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6
OkRPTVdJTkRPVywgaG9zdCk7CiAgICAgICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldDsKIApJbmRleDogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2lu
ZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5k
b3dDdXN0b20uY3BwCShyZXZpc2lvbiA0NTU1OCkKKysrIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERP
TVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woRE9NV2luZG93UG9zdE1lc3NhZ2UpCiAgICAgLy8gICBwb3N0TWVzc2Fn
ZShtZXNzYWdlLCB0YXJnZXRPcmlnaW4pOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMikgewog
ICAgICAgICBpZiAoVjhQcm94eTo6aXNXcmFwcGVyT2ZUeXBlKGFyZ3NbMV0sIFY4Q2xhc3NJbmRl
eDo6TUVTU0FHRVBPUlQpKQotICAgICAgICAgICAgcG9ydCA9IFY4UHJveHk6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgYXJnc1sx
XSk7CisgICAgICAgICAgICBwb3J0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1l
c3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KGFyZ3NbMV0pKTsKICAgICAgICAgdGFyZ2V0T3JpZ2luID0gdmFsdWVUb1N0cmlu
Z1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKTsKICAgICB9IGVsc2UgewogICAgICAg
ICB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFy
Z3NbMV0pOwpAQCAtODU1LDcgKzg1NSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dT
ZXRJbnRlcnZhbCkKIAogdm9pZCBWOEN1c3RvbTo6Q2xlYXJUaW1lb3V0SW1wbChjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogewotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBh
cmdzLkhvbGRlcigpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5I
b2xkZXIoKTsKICAgICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOwogICAgIGlm
ICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtODgyLDcgKzg4Miw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dD
bGVhckludGVydmEKIE5BTUVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cpCiB7CiAgICAgQVNTRVJU
KFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93ID0gVjhQcm94
eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9zdCk7CisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVy
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKICAgICBpZiAod2luZG93LklzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gdGhlIGZyYW1lIGlzIGdvbmUuCiAKQEAgLTkw
OCw3ICs5MDgsNyBAQCBOQU1FRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQogSU5ERVhFRF9BQ0NF
U1NfQ0hFQ0soRE9NV2luZG93KQogewogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQo
ZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyk7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHdpbmRvdyA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGhvc3QpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d2luZG93ID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRP
VywgaG9zdCk7CiAgICAgaWYgKHdpbmRvdy5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApJbmRleDogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNDU1NTgpCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50
RXZhbHVhdGUpCiAKICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyID0gMDsKICAgICBpZiAo
VjhYUGF0aE5TUmVzb2x2ZXI6Okhhc0luc3RhbmNlKGFyZ3NbMl0pKQotICAgICAgICByZXNvbHZl
ciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYUGF0aE5TUmVzb2x2ZXI+KFY4Q2xh
c3NJbmRleDo6WFBBVEhOU1JFU09MVkVSLCBhcmdzWzJdKTsKKyAgICAgICAgcmVzb2x2ZXIgPSBW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFBhdGhOU1Jlc29sdmVyPihWOENsYXNzSW5k
ZXg6OlhQQVRITlNSRVNPTFZFUiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzJd
KSk7CiAgICAgZWxzZSBpZiAoYXJnc1syXS0+SXNPYmplY3QoKSkKICAgICAgICAgcmVzb2x2ZXIg
PSBuZXcgVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIoYXJnc1syXS0+VG9PYmplY3QoKSk7CiAgICAg
ZWxzZSBpZiAoIWFyZ3NbMl0tPklzTnVsbCgpICYmICFhcmdzWzJdLT5Jc1VuZGVmaW5lZCgpKQpA
QCAtNzAsNyArNzAsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRG9jdW1lbnRFdmFsdWF0ZSkKICAg
ICBpbnQgdHlwZSA9IHRvSW50MzIoYXJnc1szXSk7CiAgICAgWFBhdGhSZXN1bHQqIGluUmVzdWx0
ID0gMDsKICAgICBpZiAoVjhYUGF0aFJlc3VsdDo6SGFzSW5zdGFuY2UoYXJnc1s0XSkpCi0gICAg
ICAgIGluUmVzdWx0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoUmVzdWx0
PihWOENsYXNzSW5kZXg6OlhQQVRIUkVTVUxULCBhcmdzWzRdKTsKKyAgICAgICAgaW5SZXN1bHQg
PSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFBhdGhSZXN1bHQ+KFY4Q2xhc3NJbmRl
eDo6WFBBVEhSRVNVTFQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1s0XSkpOwog
CiAgICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CiAgICAgUmVmUHRyPFhQYXRoUmVz
dWx0PiByZXN1bHQgPSBkb2N1bWVudC0+ZXZhbHVhdGUoZXhwcmVzc2lvbiwgY29udGV4dE5vZGUs
IHJlc29sdmVyLCB0eXBlLCBpblJlc3VsdCwgZWMpOwpJbmRleDogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OExvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU1NTgpCisrKyBiaW5kaW5ncy92OC9jdXN0
b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsNyBA
QCBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25SZWxvYWQpCiAgICAgLy8gRklYTUU6IHdlIGln
bm9yZSB0aGUgImZvcmNlZ2V0IiBwYXJhbWV0ZXIuCiAKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2Nh
dGlvbi5yZWxvYWQiKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5I
b2xkZXIoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVy
KCk7CiAgICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxM
b2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKIAogICAgIEZyYW1lKiBm
cmFtZSA9IGltcC0+ZnJhbWUoKTsKQEAgLTI4MSw3ICsyODEsNyBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woTG9jYXRpb25SZWxvYWQpCiBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25SZXBsYWNlKQog
ewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnJlcGxhY2UiKTsKLSAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgTG9jYXRpb24qIGltcCA9IFY4UHJv
eHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElP
TiwgaG9sZGVyKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKQEAgLTMwMiw3
ICszMDIsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25SZXBsYWNlKQogQ0FMTEJBQ0tf
RlVOQ19ERUNMKExvY2F0aW9uQXNzaWduKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9u
LmFzc2lnbiIpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRl
cigpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsK
ICAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0
aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUqIGZyYW1l
ID0gaW1wLT5mcmFtZSgpOwpAQCAtMzMzLDcgKzMzMyw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChM
b2NhdGlvblZhbHVlT2YpCiBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25Ub1N0cmluZykKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi50b1N0cmluZyIpOwotICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94
eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9O
LCBob2xkZXIpOwogICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgp
LCB0cnVlKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32385</attachid>
            <date>2009-07-07 10:37:03 -0700</date>
            <delta_ts>2009-07-09 12:16:03 -0700</delta_ts>
            <desc>Removing forgotten line from ChangeLog</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>15377</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ1NTk3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMDktMDct
MDcgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEbyBub3QgZG8gdW5uZWNlc3NhcnkgY29u
dmVyc2lvbnMgZnJvbSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG8KKyAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBhbmQgYWNjb21wYW55aW5nIGNoYW5nZXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk1MworCisgICAgICAgIFRocmVlIHRo
aW5nczoKKworICAgICAgICAxKSBkbyBub3QgY2FzdCBmcm9tIHY4OjpWYWx1ZSB0byB2ODo6T2Jq
ZWN0IGlmIHVubmVjZXNzYXJ5LS0tY2FzdHMgYXJlIGNoZWFwLAorICAgICAgICBidXQgYXJlIG5v
dCBmcmVlICh0aGV5IGNoZWNrIGZvciBlbXB0aW5lc3Mgb2YgaGFuZGxlKTsKKyAgICAgICAgMikg
aW5saW5lIGNvbnZlcnNpb24gZnJvbSB3cmFwcGVyIHRvIG5vZGU7CisgICAgICAgIDMpIHNpbXBs
aWZ5IGNhc2UgdG8gYW4gQVNTRVJULgorCisgICAgICAgIFRoaXMgaXMganVzdCBhIHJlZmFjdG9y
aW5nLCBzbyBubyBuZXcgdGVzdHMgYXJlIG5lZWRlZC4KKworICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVhdGVJbk5ld0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6
OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6
Y29udmVydFRvTmF0aXZlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9DYW52YXNT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhDdXN0b206OkdldFRhcmdldEZyYW1lKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVO
Q19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tOjpDbGVhclRpbWVvdXRJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgIChXZWJDb3Jl
OjpJTkRFWEVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNM
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorCiAyMDA5LTA3LTA3ICBBbnRv
biBNdWhpbiAgPGFudG9ubUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gRmlzaGVyLgpJbmRleDogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9u
IDQ1NTU4KQorKysgYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTgwMCw3ICs4MDAsNyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxiYWNrCiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZUNsYXNzTmFtZSogaW1w
ID0gJmltcF9pbnN0YW5jZTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsIDw8RU5EKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0g
YXJncy5Ib2xkZXIoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3Mu
SG9sZGVyKCk7CiBFTkQKICAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENs
YXNzTmFtZSwgJGNsYXNzSW5kZXgpOwogICAgIH0KQEAgLTE4NTgsNyArMTg1OCw3IEBAIHN1YiBK
U1ZhbHVlVG9OYXRpdmUKIAogICAgICAgICAjIFBlcmZvcm0gdHlwZSBjaGVja3Mgb24gdGhlIHBh
cmFtZXRlciwgaWYgaXQgaXMgZXhwZWN0ZWQgTm9kZSB0eXBlLAogICAgICAgICAjIHJldHVybiBO
VUxMLgotICAgICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDwke2ltcGxDbGFzc05hbWV9PihWOENsYXNzSW5k
ZXg6OiR7Y2xhc3NJbmRleH0sICR2YWx1ZSkgOiAwIjsKKyAgICAgICAgcmV0dXJuICJWOCR7dHlw
ZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
JHtpbXBsQ2xhc3NOYW1lfT4oVjhDbGFzc0luZGV4Ojoke2NsYXNzSW5kZXh9LCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KCR2YWx1ZSkpIDogMCI7CiAgICAgfQogfQogCkluZGV4OiBiaW5k
aW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9WOFByb3h5LmNw
cAkocmV2aXNpb24gNDU1NTgpCisrKyBiaW5kaW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29u
dGV4dChjb25zdAogICAgIC8vIFNldCB1cCB0aGUgRE9NIHdpbmRvdyBhcyB0aGUgcHJvdG90eXBl
IG9mIHRoZSBuZXcgZ2xvYmFsIG9iamVjdC4KICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB3
aW5kb3dDb250ZXh0ID0gbV9jb250ZXh0OwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2lu
ZG93R2xvYmFsID0gd2luZG93Q29udGV4dC0+R2xvYmFsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHdpbmRvd1dyYXBwZXIgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJ
bmRleDo6RE9NV0lORE9XLCB3aW5kb3dHbG9iYWwpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd2luZG93V3JhcHBlciA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4
OjpET01XSU5ET1csIHdpbmRvd0dsb2JhbCk7CiAKICAgICBBU1NFUlQoVjhQcm94eTo6Y29udmVy
dERPTVdyYXBwZXJUb05hdGl2ZTxET01XaW5kb3c+KHdpbmRvd1dyYXBwZXIpID09IG1fZnJhbWUt
PmRvbVdpbmRvdygpKTsKIApAQCAtMjMyNiw0MCArMjMyNiw5IEBAIFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSBWOFByb3h5Ojpkb20KICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpGcm9tSW50
KHR5cGUtPkludDMyVmFsdWUoKSk7CiB9CiAKLXZvaWQqIFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBvYmplY3QpCi17Ci0gICAgLy8gTmF0aXZlIGV2ZW50IGxpc3RlbmVyIGlzIHBl
ciBmcmFtZSwgaXQgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBnZW5lcmljIGZ1bmN0aW9uLgot
ICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7Ci0gICAgQVNT
RVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpFVkVOVFRBUkdFVCk7Ci0KLSAgICBBU1NFUlQobWF5
YmVET01XcmFwcGVyKG9iamVjdCkpOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIE1B
S0VfQ0FTRShUWVBFLCBOQU1FKSBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRToKLSAgICAgICAgRE9N
X05PREVfVFlQRVMoTUFLRV9DQVNFKQotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIFNWR19OT0RF
X1RZUEVTKE1BS0VfQ0FTRSkKLSNlbmRpZgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNU
OgotICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxYTUxIdHRwUmVxdWVz
dD4ob2JqZWN0KTsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RVZFTlQ6Ci0gICAgICAgIHJldHVy
biBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50PihvYmplY3QpOwotICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpDU1NSVUxFOgotICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05h
dGl2ZTxDU1NSdWxlPihvYmplY3QpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSN1bmRlZiBNQUtFX0NBU0UKLQotICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0
aXZlPHZvaWQ+KG9iamVjdCk7Ci19Ci0KLQogdm9pZCogVjhQcm94eTo6Y29udmVydFRvU1ZHUE9E
VHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIGlzV3JhcHBlck9mVHlwZShvYmplY3QsIHR5
cGUpID8gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmplY3QpIDogMDsKKyAgICBy
ZXR1cm4gaXNXcmFwcGVyT2ZUeXBlKG9iamVjdCwgdHlwZSkgPyBjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPHZvaWQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qob2JqZWN0KSkgOiAwOwog
fQogCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1
ZSkKSW5kZXg6IGJpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92
OC9WOFByb3h5LmgJKHJldmlzaW9uIDQ1NTU4KQorKysgYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzgsMTAgKzM3OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIEEgaGVscGVyIGZ1bmN0aW9uIGV4dHJhY3QgbmF0aXZlIG9iamVjdCBwb2ludGVy
IGZyb20gYSBET00gd3JhcHBlcgogICAgICAgICAvLyBhbmQgY2FzdCB0byB0aGUgc3BlY2lmaWVk
IHR5cGUuCiAgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBDPgotICAgICAgICBzdGF0aWMgQyogY29u
dmVydERPTVdyYXBwZXJUb05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQorICAg
ICAgICBzdGF0aWMgQyogY29udmVydERPTVdyYXBwZXJUb05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1heWJlRE9NV3Jh
cHBlcihvYmplY3QpKTsKLSAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwdHIgPSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCktPkdldEludGVybmFsRmllbGQoVjhD
dXN0b206OmtET01XcmFwcGVyT2JqZWN0SW5kZXgpOworICAgICAgICAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHB0ciA9IG9iamVjdC0+R2V0SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdy
YXBwZXJPYmplY3RJbmRleCk7CiAgICAgICAgICAgICByZXR1cm4gZXh0cmFjdENQb2ludGVyPEM+
KHB0cik7CiAgICAgICAgIH0KIApAQCAtNDA3LDkgKzQwNywyNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydE5vZGVUb1Y4
T2JqZWN0KE5vZGUqKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICAgICAgc3Rh
dGljIEMqIGNvbnZlcnRUb05hdGl2ZU9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUg
dHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKKyAgICAgICAgc3RhdGljIEMqIGNv
bnZlcnRUb05hdGl2ZU9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDKj4oY29udmVydFRvTmF0aXZlT2JqZWN0SW1wbCh0eXBlLCBvYmplY3Qp
KTsKKyAgICAgICAgICAgIC8vIE5hdGl2ZSBldmVudCBsaXN0ZW5lciBpcyBwZXIgZnJhbWUsIGl0
IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgZ2VuZXJpYyBmdW5jdGlvbi4KKyAgICAgICAgICAg
IEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7CisgICAgICAgICAg
ICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKKworICAgICAgICAg
ICAgQVNTRVJUKG1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKKworICAgICAgICAgICAgY29uc3Qg
Ym9vbCB0eXBlSXNWYWxpZCA9CisjZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSAvLyAodHlw
ZSAhPSBWOENsYXNzSW5kZXg6OlRZUEUpICYmCisgICAgICAgICAgICAgICAgRE9NX05PREVfVFlQ
RVMoTUFLRV9DQVNFKQorI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICAgICAgU1ZHX05PREVf
VFlQRVMoTUFLRV9DQVNFKQorI2VuZGlmCisjdW5kZWYgTUFLRV9DQVNFCisgICAgICAgICAgICAg
ICAgdHJ1ZTsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlSXNWYWxpZCk7CisKKyAgICAgICAgICAg
IHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEM+KG9iamVjdCk7CiAgICAgICAgIH0K
IAogICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRvbVdyYXBwZXJU
eXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwpAQCAtNDMxLDcgKzQ0Nyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFpc0RPTUV2ZW50V3JhcHBl
cihqc0V2ZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVy
biBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50Pihqc0V2ZW50KTsKKyAgICAgICAgICAg
IHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50Pih2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KGpzRXZlbnQpKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdl
dCopOwpAQCAtNTIyLDggKzUzOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8g
Q2hlY2sgd2hldGhlciBhIFY4IHZhbHVlIGlzIGEgRE9NIEV2ZW50IHdyYXBwZXIuCiAgICAgICAg
IHN0YXRpYyBib29sIGlzRE9NRXZlbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAK
LSAgICAgICAgc3RhdGljIHZvaWQqIGNvbnZlcnRUb05hdGl2ZU9iamVjdEltcGwoVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwotCiAgICAgICAgIC8v
IFRha2UgQyBwb2ludGVyIG91dCBvZiBhIHY4IHdyYXBwZXIuCiAgICAgICAgIHN0YXRpYyB2b2lk
KiBleHRyYWN0Q1BvaW50ZXJJbXBsKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCiAgICAg
ICAgIHsKSW5kZXg6IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU1NTgpCisrKyBiaW5kaW5ncy92
OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NCwxMCArNjQsMTAgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRv
Q2FudmFzUwogICAgICAgICByZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZSh0b1dlYkNvcmVTdHJp
bmcodmFsdWUpKTsKIAogICAgIGlmIChWOENhbnZhc0dyYWRpZW50OjpIYXNJbnN0YW5jZSh2YWx1
ZSkpCi0gICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4UHJveHk6OmNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzR3JhZGllbnQ+KHZhbHVlKSk7CisgICAgICAgIHJldHVy
biBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8
Q2FudmFzR3JhZGllbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSk7CiAK
ICAgICBpZiAoVjhDYW52YXNQYXR0ZXJuOjpIYXNJbnN0YW5jZSh2YWx1ZSkpCi0gICAgICAgIHJl
dHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRp
dmU8Q2FudmFzUGF0dGVybj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpj
cmVhdGUoVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNQYXR0ZXJuPih2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkpOwogCiAgICAgcmV0dXJuIDA7CiB9
CkBAIC00MDUsNyArNDA1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0Nv
bnRleAogICAgIC8vIHdlIGxlYXZlIGl0IG51bGwsIGFuZCBwdXRJbWFnZURhdGEoKSB3aWxsIHRo
cm93IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgogICAgIC8vIChUWVBFX01JU01BVENIX0VSUikuCiAg
ICAgaWYgKFY4UHJveHk6OmlzV3JhcHBlck9mVHlwZShhcmdzWzBdLCBWOENsYXNzSW5kZXg6OklN
QUdFREFUQSkpCi0gICAgICAgIGltYWdlRGF0YSA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRleDo6SU1BR0VEQVRBLCBhcmdzWzBdKTsKKyAgICAg
ICAgaW1hZ2VEYXRhID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEltYWdlRGF0YT4o
VjhDbGFzc0luZGV4OjpJTUFHRURBVEEsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJn
c1swXSkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKSW5kZXg6IGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCShyZXZpc2lvbiA0NTU1OCkKKysrIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4
LDcgQEAgRnJhbWUqIFY4Q3VzdG9tOjpHZXRUYXJnZXRGcmFtZSh2ODo6TG9jYQogICAgIEZyYW1l
KiB0YXJnZXQgPSAwOwogICAgIHN3aXRjaCAoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPklu
dDMyVmFsdWUoKSkpIHsKICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XOiB7Ci0gICAg
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFw
cGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKKyAgICAgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XLCBob3N0KTsKICAgICAgICAgaWYgKHdpbmRvdy5Jc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm4gdGFyZ2V0OwogCkluZGV4OiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01X
aW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdp
bmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NTU4KQorKysgYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIENB
TExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dQb3N0TWVzc2FnZSkKICAgICAvLyAgIHBvc3RNZXNz
YWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyKSB7
CiAgICAgICAgIGlmIChWOFByb3h5Ojppc1dyYXBwZXJPZlR5cGUoYXJnc1sxXSwgVjhDbGFzc0lu
ZGV4OjpNRVNTQUdFUE9SVCkpCi0gICAgICAgICAgICBwb3J0ID0gVjhQcm94eTo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdz
WzFdKTsKKyAgICAgICAgICAgIHBvcnQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoYXJnc1sxXSkpOwogICAgICAgICB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2so
YXJnc1sxXSk7CkBAIC04NTUsNyArODU1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRv
d1NldEludGVydmFsKQogCiB2b2lkIFY4Q3VzdG9tOjpDbGVhclRpbWVvdXRJbXBsKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9
IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdz
LkhvbGRlcigpOwogICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRlcik7CiAgICAg
aWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAg
ICByZXR1cm47CkBAIC04ODIsNyArODgyLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRv
d0NsZWFySW50ZXJ2YQogTkFNRURfQUNDRVNTX0NIRUNLKERPTVdpbmRvdykKIHsKICAgICBBU1NF
UlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1cpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3cgPSBWOFBy
b3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRvdyA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBw
ZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvc3QpOwogICAgIGlmICh3aW5kb3cuSXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyB0aGUgZnJhbWUgaXMgZ29uZS4KIApAQCAt
OTA4LDcgKzkwOCw3IEBAIE5BTUVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cpCiBJTkRFWEVEX0FD
Q0VTU19DSEVDSyhET01XaW5kb3cpCiB7CiAgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUlu
dChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93ID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihW
OENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9zdCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XLCBob3N0KTsKICAgICBpZiAod2luZG93LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkluZGV4OiBiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiA0NTU1OCkKKysrIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRG9jdW1l
bnRFdmFsdWF0ZSkKIAogICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIgPSAwOwogICAgIGlm
IChWOFhQYXRoTlNSZXNvbHZlcjo6SGFzSW5zdGFuY2UoYXJnc1syXSkpCi0gICAgICAgIHJlc29s
dmVyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhD
bGFzc0luZGV4OjpYUEFUSE5TUkVTT0xWRVIsIGFyZ3NbMl0pOworICAgICAgICByZXNvbHZlciA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYUGF0aE5TUmVzb2x2ZXI+KFY4Q2xhc3NJ
bmRleDo6WFBBVEhOU1JFU09MVkVSLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3Nb
Ml0pKTsKICAgICBlbHNlIGlmIChhcmdzWzJdLT5Jc09iamVjdCgpKQogICAgICAgICByZXNvbHZl
ciA9IG5ldyBWOEN1c3RvbVhQYXRoTlNSZXNvbHZlcihhcmdzWzJdLT5Ub09iamVjdCgpKTsKICAg
ICBlbHNlIGlmICghYXJnc1syXS0+SXNOdWxsKCkgJiYgIWFyZ3NbMl0tPklzVW5kZWZpbmVkKCkp
CkBAIC03MCw3ICs3MCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChEb2N1bWVudEV2YWx1YXRlKQog
ICAgIGludCB0eXBlID0gdG9JbnQzMihhcmdzWzNdKTsKICAgICBYUGF0aFJlc3VsdCogaW5SZXN1
bHQgPSAwOwogICAgIGlmIChWOFhQYXRoUmVzdWx0OjpIYXNJbnN0YW5jZShhcmdzWzRdKSkKLSAg
ICAgICAgaW5SZXN1bHQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFBhdGhSZXN1
bHQ+KFY4Q2xhc3NJbmRleDo6WFBBVEhSRVNVTFQsIGFyZ3NbNF0pOworICAgICAgICBpblJlc3Vs
dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYUGF0aFJlc3VsdD4oVjhDbGFzc0lu
ZGV4OjpYUEFUSFJFU1VMVCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzRdKSk7
CiAKICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKICAgICBSZWZQdHI8WFBhdGhS
ZXN1bHQ+IHJlc3VsdCA9IGRvY3VtZW50LT5ldmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9k
ZSwgcmVzb2x2ZXIsIHR5cGUsIGluUmVzdWx0LCBlYyk7CkluZGV4OiBiaW5kaW5ncy92OC9jdXN0
b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NTU1OCkKKysrIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3
IEBAIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblJlbG9hZCkKICAgICAvLyBGSVhNRTogd2Ug
aWdub3JlIHRoZSAiZm9yY2VnZXQiIHBhcmFtZXRlci4KIAogICAgIElOQ19TVEFUUygiRE9NLkxv
Y2F0aW9uLnJlbG9hZCIpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdz
LkhvbGRlcigpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xk
ZXIoKTsKICAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUq
IGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtMjgxLDcgKzI4MSw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChMb2NhdGlvblJlbG9hZCkKIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblJlcGxhY2Up
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24ucmVwbGFjZSIpOwotICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBMb2NhdGlvbiogaW1wID0gVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FU
SU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtMzAy
LDcgKzMwMiw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblJlcGxhY2UpCiBDQUxMQkFD
S19GVU5DX0RFQ0woTG9jYXRpb25Bc3NpZ24pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRp
b24uYXNzaWduIik7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9s
ZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigp
OwogICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9j
YXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAKICAgICBGcmFtZSogZnJh
bWUgPSBpbXAtPmZyYW1lKCk7CkBAIC0zMzMsNyArMzMzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KExvY2F0aW9uVmFsdWVPZikKIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblRvU3RyaW5nKQog
ewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnRvU3RyaW5nIik7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIExvY2F0aW9uKiBpbXAgPSBWOFBy
b3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJ
T04sIGhvbGRlcik7CiAgICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1l
KCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32525</attachid>
            <date>2009-07-09 12:16:03 -0700</date>
            <delta_ts>2009-07-10 11:43:28 -0700</delta_ts>
            <desc>Do not generate long boolen expression unless ASSERTs enabled</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>15407</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ1NTk3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMDktMDct
MDcgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEbyBub3QgZG8gdW5uZWNlc3NhcnkgY29u
dmVyc2lvbnMgZnJvbSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG8KKyAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBhbmQgYWNjb21wYW55aW5nIGNoYW5nZXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk1MworCisgICAgICAgIFRocmVlIHRo
aW5nczoKKworICAgICAgICAxKSBkbyBub3QgY2FzdCBmcm9tIHY4OjpWYWx1ZSB0byB2ODo6T2Jq
ZWN0IGlmIHVubmVjZXNzYXJ5LS0tY2FzdHMgYXJlIGNoZWFwLAorICAgICAgICBidXQgYXJlIG5v
dCBmcmVlICh0aGV5IGNoZWNrIGZvciBlbXB0aW5lc3Mgb2YgaGFuZGxlKTsKKyAgICAgICAgMikg
aW5saW5lIGNvbnZlcnNpb24gZnJvbSB3cmFwcGVyIHRvIG5vZGU7CisgICAgICAgIDMpIHNpbXBs
aWZ5IGNhc2UgdG8gYW4gQVNTRVJULgorCisgICAgICAgIFRoaXMgaXMganVzdCBhIHJlZmFjdG9y
aW5nLCBzbyBubyBuZXcgdGVzdHMgYXJlIG5lZWRlZC4KKworICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVhdGVJbk5ld0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6
OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6
Y29udmVydFRvTmF0aXZlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9DYW52YXNT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhDdXN0b206OkdldFRhcmdldEZyYW1lKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVO
Q19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tOjpDbGVhclRpbWVvdXRJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgIChXZWJDb3Jl
OjpJTkRFWEVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNM
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorCiAyMDA5LTA3LTA3ICBBbnRv
biBNdWhpbiAgPGFudG9ubUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gRmlzaGVyLgpJbmRleDogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9u
IDQ1NTU4KQorKysgYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTgwMCw3ICs4MDAsNyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxiYWNrCiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZUNsYXNzTmFtZSogaW1w
ID0gJmltcF9pbnN0YW5jZTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsIDw8RU5EKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0g
YXJncy5Ib2xkZXIoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3Mu
SG9sZGVyKCk7CiBFTkQKICAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENs
YXNzTmFtZSwgJGNsYXNzSW5kZXgpOwogICAgIH0KQEAgLTE4NTgsNyArMTg1OCw3IEBAIHN1YiBK
U1ZhbHVlVG9OYXRpdmUKIAogICAgICAgICAjIFBlcmZvcm0gdHlwZSBjaGVja3Mgb24gdGhlIHBh
cmFtZXRlciwgaWYgaXQgaXMgZXhwZWN0ZWQgTm9kZSB0eXBlLAogICAgICAgICAjIHJldHVybiBO
VUxMLgotICAgICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDwke2ltcGxDbGFzc05hbWV9PihWOENsYXNzSW5k
ZXg6OiR7Y2xhc3NJbmRleH0sICR2YWx1ZSkgOiAwIjsKKyAgICAgICAgcmV0dXJuICJWOCR7dHlw
ZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
JHtpbXBsQ2xhc3NOYW1lfT4oVjhDbGFzc0luZGV4Ojoke2NsYXNzSW5kZXh9LCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KCR2YWx1ZSkpIDogMCI7CiAgICAgfQogfQogCkluZGV4OiBiaW5k
aW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9WOFByb3h5LmNw
cAkocmV2aXNpb24gNDU1NTgpCisrKyBiaW5kaW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29u
dGV4dChjb25zdAogICAgIC8vIFNldCB1cCB0aGUgRE9NIHdpbmRvdyBhcyB0aGUgcHJvdG90eXBl
IG9mIHRoZSBuZXcgZ2xvYmFsIG9iamVjdC4KICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB3
aW5kb3dDb250ZXh0ID0gbV9jb250ZXh0OwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2lu
ZG93R2xvYmFsID0gd2luZG93Q29udGV4dC0+R2xvYmFsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHdpbmRvd1dyYXBwZXIgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJ
bmRleDo6RE9NV0lORE9XLCB3aW5kb3dHbG9iYWwpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd2luZG93V3JhcHBlciA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4
OjpET01XSU5ET1csIHdpbmRvd0dsb2JhbCk7CiAKICAgICBBU1NFUlQoVjhQcm94eTo6Y29udmVy
dERPTVdyYXBwZXJUb05hdGl2ZTxET01XaW5kb3c+KHdpbmRvd1dyYXBwZXIpID09IG1fZnJhbWUt
PmRvbVdpbmRvdygpKTsKIApAQCAtMjMyNiw0MCArMjMyNiw5IEBAIFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSBWOFByb3h5Ojpkb20KICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpGcm9tSW50
KHR5cGUtPkludDMyVmFsdWUoKSk7CiB9CiAKLXZvaWQqIFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBvYmplY3QpCi17Ci0gICAgLy8gTmF0aXZlIGV2ZW50IGxpc3RlbmVyIGlzIHBl
ciBmcmFtZSwgaXQgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBnZW5lcmljIGZ1bmN0aW9uLgot
ICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7Ci0gICAgQVNT
RVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpFVkVOVFRBUkdFVCk7Ci0KLSAgICBBU1NFUlQobWF5
YmVET01XcmFwcGVyKG9iamVjdCkpOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIE1B
S0VfQ0FTRShUWVBFLCBOQU1FKSBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRToKLSAgICAgICAgRE9N
X05PREVfVFlQRVMoTUFLRV9DQVNFKQotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIFNWR19OT0RF
X1RZUEVTKE1BS0VfQ0FTRSkKLSNlbmRpZgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNU
OgotICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxYTUxIdHRwUmVxdWVz
dD4ob2JqZWN0KTsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RVZFTlQ6Ci0gICAgICAgIHJldHVy
biBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50PihvYmplY3QpOwotICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpDU1NSVUxFOgotICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05h
dGl2ZTxDU1NSdWxlPihvYmplY3QpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSN1bmRlZiBNQUtFX0NBU0UKLQotICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0
aXZlPHZvaWQ+KG9iamVjdCk7Ci19Ci0KLQogdm9pZCogVjhQcm94eTo6Y29udmVydFRvU1ZHUE9E
VHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIGlzV3JhcHBlck9mVHlwZShvYmplY3QsIHR5
cGUpID8gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmplY3QpIDogMDsKKyAgICBy
ZXR1cm4gaXNXcmFwcGVyT2ZUeXBlKG9iamVjdCwgdHlwZSkgPyBjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPHZvaWQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qob2JqZWN0KSkgOiAwOwog
fQogCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1
ZSkKSW5kZXg6IGJpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92
OC9WOFByb3h5LmgJKHJldmlzaW9uIDQ1NTU4KQorKysgYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzgsMTAgKzM3OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIEEgaGVscGVyIGZ1bmN0aW9uIGV4dHJhY3QgbmF0aXZlIG9iamVjdCBwb2ludGVy
IGZyb20gYSBET00gd3JhcHBlcgogICAgICAgICAvLyBhbmQgY2FzdCB0byB0aGUgc3BlY2lmaWVk
IHR5cGUuCiAgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBDPgotICAgICAgICBzdGF0aWMgQyogY29u
dmVydERPTVdyYXBwZXJUb05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQorICAg
ICAgICBzdGF0aWMgQyogY29udmVydERPTVdyYXBwZXJUb05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1heWJlRE9NV3Jh
cHBlcihvYmplY3QpKTsKLSAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwdHIgPSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCktPkdldEludGVybmFsRmllbGQoVjhD
dXN0b206OmtET01XcmFwcGVyT2JqZWN0SW5kZXgpOworICAgICAgICAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHB0ciA9IG9iamVjdC0+R2V0SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdy
YXBwZXJPYmplY3RJbmRleCk7CiAgICAgICAgICAgICByZXR1cm4gZXh0cmFjdENQb2ludGVyPEM+
KHB0cik7CiAgICAgICAgIH0KIApAQCAtNDA3LDkgKzQwNywyNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydE5vZGVUb1Y4
T2JqZWN0KE5vZGUqKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICAgICAgc3Rh
dGljIEMqIGNvbnZlcnRUb05hdGl2ZU9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUg
dHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKKyAgICAgICAgc3RhdGljIEMqIGNv
bnZlcnRUb05hdGl2ZU9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDKj4oY29udmVydFRvTmF0aXZlT2JqZWN0SW1wbCh0eXBlLCBvYmplY3Qp
KTsKKyAgICAgICAgICAgIC8vIE5hdGl2ZSBldmVudCBsaXN0ZW5lciBpcyBwZXIgZnJhbWUsIGl0
IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgZ2VuZXJpYyBmdW5jdGlvbi4KKyAgICAgICAgICAg
IEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7CisgICAgICAgICAg
ICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKKworICAgICAgICAg
ICAgQVNTRVJUKG1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKKworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgdHlwZUlzVmFsaWQgPQorI2RlZmluZSBNQUtFX0NB
U0UoVFlQRSwgTkFNRSkgLy8gKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpUWVBFKSAmJgorICAgICAg
ICAgICAgICAgIERPTV9OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKKyNpZiBFTkFCTEUoU1ZHKQorICAg
ICAgICAgICAgICAgIFNWR19OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKKyNlbmRpZgorI3VuZGVmIE1B
S0VfQ0FTRQorICAgICAgICAgICAgICAgIHRydWU7CisgICAgICAgICAgICBBU1NFUlQodHlwZUlz
VmFsaWQpOworI2VuZGlmCisKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPEM+KG9iamVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlIGRvbVdyYXBwZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4p
OwpAQCAtNDMxLDcgKzQ0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKCFpc0RPTUV2ZW50V3JhcHBlcihqc0V2ZW50KSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZl
PEV2ZW50Pihqc0V2ZW50KTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPEV2ZW50Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGpzRXZlbnQpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2
ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCopOwpAQCAtNTIyLDggKzU0MCw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZhbHVlIGlz
IGEgRE9NIEV2ZW50IHdyYXBwZXIuCiAgICAgICAgIHN0YXRpYyBib29sIGlzRE9NRXZlbnRXcmFw
cGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQqIGNvbnZl
cnRUb05hdGl2ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4pOwotCiAgICAgICAgIC8vIFRha2UgQyBwb2ludGVyIG91dCBvZiBhIHY4
IHdyYXBwZXIuCiAgICAgICAgIHN0YXRpYyB2b2lkKiBleHRyYWN0Q1BvaW50ZXJJbXBsKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCiAgICAgICAgIHsKSW5kZXg6IGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAko
cmV2aXNpb24gNDU1NTgpCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMCArNjQsMTAgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRvQ2FudmFzUwogICAgICAgICByZXR1cm4gQ2Fu
dmFzU3R5bGU6OmNyZWF0ZSh0b1dlYkNvcmVTdHJpbmcodmFsdWUpKTsKIAogICAgIGlmIChWOENh
bnZhc0dyYWRpZW50OjpIYXNJbnN0YW5jZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBDYW52YXNT
dHlsZTo6Y3JlYXRlKFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzR3Jh
ZGllbnQ+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4UHJv
eHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzR3JhZGllbnQ+KHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSk7CiAKICAgICBpZiAoVjhDYW52YXNQYXR0ZXJuOjpI
YXNJbnN0YW5jZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4
UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUGF0dGVybj4odmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpjcmVhdGUoVjhQcm94eTo6Y29udmVydERPTVdy
YXBwZXJUb05hdGl2ZTxDYW52YXNQYXR0ZXJuPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KHZhbHVlKSkpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC00MDUsNyArNDA1LDcgQEAgQ0FMTEJB
Q0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgIC8vIHdlIGxlYXZlIGl0IG51
bGwsIGFuZCBwdXRJbWFnZURhdGEoKSB3aWxsIHRocm93IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgog
ICAgIC8vIChUWVBFX01JU01BVENIX0VSUikuCiAgICAgaWYgKFY4UHJveHk6OmlzV3JhcHBlck9m
VHlwZShhcmdzWzBdLCBWOENsYXNzSW5kZXg6OklNQUdFREFUQSkpCi0gICAgICAgIGltYWdlRGF0
YSA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRl
eDo6SU1BR0VEQVRBLCBhcmdzWzBdKTsKKyAgICAgICAgaW1hZ2VEYXRhID0gVjhQcm94eTo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEltYWdlRGF0YT4oVjhDbGFzc0luZGV4OjpJTUFHRURBVEEsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAKSW5kZXg6IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCShy
ZXZpc2lvbiA0NTU1OCkKKysrIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgRnJhbWUqIFY4Q3VzdG9tOjpHZXRU
YXJnZXRGcmFtZSh2ODo6TG9jYQogICAgIEZyYW1lKiB0YXJnZXQgPSAwOwogICAgIHN3aXRjaCAo
VjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkpIHsKICAgICBjYXNlIFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XOiB7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9X
LCBob3N0KTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cgPSBWOFByb3h5
Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKICAgICAg
ICAgaWYgKHdpbmRvdy5Jc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OwogCklu
ZGV4OiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDQ1
NTU4KQorKysgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dQ
b3N0TWVzc2FnZSkKICAgICAvLyAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7
CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyKSB7CiAgICAgICAgIGlmIChWOFByb3h5Ojppc1dy
YXBwZXJPZlR5cGUoYXJnc1sxXSwgVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCkpCi0gICAgICAg
ICAgICBwb3J0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihW
OENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdzWzFdKTsKKyAgICAgICAgICAgIHBvcnQgPSBW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6
TUVTU0FHRVBPUlQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSkpOwogICAg
ICAgICB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNr
KGFyZ3NbMl0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9T
dHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CkBAIC04NTUsNyArODU1LDcg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1NldEludGVydmFsKQogCiB2b2lkIFY4Q3Vz
dG9tOjpDbGVhclRpbWVvdXRJbXBsKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIERPTVdpbmRvdyog
aW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1csIGhvbGRlcik7CiAgICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFt
ZShpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm47CkBAIC04ODIsNyArODgyLDcg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0NsZWFySW50ZXJ2YQogTkFNRURfQUNDRVNT
X0NIRUNLKERPTVdpbmRvdykKIHsKICAgICBBU1NFUlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRh
dGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpET01XSU5ET1cpOwotICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdp
bmRvdyA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1cs
IGhvc3QpOwogICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
ICAvLyB0aGUgZnJhbWUgaXMgZ29uZS4KIApAQCAtOTA4LDcgKzkwOCw3IEBAIE5BTUVEX0FDQ0VT
U19DSEVDSyhET01XaW5kb3cpCiBJTkRFWEVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cpCiB7CiAg
ICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93
ID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9z
dCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBE
T01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKICAgICBpZiAod2luZG93
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTU1OCkKKysrIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRG9jdW1lbnRFdmFsdWF0ZSkKIAogICAgIFhQYXRoTlNS
ZXNvbHZlciogcmVzb2x2ZXIgPSAwOwogICAgIGlmIChWOFhQYXRoTlNSZXNvbHZlcjo6SGFzSW5z
dGFuY2UoYXJnc1syXSkpCi0gICAgICAgIHJlc29sdmVyID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhDbGFzc0luZGV4OjpYUEFUSE5TUkVTT0xWRVIs
IGFyZ3NbMl0pOworICAgICAgICByZXNvbHZlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxYUGF0aE5TUmVzb2x2ZXI+KFY4Q2xhc3NJbmRleDo6WFBBVEhOU1JFU09MVkVSLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMl0pKTsKICAgICBlbHNlIGlmIChhcmdzWzJd
LT5Jc09iamVjdCgpKQogICAgICAgICByZXNvbHZlciA9IG5ldyBWOEN1c3RvbVhQYXRoTlNSZXNv
bHZlcihhcmdzWzJdLT5Ub09iamVjdCgpKTsKICAgICBlbHNlIGlmICghYXJnc1syXS0+SXNOdWxs
KCkgJiYgIWFyZ3NbMl0tPklzVW5kZWZpbmVkKCkpCkBAIC03MCw3ICs3MCw3IEBAIENBTExCQUNL
X0ZVTkNfREVDTChEb2N1bWVudEV2YWx1YXRlKQogICAgIGludCB0eXBlID0gdG9JbnQzMihhcmdz
WzNdKTsKICAgICBYUGF0aFJlc3VsdCogaW5SZXN1bHQgPSAwOwogICAgIGlmIChWOFhQYXRoUmVz
dWx0OjpIYXNJbnN0YW5jZShhcmdzWzRdKSkKLSAgICAgICAgaW5SZXN1bHQgPSBWOFByb3h5Ojpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8WFBhdGhSZXN1bHQ+KFY4Q2xhc3NJbmRleDo6WFBBVEhSRVNV
TFQsIGFyZ3NbNF0pOworICAgICAgICBpblJlc3VsdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxYUGF0aFJlc3VsdD4oVjhDbGFzc0luZGV4OjpYUEFUSFJFU1VMVCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzRdKSk7CiAKICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0
aW9uQ2F0Y2hlcjsKICAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IHJlc3VsdCA9IGRvY3VtZW50LT5l
dmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZSwgcmVzb2x2ZXIsIHR5cGUsIGluUmVzdWx0
LCBlYyk7CkluZGV4OiBiaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCShyZXZp
c2lvbiA0NTU1OCkKKysrIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChMb2Nh
dGlvblJlbG9hZCkKICAgICAvLyBGSVhNRTogd2UgaWdub3JlIHRoZSAiZm9yY2VnZXQiIHBhcmFt
ZXRlci4KIAogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnJlbG9hZCIpOwotICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBMb2NhdGlvbiogaW1wID0g
VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxP
Q0FUSU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAt
MjgxLDcgKzI4MSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblJlbG9hZCkKIENBTExC
QUNLX0ZVTkNfREVDTChMb2NhdGlvblJlcGxhY2UpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9j
YXRpb24ucmVwbGFjZSIpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdz
LkhvbGRlcigpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xk
ZXIoKTsKICAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUq
IGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtMzAyLDcgKzMwMiw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChMb2NhdGlvblJlcGxhY2UpCiBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25Bc3NpZ24p
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24uYXNzaWduIik7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIExvY2F0aW9uKiBpbXAgPSBWOFBy
b3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJ
T04sIGhvbGRlcik7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CkBAIC0zMzMs
NyArMzMzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uVmFsdWVPZikKIENBTExCQUNL
X0ZVTkNfREVDTChMb2NhdGlvblRvU3RyaW5nKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0
aW9uLnRvU3RyaW5nIik7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3Mu
SG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRl
cigpOwogICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAgICAgaWYgKCFWOFBy
b3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32567</attachid>
            <date>2009-07-10 11:43:28 -0700</date>
            <delta_ts>2009-07-13 06:58:39 -0700</delta_ts>
            <desc>Addressing Mads&apos; comments and merging with new head</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>14482</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ1Njc4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ2LDYgKzEzNDYsNDYgQEAKIAog
MjAwOS0wNy0wNyAgQW50b24gTXVoaW4gIDxhbnRvbm1AY2hyb21pdW0ub3JnPgogCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERvIG5vdCBkbyB1bm5lY2Vz
c2FyeSBjb252ZXJzaW9ucyBmcm9tIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0bworICAgICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGFuZCBhY2NvbXBhbnlpbmcgY2hhbmdlcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2OTUzCisKKyAgICAgICAg
VGhyZWUgdGhpbmdzOgorCisgICAgICAgIDEpIGRvIG5vdCBjYXN0IGZyb20gdjg6OlZhbHVlIHRv
IHY4OjpPYmplY3QgaWYgdW5uZWNlc3NhcnktLS1jYXN0cyBhcmUgY2hlYXAsCisgICAgICAgIGJ1
dCBhcmUgbm90IGZyZWUgKHRoZXkgY2hlY2sgZm9yIGVtcHRpbmVzcyBvZiBoYW5kbGUpOworICAg
ICAgICAyKSBpbmxpbmUgY29udmVyc2lvbiBmcm9tIHdyYXBwZXIgdG8gbm9kZTsKKyAgICAgICAg
Mykgc2ltcGxpZnkgY2FzZSB0byBhbiBBU1NFUlQuCisKKyAgICAgICAgVGhpcyBpcyBqdXN0IGEg
cmVmYWN0b3JpbmcsIHNvIG5vIG5ldyB0ZXN0cyBhcmUgbmVlZGVkLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpjb252ZXJ0VG9TVkdQT0RUeXBlSW1w
bCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6
VjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94
eTo6Y29udmVydFRvTmF0aXZlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0
b0NhbnZhc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOEN1c3RvbTo6R2V0VGFyZ2V0RnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxM
QkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b206OkNsZWFyVGltZW91
dEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfQUNDRVNTX0NIRUNLKToKKyAgICAgICAg
KFdlYkNvcmU6OklOREVYRURfQUNDRVNTX0NIRUNLKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19G
VU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisKKzIwMDktMDct
MDcgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBGaXNoZXIuCiAKICAgICAgICAgU3BlZWQgdXAgY3JlYXRpb24gb2YgVjggd3Jh
cHBlcnMgZm9yIERPTSBub2Rlcy4KSW5kZXg6IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CShyZXZpc2lvbiA0NTY3OCkKKysrIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CSh3b3JraW5nIGNvcHkpCkBAIC04MDAsNyArODAwLDcgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25D
YWxsYmFjawogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVDbGFz
c05hbWUqIGltcCA9ICZpbXBfaW5zdGFuY2U7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xk
ZXIgPSBhcmdzLkhvbGRlcigpOwogRU5ECiAgICAgICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9k
ZSwgJGltcGxDbGFzc05hbWUsICRjbGFzc0luZGV4KTsKICAgICB9CkBAIC0xODU4LDcgKzE4NTgs
NyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAKICAgICAgICAgIyBQZXJmb3JtIHR5cGUgY2hlY2tz
IG9uIHRoZSBwYXJhbWV0ZXIsIGlmIGl0IGlzIGV4cGVjdGVkIE5vZGUgdHlwZSwKICAgICAgICAg
IyByZXR1cm4gTlVMTC4KLSAgICAgICAgcmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2
YWx1ZSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDwke2ltcGxDbGFzc05h
bWV9PihWOENsYXNzSW5kZXg6OiR7Y2xhc3NJbmRleH0sICR2YWx1ZSkgOiAwIjsKKyAgICAgICAg
cmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDwke2ltcGxDbGFzc05hbWV9PihWOENsYXNzSW5kZXg6OiR7Y2xh
c3NJbmRleH0sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoJHZhbHVlKSkgOiAwIjsKICAg
ICB9CiB9CiAKSW5kZXg6IGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24gNDU2NzgpCisrKyBiaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTksMzcgKzU5OSw2
IEBAIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBWOERPTVdyYXBwZXIKICAgICByZXR1cm4g
VjhDbGFzc0luZGV4OjpGcm9tSW50KHR5cGUtPkludDMyVmFsdWUoKSk7CiB9CiAKLXZvaWQqIFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0SW1wbChWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKLXsKLSAgICAvLyBO
YXRpdmUgZXZlbnQgbGlzdGVuZXIgaXMgcGVyIGZyYW1lLCBpdCBjYW5ub3QgYmUgaGFuZGxlZCBi
eSB0aGlzIGdlbmVyaWMgZnVuY3Rpb24uCi0gICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4
OjpFVkVOVExJU1RFTkVSKTsKLSAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5U
VEFSR0VUKTsKLQotICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmpl
Y3QpKTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFN
RSkgY2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6Ci0gICAgICAgIERPTV9OT0RFX1RZUEVTKE1BS0Vf
Q0FTRSkKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBTVkdfTk9ERV9UWVBFUyhNQUtFX0NBU0Up
Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVDoKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8WE1MSHR0cFJlcXVlc3Q+KG9iamVjdCk7Ci0gICAg
Y2FzZSBWOENsYXNzSW5kZXg6OkVWRU5UOgotICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxFdmVudD4ob2JqZWN0KTsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q1NTUlVM
RToKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q1NTUnVsZT4ob2Jq
ZWN0KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0jdW5kZWYgTUFLRV9D
QVNFCi0KLSAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmplY3Qp
OwotfQotCi0KIHZvaWQqIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwoVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmpl
Y3QpCiB7CiAgICAgcmV0dXJuIGlzV3JhcHBlck9mVHlwZShvYmplY3QsIHR5cGUpID8gY29udmVy
dERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmplY3QpIDogMDsKSW5kZXg6IGJpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5o
CShyZXZpc2lvbiA0NTY3OCkKKysrIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDgsNyArMTQ4LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dGVtcGxhdGUgPGNsYXNzIEM+CiAgICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0VG9OYXRpdmVPYmpl
Y3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDKj4o
Y29udmVydFRvTmF0aXZlT2JqZWN0SW1wbCh0eXBlLCBvYmplY3QpKTsKKyAgICAgICAgICAgIC8v
IE5hdGl2ZSBldmVudCBsaXN0ZW5lciBpcyBwZXIgZnJhbWUsIGl0IGNhbm5vdCBiZSBoYW5kbGVk
IGJ5IHRoaXMgZ2VuZXJpYyBmdW5jdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IFY4
Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7CisgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBW
OENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKKworICAgICAgICAgICAgQVNTRVJUKG1heWJlRE9N
V3JhcHBlcihvYmplY3QpKTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAgIGNv
bnN0IGJvb2wgdHlwZUlzVmFsaWQgPQorI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgKHR5
cGUgIT0gVjhDbGFzc0luZGV4OjpUWVBFKSAmJgorICAgICAgICAgICAgICAgIERPTV9OT0RFX1RZ
UEVTKE1BS0VfQ0FTRSkKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICAgICAgICAgIFNWR19OT0RF
X1RZUEVTKE1BS0VfQ0FTRSkKKyNlbmRpZgorI3VuZGVmIE1BS0VfQ0FTRQorICAgICAgICAgICAg
ICAgIHRydWU7CisgICAgICAgICAgICBBU1NFUlQodHlwZUlzVmFsaWQpOworI2VuZGlmCisKKyAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEM+KG9iamVjdCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRv
bVdyYXBwZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwpAQCAtMTkxLDggKzIwOSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZhbHVl
IGlzIGEgRE9NIEV2ZW50IHdyYXBwZXIuCiAgICAgICAgIHN0YXRpYyBib29sIGlzRE9NRXZlbnRX
cmFwcGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQqIGNv
bnZlcnRUb05hdGl2ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4pOwotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY29udmVydFN0eWxlU2hlZXRUb1Y4T2JqZWN0KFN0eWxlU2hlZXQqKTsKICAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Q1NTVmFsdWVUb1Y4T2JqZWN0KENTU1Zh
bHVlKik7CiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydENTU1J1
bGVUb1Y4T2JqZWN0KENTU1J1bGUqKTsKSW5kZXg6IGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lvbiA0NTY3OCkKKysr
IGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNyArNTI3LDcg
QEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dChjb25zdAogICAgIC8vIFNldCB1
cCB0aGUgRE9NIHdpbmRvdyBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBuZXcgZ2xvYmFsIG9iamVj
dC4KICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB3aW5kb3dDb250ZXh0ID0gbV9jb250ZXh0
OwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93R2xvYmFsID0gd2luZG93Q29udGV4
dC0+R2xvYmFsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpbmRvd1dyYXBwZXIgPSBW
OERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIHdp
bmRvd0dsb2JhbCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3dXcmFwcGVyID0g
VjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3
aW5kb3dHbG9iYWwpOwogCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxET01XaW5kb3c+KHdpbmRvd1dyYXBwZXIpID09IG1fZnJhbWUtPmRvbVdpbmRv
dygpKTsKIApJbmRleDogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY3OCkKKysrIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDEwICs2NCwxMCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4g
dG9DYW52YXNTCiAgICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKHRvV2ViQ29yZVN0
cmluZyh2YWx1ZSkpOwogCiAgICAgaWYgKFY4Q2FudmFzR3JhZGllbnQ6Okhhc0luc3RhbmNlKHZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpjcmVhdGUoVjhET01XcmFwcGVyOjpj
b252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPENhbnZhc0dyYWRpZW50Pih2YWx1ZSkpOworICAgICAg
ICByZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFw
cGVyVG9OYXRpdmU8Q2FudmFzR3JhZGllbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
dmFsdWUpKSk7CiAKICAgICBpZiAoVjhDYW52YXNQYXR0ZXJuOjpIYXNJbnN0YW5jZSh2YWx1ZSkp
Ci0gICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4RE9NV3JhcHBlcjo6Y29udmVy
dERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNQYXR0ZXJuPih2YWx1ZSkpOworICAgICAgICByZXR1
cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
YXRpdmU8Q2FudmFzUGF0dGVybj4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkp
KTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtNDA1LDcgKzQwNSw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAvLyB3ZSBsZWF2ZSBpdCBudWxsLCBhbmQg
cHV0SW1hZ2VEYXRhKCkgd2lsbCB0aHJvdyB0aGUgY29ycmVjdCBleGNlcHRpb24KICAgICAvLyAo
VFlQRV9NSVNNQVRDSF9FUlIpLgogICAgIGlmIChWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlw
ZShhcmdzWzBdLCBWOENsYXNzSW5kZXg6OklNQUdFREFUQSkpCi0gICAgICAgIGltYWdlRGF0YSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEltYWdlRGF0YT4oVjhDbGFzc0lu
ZGV4OjpJTUFHRURBVEEsIGFyZ3NbMF0pOworICAgICAgICBpbWFnZURhdGEgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRleDo6SU1BR0VE
QVRBLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogCkluZGV4OiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5n
LmNwcAkocmV2aXNpb24gNDU2NzgpCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5k
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIEZyYW1lKiBWOEN1c3Rv
bTo6R2V0VGFyZ2V0RnJhbWUodjg6OkxvY2EKICAgICBGcmFtZSogdGFyZ2V0ID0gMDsKICAgICBz
d2l0Y2ggKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpKSB7CiAgICAg
Y2FzZSBWOENsYXNzSW5kZXg6OkRPTVdJTkRPVzogewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gd2luZG93ID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XLCBob3N0KTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5k
b3cgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5E
T1csIGhvc3QpOwogICAgICAgICBpZiAod2luZG93LklzRW1wdHkoKSkKICAgICAgICAgICAgIHJl
dHVybiB0YXJnZXQ7CiAKSW5kZXg6IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9t
LmNwcAkocmV2aXNpb24gNDU2NzgpCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsNyArMjc2LDcgQEAgQ0FMTEJBQ0tfRlVO
Q19ERUNMKERPTVdpbmRvd1Bvc3RNZXNzYWdlKQogICAgIC8vICAgcG9zdE1lc3NhZ2UobWVzc2Fn
ZSwgdGFyZ2V0T3JpZ2luKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIpIHsKICAgICAgICAg
aWYgKFY4RE9NV3JhcHBlcjo6aXNXcmFwcGVyT2ZUeXBlKGFyZ3NbMV0sIFY4Q2xhc3NJbmRleDo6
TUVTU0FHRVBPUlQpKQotICAgICAgICAgICAgcG9ydCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdz
WzFdKTsKKyAgICAgICAgICAgIHBvcnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSk7CiAgICAgICAgIHRhcmdldE9yaWdpbiA9IHRvV2Vi
Q29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICB0YXJnZXRPcmlnaW4gPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZp
bmVkQ2hlY2soYXJnc1sxXSk7CkBAIC04NTUsNyArODU1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KERPTVdpbmRvd1NldEludGVydmFsKQogCiB2b2lkIFY4Q3VzdG9tOjpDbGVhclRpbWVvdXRJbXBs
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xk
ZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywg
aG9sZGVyKTsKICAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwg
dHJ1ZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTg4Miw3ICs4ODIsNyBAQCBDQUxMQkFDS19GVU5D
X0RFQ0woRE9NV2luZG93Q2xlYXJJbnRlcnZhCiBOQU1FRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93
KQogewogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgp
KSA9PSBWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdpbmRvdyA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgaG9zdCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cgPSBWOERP
TVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvc3Qp
OwogICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyB0
aGUgZnJhbWUgaXMgZ29uZS4KIApAQCAtOTA4LDcgKzkwOCw3IEBAIE5BTUVEX0FDQ0VTU19DSEVD
SyhET01XaW5kb3cpCiBJTkRFWEVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cpCiB7CiAgICAgQVNT
RVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJ
bmRleDo6RE9NV0lORE9XKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93ID0gVjhE
T01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRvdyA9IFY4RE9NV3JhcHBlcjo6bG9v
a3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9zdCk7CiAgICAgaWYgKHdp
bmRvdy5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU2NzgpCisrKyBiaW5kaW5n
cy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcg
KzYxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50RXZhbHVhdGUpCiAKICAgICBYUGF0
aE5TUmVzb2x2ZXIqIHJlc29sdmVyID0gMDsKICAgICBpZiAoVjhYUGF0aE5TUmVzb2x2ZXI6Okhh
c0luc3RhbmNlKGFyZ3NbMl0pKQotICAgICAgICByZXNvbHZlciA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhDbGFzc0luZGV4OjpYUEFUSE5T
UkVTT0xWRVIsIGFyZ3NbMl0pOworICAgICAgICByZXNvbHZlciA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhDbGFzc0luZGV4OjpYUEFUSE5T
UkVTT0xWRVIsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpOwogICAgIGVs
c2UgaWYgKGFyZ3NbMl0tPklzT2JqZWN0KCkpCiAgICAgICAgIHJlc29sdmVyID0gbmV3IFY4Q3Vz
dG9tWFBhdGhOU1Jlc29sdmVyKGFyZ3NbMl0tPlRvT2JqZWN0KCkpOwogICAgIGVsc2UgaWYgKCFh
cmdzWzJdLT5Jc051bGwoKSAmJiAhYXJnc1syXS0+SXNVbmRlZmluZWQoKSkKQEAgLTcwLDcgKzcw
LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50RXZhbHVhdGUpCiAgICAgaW50IHR5cGUg
PSB0b0ludDMyKGFyZ3NbM10pOwogICAgIFhQYXRoUmVzdWx0KiBpblJlc3VsdCA9IDA7CiAgICAg
aWYgKFY4WFBhdGhSZXN1bHQ6Okhhc0luc3RhbmNlKGFyZ3NbNF0pKQotICAgICAgICBpblJlc3Vs
dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoUmVzdWx0PihWOENs
YXNzSW5kZXg6OlhQQVRIUkVTVUxULCBhcmdzWzRdKTsKKyAgICAgICAgaW5SZXN1bHQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYUGF0aFJlc3VsdD4oVjhDbGFzc0luZGV4
OjpYUEFUSFJFU1VMVCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzRdKSk7CiAK
ICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKICAgICBSZWZQdHI8WFBhdGhSZXN1
bHQ+IHJlc3VsdCA9IGRvY3VtZW50LT5ldmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZSwg
cmVzb2x2ZXIsIHR5cGUsIGluUmVzdWx0LCBlYyk7CkluZGV4OiBiaW5kaW5ncy92OC9jdXN0b20v
VjhMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NTY3OCkKKysrIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOExvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblJlbG9hZCkKICAgICAvLyBGSVhNRTogd2UgaWdu
b3JlIHRoZSAiZm9yY2VnZXQiIHBhcmFtZXRlci4KIAogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0
aW9uLnJlbG9hZCIpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhv
bGRlcigpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIo
KTsKICAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAKICAgICBGcmFt
ZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CkBAIC0yODEsNyArMjgxLDcgQEAgQ0FMTEJBQ0tfRlVO
Q19ERUNMKExvY2F0aW9uUmVsb2FkKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uUmVwbGFj
ZSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5yZXBsYWNlIik7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIExvY2F0aW9uKiBpbXAgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4
OjpMT0NBVElPTiwgaG9sZGVyKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsK
QEAgLTMwMiw3ICszMDIsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25SZXBsYWNlKQog
Q0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uQXNzaWduKQogewogICAgIElOQ19TVEFUUygiRE9N
LkxvY2F0aW9uLmFzc2lnbiIpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBh
cmdzLkhvbGRlcigpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5I
b2xkZXIoKTsKICAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAKICAg
ICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CkBAIC0zMzMsNyArMzMzLDcgQEAgQ0FMTEJB
Q0tfRlVOQ19ERUNMKExvY2F0aW9uVmFsdWVPZikKIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlv
blRvU3RyaW5nKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnRvU3RyaW5nIik7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIExvY2F0aW9u
KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhD
bGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKICAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vz
c0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32659</attachid>
            <date>2009-07-13 06:58:39 -0700</date>
            <delta_ts>2009-07-13 09:21:33 -0700</delta_ts>
            <desc>Switching to NDEBUG</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>14701</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ1NzM4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEwLDYgKzIwMTAsNDYgQEAKIAog
MjAwOS0wNy0wNyAgQW50b24gTXVoaW4gIDxhbnRvbm1AY2hyb21pdW0ub3JnPgogCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERvIG5vdCBkbyB1bm5lY2Vz
c2FyeSBjb252ZXJzaW9ucyBmcm9tIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0bworICAgICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGFuZCBhY2NvbXBhbnlpbmcgY2hhbmdlcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2OTUzCisKKyAgICAgICAg
VGhyZWUgdGhpbmdzOgorCisgICAgICAgIDEpIGRvIG5vdCBjYXN0IGZyb20gdjg6OlZhbHVlIHRv
IHY4OjpPYmplY3QgaWYgdW5uZWNlc3NhcnktLS1jYXN0cyBhcmUgY2hlYXAsCisgICAgICAgIGJ1
dCBhcmUgbm90IGZyZWUgKHRoZXkgY2hlY2sgZm9yIGVtcHRpbmVzcyBvZiBoYW5kbGUpOworICAg
ICAgICAyKSBpbmxpbmUgY29udmVyc2lvbiBmcm9tIHdyYXBwZXIgdG8gbm9kZTsKKyAgICAgICAg
Mykgc2ltcGxpZnkgY2FzZSB0byBhbiBBU1NFUlQuCisKKyAgICAgICAgVGhpcyBpcyBqdXN0IGEg
cmVmYWN0b3JpbmcsIHNvIG5vIG5ldyB0ZXN0cyBhcmUgbmVlZGVkLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpjb252ZXJ0VG9TVkdQT0RUeXBlSW1w
bCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6
VjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94
eTo6Y29udmVydFRvTmF0aXZlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0
b0NhbnZhc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOEN1c3RvbTo6R2V0VGFyZ2V0RnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxM
QkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b206OkNsZWFyVGltZW91
dEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfQUNDRVNTX0NIRUNLKToKKyAgICAgICAg
KFdlYkNvcmU6OklOREVYRURfQUNDRVNTX0NIRUNLKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19G
VU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisKKzIwMDktMDct
MDcgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBGaXNoZXIuCiAKICAgICAgICAgU3BlZWQgdXAgY3JlYXRpb24gb2YgVjggd3Jh
cHBlcnMgZm9yIERPTSBub2Rlcy4KSW5kZXg6IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CShyZXZpc2lvbiA0NTczOCkKKysrIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CSh3b3JraW5nIGNvcHkpCkBAIC04MDAsNyArODAwLDcgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25D
YWxsYmFjawogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVDbGFz
c05hbWUqIGltcCA9ICZpbXBfaW5zdGFuY2U7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xk
ZXIgPSBhcmdzLkhvbGRlcigpOwogRU5ECiAgICAgICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9k
ZSwgJGltcGxDbGFzc05hbWUsICRjbGFzc0luZGV4KTsKICAgICB9CkBAIC0xODU4LDcgKzE4NTgs
NyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAKICAgICAgICAgIyBQZXJmb3JtIHR5cGUgY2hlY2tz
IG9uIHRoZSBwYXJhbWV0ZXIsIGlmIGl0IGlzIGV4cGVjdGVkIE5vZGUgdHlwZSwKICAgICAgICAg
IyByZXR1cm4gTlVMTC4KLSAgICAgICAgcmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2
YWx1ZSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDwke2ltcGxDbGFzc05h
bWV9PihWOENsYXNzSW5kZXg6OiR7Y2xhc3NJbmRleH0sICR2YWx1ZSkgOiAwIjsKKyAgICAgICAg
cmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDwke2ltcGxDbGFzc05hbWV9PihWOENsYXNzSW5kZXg6OiR7Y2xh
c3NJbmRleH0sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoJHZhbHVlKSkgOiAwIjsKICAg
ICB9CiB9CiAKSW5kZXg6IGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24gNDU3MzgpCisrKyBiaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTksMzcgKzU5OSw2
IEBAIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBWOERPTVdyYXBwZXIKICAgICByZXR1cm4g
VjhDbGFzc0luZGV4OjpGcm9tSW50KHR5cGUtPkludDMyVmFsdWUoKSk7CiB9CiAKLXZvaWQqIFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0SW1wbChWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKLXsKLSAgICAvLyBO
YXRpdmUgZXZlbnQgbGlzdGVuZXIgaXMgcGVyIGZyYW1lLCBpdCBjYW5ub3QgYmUgaGFuZGxlZCBi
eSB0aGlzIGdlbmVyaWMgZnVuY3Rpb24uCi0gICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4
OjpFVkVOVExJU1RFTkVSKTsKLSAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5U
VEFSR0VUKTsKLQotICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmpl
Y3QpKTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFN
RSkgY2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6Ci0gICAgICAgIERPTV9OT0RFX1RZUEVTKE1BS0Vf
Q0FTRSkKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBTVkdfTk9ERV9UWVBFUyhNQUtFX0NBU0Up
Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVDoKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8WE1MSHR0cFJlcXVlc3Q+KG9iamVjdCk7Ci0gICAg
Y2FzZSBWOENsYXNzSW5kZXg6OkVWRU5UOgotICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxFdmVudD4ob2JqZWN0KTsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q1NTUlVM
RToKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q1NTUnVsZT4ob2Jq
ZWN0KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0jdW5kZWYgTUFLRV9D
QVNFCi0KLSAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmplY3Qp
OwotfQotCi0KIHZvaWQqIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwoVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmpl
Y3QpCiB7CiAgICAgcmV0dXJuIGlzV3JhcHBlck9mVHlwZShvYmplY3QsIHR5cGUpID8gY29udmVy
dERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmplY3QpIDogMDsKSW5kZXg6IGJpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5o
CShyZXZpc2lvbiA0NTczOCkKKysrIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDgsNyArMTQ4LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dGVtcGxhdGUgPGNsYXNzIEM+CiAgICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0VG9OYXRpdmVPYmpl
Y3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDKj4o
Y29udmVydFRvTmF0aXZlT2JqZWN0SW1wbCh0eXBlLCBvYmplY3QpKTsKKyAgICAgICAgICAgIC8v
IE5hdGl2ZSBldmVudCBsaXN0ZW5lciBpcyBwZXIgZnJhbWUsIGl0IGNhbm5vdCBiZSBoYW5kbGVk
IGJ5IHRoaXMgZ2VuZXJpYyBmdW5jdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9IFY4
Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7CisgICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBW
OENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKKworICAgICAgICAgICAgQVNTRVJUKG1heWJlRE9N
V3JhcHBlcihvYmplY3QpKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIGNvbnN0IGJv
b2wgdHlwZUlzVmFsaWQgPQorI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgKHR5cGUgIT0g
VjhDbGFzc0luZGV4OjpUWVBFKSAmJgorICAgICAgICAgICAgICAgIERPTV9OT0RFX1RZUEVTKE1B
S0VfQ0FTRSkKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICAgICAgICAgIFNWR19OT0RFX1RZUEVT
KE1BS0VfQ0FTRSkKKyNlbmRpZgorI3VuZGVmIE1BS0VfQ0FTRQorICAgICAgICAgICAgICAgIHRy
dWU7CisgICAgICAgICAgICBBU1NFUlQodHlwZUlzVmFsaWQpOworI2VuZGlmCisKKyAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEM+KG9iamVjdCk7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRvbVdyYXBw
ZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwpAQCAtMTkxLDggKzIwOSw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZhbHVlIGlzIGEg
RE9NIEV2ZW50IHdyYXBwZXIuCiAgICAgICAgIHN0YXRpYyBib29sIGlzRE9NRXZlbnRXcmFwcGVy
KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQqIGNvbnZlcnRU
b05hdGl2ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4pOwotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29u
dmVydFN0eWxlU2hlZXRUb1Y4T2JqZWN0KFN0eWxlU2hlZXQqKTsKICAgICAgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Q1NTVmFsdWVUb1Y4T2JqZWN0KENTU1ZhbHVlKik7
CiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydENTU1J1bGVUb1Y4
T2JqZWN0KENTU1J1bGUqKTsKSW5kZXg6IGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lvbiA0NTczOCkKKysrIGJpbmRp
bmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNyArNTI3LDcgQEAgdm9p
ZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dChjb25zdAogICAgIC8vIFNldCB1cCB0aGUg
RE9NIHdpbmRvdyBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBuZXcgZ2xvYmFsIG9iamVjdC4KICAg
ICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB3aW5kb3dDb250ZXh0ID0gbV9jb250ZXh0OwogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93R2xvYmFsID0gd2luZG93Q29udGV4dC0+R2xv
YmFsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpbmRvd1dyYXBwZXIgPSBWOERPTVdy
YXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIHdpbmRvd0ds
b2JhbCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3dXcmFwcGVyID0gVjhET01X
cmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3dH
bG9iYWwpOwogCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05h
dGl2ZTxET01XaW5kb3c+KHdpbmRvd1dyYXBwZXIpID09IG1fZnJhbWUtPmRvbVdpbmRvdygpKTsK
IApJbmRleDogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTczOCkKKysrIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDEwICs2NCwxMCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gdG9DYW52
YXNTCiAgICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKHRvV2ViQ29yZVN0cmluZyh2
YWx1ZSkpOwogCiAgICAgaWYgKFY4Q2FudmFzR3JhZGllbnQ6Okhhc0luc3RhbmNlKHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpjcmVhdGUoVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTmF0aXZlPENhbnZhc0dyYWRpZW50Pih2YWx1ZSkpOworICAgICAgICByZXR1
cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
YXRpdmU8Q2FudmFzR3JhZGllbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUp
KSk7CiAKICAgICBpZiAoVjhDYW52YXNQYXR0ZXJuOjpIYXNJbnN0YW5jZSh2YWx1ZSkpCi0gICAg
ICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05hdGl2ZTxDYW52YXNQYXR0ZXJuPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gQ2Fu
dmFzU3R5bGU6OmNyZWF0ZShWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8
Q2FudmFzUGF0dGVybj4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpKTsKIAog
ICAgIHJldHVybiAwOwogfQpAQCAtNDA1LDcgKzQwNSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChD
YW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAvLyB3ZSBsZWF2ZSBpdCBudWxsLCBhbmQgcHV0SW1h
Z2VEYXRhKCkgd2lsbCB0aHJvdyB0aGUgY29ycmVjdCBleGNlcHRpb24KICAgICAvLyAoVFlQRV9N
SVNNQVRDSF9FUlIpLgogICAgIGlmIChWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlwZShhcmdz
WzBdLCBWOENsYXNzSW5kZXg6OklNQUdFREFUQSkpCi0gICAgICAgIGltYWdlRGF0YSA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEltYWdlRGF0YT4oVjhDbGFzc0luZGV4OjpJ
TUFHRURBVEEsIGFyZ3NbMF0pOworICAgICAgICBpbWFnZURhdGEgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRleDo6SU1BR0VEQVRBLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogCkluZGV4OiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNwcAko
cmV2aXNpb24gNDU3MzgpCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIEZyYW1lKiBWOEN1c3RvbTo6R2V0
VGFyZ2V0RnJhbWUodjg6OkxvY2EKICAgICBGcmFtZSogdGFyZ2V0ID0gMDsKICAgICBzd2l0Y2gg
KFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpKSB7CiAgICAgY2FzZSBW
OENsYXNzSW5kZXg6OkRPTVdJTkRPVzogewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d2luZG93ID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCBob3N0KTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cgPSBW
OERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhv
c3QpOwogICAgICAgICBpZiAod2luZG93LklzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB0
YXJnZXQ7CiAKSW5kZXg6IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAko
cmV2aXNpb24gNDU3MzgpCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNyArMjY1LDYgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KERPTVdpbmRvd1Bvc3RNZXNzYWdlKQogICAgIEFTU0VSVChzb3VyY2UtPmZyYW1lKCkpOwogCiAg
ICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwotCiAgICAgU3RyaW5nIG1lc3NhZ2UgPSB0b1dlYkNv
cmVTdHJpbmcoYXJnc1swXSk7CiAgICAgTWVzc2FnZVBvcnQqIHBvcnQgPSAwOwogICAgIFN0cmlu
ZyB0YXJnZXRPcmlnaW47CkBAIC0yNzYsNyArMjc1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERP
TVdpbmRvd1Bvc3RNZXNzYWdlKQogICAgIC8vICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0
T3JpZ2luKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIpIHsKICAgICAgICAgaWYgKFY4RE9N
V3JhcHBlcjo6aXNXcmFwcGVyT2ZUeXBlKGFyZ3NbMV0sIFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBP
UlQpKQotICAgICAgICAgICAgcG9ydCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdzWzFdKTsKKyAg
ICAgICAgICAgIHBvcnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNz
YWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdChhcmdzWzFdKSk7CiAgICAgICAgIHRhcmdldE9yaWdpbiA9IHRvV2ViQ29yZVN0cmlu
Z1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKTsKICAgICB9IGVsc2UgewogICAgICAg
ICB0YXJnZXRPcmlnaW4gPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2so
YXJnc1sxXSk7CkBAIC04NTUsNyArODU0LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRv
d1NldEludGVydmFsKQogCiB2b2lkIFY4Q3VzdG9tOjpDbGVhclRpbWVvdXRJbXBsKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9
IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdz
LkhvbGRlcigpOwogICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsK
ICAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTg4Miw3ICs4ODEsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9N
V2luZG93Q2xlYXJJbnRlcnZhCiBOQU1FRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQogewogICAg
IEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENs
YXNzSW5kZXg6OkRPTVdJTkRPVyk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpbmRvdyA9
IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywg
aG9zdCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cgPSBWOERPTVdyYXBwZXI6
Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvc3QpOwogICAgIGlm
ICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyB0aGUgZnJhbWUg
aXMgZ29uZS4KIApAQCAtOTA4LDcgKzkwNyw3IEBAIE5BTUVEX0FDQ0VTU19DSEVDSyhET01XaW5k
b3cpCiBJTkRFWEVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cpCiB7CiAgICAgQVNTRVJUKFY4Q2xh
c3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93ID0gVjhET01XcmFwcGVy
Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKKyAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRvdyA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3Jh
cHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9zdCk7CiAgICAgaWYgKHdpbmRvdy5Jc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU3MzgpCisrKyBiaW5kaW5ncy92OC9jdXN0
b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50RXZhbHVhdGUpCiAKICAgICBYUGF0aE5TUmVzb2x2
ZXIqIHJlc29sdmVyID0gMDsKICAgICBpZiAoVjhYUGF0aE5TUmVzb2x2ZXI6Okhhc0luc3RhbmNl
KGFyZ3NbMl0pKQotICAgICAgICByZXNvbHZlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhDbGFzc0luZGV4OjpYUEFUSE5TUkVTT0xWRVIs
IGFyZ3NbMl0pOworICAgICAgICByZXNvbHZlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhDbGFzc0luZGV4OjpYUEFUSE5TUkVTT0xWRVIs
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpOwogICAgIGVsc2UgaWYgKGFy
Z3NbMl0tPklzT2JqZWN0KCkpCiAgICAgICAgIHJlc29sdmVyID0gbmV3IFY4Q3VzdG9tWFBhdGhO
U1Jlc29sdmVyKGFyZ3NbMl0tPlRvT2JqZWN0KCkpOwogICAgIGVsc2UgaWYgKCFhcmdzWzJdLT5J
c051bGwoKSAmJiAhYXJnc1syXS0+SXNVbmRlZmluZWQoKSkKQEAgLTcwLDcgKzcwLDcgQEAgQ0FM
TEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50RXZhbHVhdGUpCiAgICAgaW50IHR5cGUgPSB0b0ludDMy
KGFyZ3NbM10pOwogICAgIFhQYXRoUmVzdWx0KiBpblJlc3VsdCA9IDA7CiAgICAgaWYgKFY4WFBh
dGhSZXN1bHQ6Okhhc0luc3RhbmNlKGFyZ3NbNF0pKQotICAgICAgICBpblJlc3VsdCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoUmVzdWx0PihWOENsYXNzSW5kZXg6
OlhQQVRIUkVTVUxULCBhcmdzWzRdKTsKKyAgICAgICAgaW5SZXN1bHQgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYUGF0aFJlc3VsdD4oVjhDbGFzc0luZGV4OjpYUEFUSFJF
U1VMVCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzRdKSk7CiAKICAgICB2ODo6
VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKICAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IHJlc3Vs
dCA9IGRvY3VtZW50LT5ldmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZSwgcmVzb2x2ZXIs
IHR5cGUsIGluUmVzdWx0LCBlYyk7CkluZGV4OiBiaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlv
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25D
dXN0b20uY3BwCShyZXZpc2lvbiA0NTczOCkKKysrIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0
aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBAIENBTExCQUNL
X0ZVTkNfREVDTChMb2NhdGlvblJlbG9hZCkKICAgICAvLyBGSVhNRTogd2UgaWdub3JlIHRoZSAi
Zm9yY2VnZXQiIHBhcmFtZXRlci4KIAogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnJlbG9h
ZCIpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBM
b2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRp
b24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAKICAgICBGcmFtZSogZnJhbWUg
PSBpbXAtPmZyYW1lKCk7CkBAIC0yODEsNyArMjgxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKExv
Y2F0aW9uUmVsb2FkKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uUmVwbGFjZSkKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5yZXBsYWNlIik7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElP
TiwgaG9sZGVyKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKQEAgLTMwMiw3
ICszMDIsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25SZXBsYWNlKQogQ0FMTEJBQ0tf
RlVOQ19ERUNMKExvY2F0aW9uQXNzaWduKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9u
LmFzc2lnbiIpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRl
cigpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsK
ICAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAKICAgICBGcmFtZSog
ZnJhbWUgPSBpbXAtPmZyYW1lKCk7CkBAIC0zMzMsNyArMzMzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKExvY2F0aW9uVmFsdWVPZikKIENBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblRvU3RyaW5n
KQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnRvU3RyaW5nIik7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIExvY2F0aW9uKiBpbXAgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4
OjpMT0NBVElPTiwgaG9sZGVyKTsKICAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGlt
cC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cg==
</data>
<flag name="review"
          id="17054"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>