<?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>94671</bug_id>
          
          <creation_ts>2012-08-21 23:22:27 -0700</creation_ts>
          <short_desc>Implement UndoManager&apos;s item() method</short_desc>
          <delta_ts>2012-08-22 22:57:52 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Sukolsak Sakshuwong">sukolsak</reporter>
          <assigned_to name="Sukolsak Sakshuwong">sukolsak</assigned_to>
          <cc>abarth</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>mifenton</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sukolsak</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>701597</commentid>
    <comment_count>0</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2012-08-21 23:22:27 -0700</bug_when>
    <thetext>Implement UndoManager&apos;s item() method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701617</commentid>
    <comment_count>1</comment_count>
      <attachid>159871</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2012-08-21 23:41:19 -0700</bug_when>
    <thetext>Created attachment 159871
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702493</commentid>
    <comment_count>2</comment_count>
      <attachid>160028</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2012-08-22 16:06:32 -0700</bug_when>
    <thetext>Created attachment 160028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702499</commentid>
    <comment_count>3</comment_count>
      <attachid>160028</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-22 16:19:34 -0700</bug_when>
    <thetext>Comment on attachment 160028
Patch

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

&gt; Source/WebCore/bindings/v8/custom/V8UndoManagerCustom.cpp:82
&gt; +            v8::Handle&lt;v8::Object&gt; object = v8::Object::New();
&gt; +            object-&gt;ForceSet(v8::String::NewSymbol(&quot;label&quot;), v8::String::NewSymbol(&quot;[Editing command]&quot;));

We shouldn&apos;t be creating new object each time we return.
e.g. if you do undoManager.item(0)[0].myProperty = &apos;foo&apos;;
then I should be able to get &apos;foo&apos; on
undoManager.item(0)[0].myProperty
even if item(0)[0] was an object added for an automatic transaction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702525</commentid>
    <comment_count>4</comment_count>
      <attachid>160028</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-22 16:58:20 -0700</bug_when>
    <thetext>Comment on attachment 160028
Patch

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

It might make sense to use custom binding...

&gt; Source/WebCore/bindings/v8/custom/V8UndoManagerCustom.cpp:70
&gt; +        return v8::Null(args.GetIsolate());

I guess we normally throw some exception in such a case. (e.g. JavaScript RangeError or INDEX_SIZE_ERR of DOM exception etc). We might want to update the spec if needed.

&gt; Source/WebCore/bindings/v8/custom/V8UndoManagerCustom.cpp:76
&gt; +    for (size_t i = 0; i &lt; entry.size(); ++i) {

Nit: i =&gt; index

&gt;&gt; Source/WebCore/bindings/v8/custom/V8UndoManagerCustom.cpp:82
&gt;&gt; +            object-&gt;ForceSet(v8::String::NewSymbol(&quot;label&quot;), v8::String::NewSymbol(&quot;[Editing command]&quot;));
&gt; 
&gt; We shouldn&apos;t be creating new object each time we return.
&gt; e.g. if you do undoManager.item(0)[0].myProperty = &apos;foo&apos;;
&gt; then I should be able to get &apos;foo&apos; on
&gt; undoManager.item(0)[0].myProperty
&gt; even if item(0)[0] was an object added for an automatic transaction.

We don&apos;t want to use ForceSet() unless we have a strong reason to use it. Why isn&apos;t Set() enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702617</commentid>
    <comment_count>5</comment_count>
      <attachid>160061</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2012-08-22 18:51:25 -0700</bug_when>
    <thetext>Created attachment 160061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702618</commentid>
    <comment_count>6</comment_count>
      <attachid>160061</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-22 18:52:33 -0700</bug_when>
    <thetext>Comment on attachment 160061
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +

You need to describe what you&apos;re doing here.

&gt; Source/WebCore/bindings/v8/custom/V8UndoManagerCustom.cpp:81
&gt; +            v8::Handle&lt;v8::Object&gt; object = v8::Object::New();

Please add a FIXME here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702636</commentid>
    <comment_count>7</comment_count>
      <attachid>160066</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2012-08-22 19:18:15 -0700</bug_when>
    <thetext>Created attachment 160066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702670</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-22 21:04:54 -0700</bug_when>
    <thetext>What is your plan about introducing DOMTransaction C++ interface, as we discussed in IRC?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702674</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-22 21:21:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; What is your plan about introducing DOMTransaction C++ interface, as we discussed in IRC?

I think we need to discusss that on public-webapps first as it requires a spec change. But it could also be that adding the C++ backing object may not dramatically simplify the binding code as we still have callback methods on that object. Really, we need to move to event model to get the most out of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702676</commentid>
    <comment_count>10</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-22 21:29:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; What is your plan about introducing DOMTransaction C++ interface, as we discussed in IRC?
&gt; 
&gt; I think we need to discusss that on public-webapps first as it requires a spec change. But it could also be that adding the C++ backing object may not dramatically simplify the binding code as we still have callback methods on that object.

OK. I don&apos;t have a strong objection to the current patch, but IMHO we might want to sophisticate the design before implementing it. I&apos;d like to hear opinions of others.

&gt; Really, we need to move to event model to get the most out of it.

This will simplify everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702714</commentid>
    <comment_count>11</comment_count>
      <attachid>160066</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 22:57:48 -0700</bug_when>
    <thetext>Comment on attachment 160066
Patch

Clearing flags on attachment: 160066

Committed r126392: &lt;http://trac.webkit.org/changeset/126392&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702715</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 22:57:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159871</attachid>
            <date>2012-08-21 23:41:19 -0700</date>
            <delta_ts>2012-08-22 16:06:29 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-94671-20120821234358.patch</filename>
            <type>text/plain</type>
            <size>7778</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjI2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA4LTIxICBTdWtvbHNh
ayBTYWtzaHV3b25nICA8c3Vrb2xzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQg
VW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvdW5kb21hbmFnZXIvdW5kb21hbmFnZXIt
aXRlbS5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VuZG9NYW5hZ2VyQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVW5kb01hbmFnZXI6Oml0ZW0pOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4VW5kb01hbmFnZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhVbmRvTWFuYWdlcjo6aXRlbUNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGVkaXRpbmcvVW5kb01hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNhY3Rpb25zRm9yRW50cnkpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpVbmRvTWFuYWdlcjo6aXRlbSk6CisgICAgICAgICogZWRpdGlu
Zy9VbmRvTWFuYWdlci5oOgorICAgICAgICAoVW5kb01hbmFnZXIpOgorICAgICAgICAqIGVkaXRp
bmcvVW5kb01hbmFnZXIuaWRsOgorCiAyMDEyLTA4LTIxICBLZW50YXJvIEhhcmEgIDxoYXJha2Vu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIE1vdmUgU3RyaW5nIHJlbGF0ZWQgY29kZSBp
biBWOEJpbmRpbmcgdG8gYSBzZXBhcmF0ZSBmaWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1VuZG9NYW5hZ2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1VuZG9NYW5hZ2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI2MjU5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvTWFuYWdlckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEyIEBAIEpTVmFsdWUgSlNVbmRvTWFuYWdlcjo6
dHJhbnNhY3QoRXhlY1N0YXQKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAorSlNWYWx1
ZSBKU1VuZG9NYW5hZ2VyOjppdGVtKEV4ZWNTdGF0ZSopCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudCBKU0MgYmluZGluZ3MKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwogfQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFVuZG9NYW5h
Z2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhVbmRvTWFuYWdlckN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFVuZG9NYW5hZ2VyQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsNiArNjAsMzEgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VW5k
b01hbmFnZXI6OnRyYQogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhVbmRvTWFuYWdlcjo6aXRlbUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVW5kb01hbmFnZXIuaXRlbSIpOworICAg
IGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOworICAgIFVuZG9NYW5hZ2VyKiBpbXAgPSBW
OFVuZG9NYW5hZ2VyOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKworICAgIEVYQ0VQVElPTl9C
TE9DSyh1bnNpZ25lZCwgaW5kZXgsIHRvVUludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
RE9NVHJhbnNhY3Rpb24+ID4mIHRyYW5zYWN0aW9ucyA9IGltcC0+aXRlbShpbmRleCk7CisgICAg
CisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcodHJhbnNh
Y3Rpb25zLnNpemUoKSk7CisgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBhcmdzLkdldElzb2xh
dGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zYWN0aW9ucy5zaXplKCk7ICsr
aSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdHJhbnNhY3Rpb25XcmFwcGVyVmFs
dWUgPSB0b1Y4KHRyYW5zYWN0aW9uc1tpXS5nZXQoKSwgaXNvbGF0ZSk7CisgICAgICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gdHJhbnNhY3Rpb25XcmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdCh0cmFuc2FjdGlvbldyYXBwZXJWYWx1ZSk7CisgICAgICAgIGlmICh0cmFuc2Fj
dGlvbldyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7
CisKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZGF0YSA9IHRyYW5zYWN0aW9uV3JhcHBl
ci0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmRvbVRyYW5zYWN0aW9uRGF0
YSgpKTsKKyAgICAgICAgcmVzdWx0LT5TZXQodjhJbnRlZ2VyKGksIGlzb2xhdGUpLCBkYXRhKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFVORE9fTUFOQUdFUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVW5kb01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVW5kb01hbmFnZXIuY3BwCShyZXZpc2lvbiAxMjYyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1VuZG9NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCwyOSBA
QCB2b2lkIFVuZG9NYW5hZ2VyOjpyZWRvKEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgbV9yZWRvU3Rh
Y2sucmVtb3ZlTGFzdCgpOwogfQogCitzdGF0aWMgVmVjdG9yPFJlZlB0cjxET01UcmFuc2FjdGlv
bj4gPiB0cmFuc2FjdGlvbnNGb3JFbnRyeShjb25zdCBVbmRvTWFuYWdlckVudHJ5JiBlbnRyeSkK
K3sKKyAgICBWZWN0b3I8UmVmUHRyPERPTVRyYW5zYWN0aW9uPiA+IHRyYW5zYWN0aW9uczsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJ5LnNpemUoKTsgKytpKSB7CisgICAgICAgIFVu
ZG9TdGVwKiBzdGVwID0gZW50cnlbaV0uZ2V0KCk7CisgICAgICAgIGlmIChzdGVwLT5pc0RPTVRy
YW5zYWN0aW9uKCkpCisgICAgICAgICAgICB0cmFuc2FjdGlvbnMuYXBwZW5kKHN0YXRpY19jYXN0
PERPTVRyYW5zYWN0aW9uKj4oc3RlcCkpOworICAgICAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5n
IHdoZW4gc3RlcCBpcyBub3QgYSBET01UcmFuc2FjdGlvbgorICAgIH0KKyAgICByZXR1cm4gdHJh
bnNhY3Rpb25zOworfQorCitWZWN0b3I8UmVmUHRyPERPTVRyYW5zYWN0aW9uPiA+IFVuZG9NYW5h
Z2VyOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIC8vIEZJWE1FOiByZXR1cm4g
bnVsbCwgbm90IGFuIGVtcHR5IGFycmF5LCB3aGVuIGluZGV4IGlzIG91dCBvZiByYW5nZS4KKyAg
ICAvLyBGSVhNRTogbmVlZCB0byByZXZlcnNlIHRoZSBvcmRlciBvZiB0cmFuc2FjdGlvbnMgaW4g
dGhlIHJlZG8gc3RhY2suCisgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQorICAgICAgICByZXR1
cm4gVmVjdG9yPFJlZlB0cjxET01UcmFuc2FjdGlvbj4gPigpOworICAgIGlmIChpbmRleCA8IG1f
cmVkb1N0YWNrLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uc0ZvckVudHJ5KCpt
X3JlZG9TdGFja1tpbmRleF0pOworICAgIHJldHVybiB0cmFuc2FjdGlvbnNGb3JFbnRyeSgqbV91
bmRvU3RhY2tbbGVuZ3RoKCkgLSBpbmRleCAtIDFdKTsKK30KKwogdm9pZCBVbmRvTWFuYWdlcjo6
cmVnaXN0ZXJVbmRvU3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPiBzdGVwKQogewogICAgIGlmICgh
bV9pc0luUHJvZ3Jlc3MpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5kb01hbmFn
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1VuZG9NYW5hZ2VyLmgJ
KHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5kb01hbmFnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmRv
KEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgdm9pZCByZWRvKEV4
Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAKKyAgICBWZWN0b3I8UmVmUHRy
PERPTVRyYW5zYWN0aW9uPiA+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworCiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV91bmRvU3RhY2suc2l6ZSgpICsgbV9yZWRv
U3RhY2suc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3JlZG9TdGFjay5zaXplKCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9VbmRv
TWFuYWdlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9VbmRvTWFu
YWdlci5pZGwJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5k
b01hbmFnZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgdm9pZCByZWRvKCkKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24p
OwogCisgICAgICAgIFtDdXN0b21dIHNlcXVlbmNlPERPTVRyYW5zYWN0aW9uPiBpdGVtKGluIHVu
c2lnbmVkIGxvbmcgaW5kZXgpOworCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGxlbmd0aDsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
cG9zaXRpb247CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjI2NSkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA4LTIxICBTdWtv
bHNhayBTYWtzaHV3b25nICA8c3Vrb2xzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1l
bnQgVW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdlci1p
dGVtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy91bmRvbWFuYWdlci91
bmRvbWFuYWdlci1pdGVtLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA4LTIxICBEb21pbmljIENvb25l
eSAgPGRvbWluaWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3
ZWQgZ2FyZGVuaW5nLgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvbWFuYWdlci91bmRv
bWFuYWdlci1pdGVtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0
aW5nL3VuZG9tYW5hZ2VyL3VuZG9tYW5hZ2VyLWl0ZW0tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdlci1pdGVtLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitUaGlzIHRlc3RzIFVuZG9N
YW5hZ2VyJ3MgaXRlbSgpIG1ldGhvZC4KKworUEFTUyB1bmRvTWFuYWdlciBoYXMgcHJvcGVydHkg
aXRlbS4gCitQQVNTIEFmdGVyIGEgdHJhbnNhY3QgY2FsbCwgdW5kb01hbmFnZXIuaXRlbSgwKSBy
ZXR1cm5zIGFuIGFycmF5IG9mIHRoYXQgdHJhbnNhY3Rpb24uIAorCkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL3VuZG9tYW5hZ2VyL3VuZG9tYW5hZ2VyLWl0ZW0uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG9tYW5hZ2VyL3VuZG9tYW5hZ2VyLWl0ZW0uaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvdW5kb21hbmFnZXIvdW5kb21hbmFn
ZXItaXRlbS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VW5kb01hbmFnZXIuaXRlbSgpPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KK1RoaXMgdGVzdHMgVW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9k
LgorCis8c2NyaXB0PgordmFyIHVuZG9NYW5hZ2VyID0gZG9jdW1lbnQudW5kb01hbmFnZXI7CisK
K3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgYXNzZXJ0X2lkbF9hdHRyaWJ1dGUodW5kb01hbmFnZXIs
ICJpdGVtIik7Cit9LCAidW5kb01hbmFnZXIgaGFzIHByb3BlcnR5IGl0ZW0uIik7CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisJdmFyIHRyYW5zYWN0aW9uID0geworICAgICAgICAiZXhlY3V0ZSI6IGZ1
bmN0aW9uKCkgeyB9LAorICAgICAgICAidW5kbyI6IGZ1bmN0aW9uKCkgeyB9LAorICAgICAgICAi
cmVkbyI6IGZ1bmN0aW9uKCkgeyB9LAorICAgIH07CisgICAgdW5kb01hbmFnZXIudHJhbnNhY3Qo
dHJhbnNhY3Rpb24pOworICAgIHZhciBlbnRyeSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisKKyAg
ICBhc3NlcnRfZXF1YWxzKGVudHJ5Lmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhlbnRy
eVswXSwgdHJhbnNhY3Rpb24pOworfSwgIkFmdGVyIGEgdHJhbnNhY3QgY2FsbCwgdW5kb01hbmFn
ZXIuaXRlbSgwKSByZXR1cm5zIGFuIGFycmF5IG9mIHRoYXQgdHJhbnNhY3Rpb24uIik7CisKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160028</attachid>
            <date>2012-08-22 16:06:32 -0700</date>
            <delta_ts>2012-08-22 18:51:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94671-20120822160917.patch</filename>
            <type>text/plain</type>
            <size>12777</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjM2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA4LTIyICBTdWtvbHNh
ayBTYWtzaHV3b25nICA8c3Vrb2xzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQg
VW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvdW5kb21hbmFnZXIvdW5kb21hbmFnZXIt
aXRlbS5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VuZG9NYW5hZ2VyQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVW5kb01hbmFnZXI6Oml0ZW0pOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVHJhbnNhY3Rpb246OmRhdGEpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01UcmFuc2FjdGlvbjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpET01UcmFuc2FjdGlvbjo6Z2V0RnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RPTVRyYW5zYWN0aW9uLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4VW5kb01h
bmFnZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhVbmRvTWFuYWdlcjo6dHJhbnNh
Y3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFVuZG9NYW5hZ2VyOjppdGVtQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZWRpdGluZy9VbmRvTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpVbmRvTWFuYWdlcjo6aXRlbSk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBlZGl0aW5nL1VuZG9NYW5hZ2VyLmg6CisgICAgICAgIChVbmRvTWFu
YWdlcik6CisgICAgICAgICogZWRpdGluZy9VbmRvTWFuYWdlci5pZGw6CisKIDIwMTItMDgtMjIg
IEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gTW92
ZSBjb250ZXh0KCkgZnJvbSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb01hbmFnZXJDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb01hbmFnZXJDdXN0b20uY3BwCShy
ZXZpc2lvbiAxMjYyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9NYW5h
Z2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTIgQEAgSlNWYWx1ZSBK
U1VuZG9NYW5hZ2VyOjp0cmFuc2FjdChFeGVjU3RhdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCitKU1ZhbHVlIEpTVW5kb01hbmFnZXI6Oml0ZW0oRXhlY1N0YXRlKikKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50IEpTQyBiaW5kaW5ncworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworfQorCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
VHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTVRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMTI2MjU5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxNyAr
OTYsMjkgQEAgdm9pZCBET01UcmFuc2FjdGlvbjo6cmVhcHBseSgpCiAgICAgICAgIG1fdW5kb01h
bmFnZXItPnJlZ2lzdGVyVW5kb1N0ZXAodGhpcyk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPiBET01UcmFuc2FjdGlvbjo6Z2V0RnVuY3Rpb24oY29uc3QgY2hhciogcHJvcGVydHlOYW1l
KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IERPTVRyYW5zYWN0aW9uOjpkYXRhKCkKIHsKICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KHRvVjgodGhpcykpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPigpOworICAgICAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJuIHdyYXBwZXItPkdldEhpZGRlblZhbHVlKFY4SGlk
ZGVuUHJvcGVydHlOYW1lOjpkb21UcmFuc2FjdGlvbkRhdGEoKSk7Cit9CiAKLSAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiBkYXRhID0gd3JhcHBlci0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9w
ZXJ0eU5hbWU6OmRvbVRyYW5zYWN0aW9uRGF0YSgpKTsKLSAgICBpZiAoZGF0YS5Jc0VtcHR5KCkg
fHwgIWRhdGEtPklzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4oKTsKK3ZvaWQgRE9NVHJhbnNhY3Rpb246OnNldERhdGEodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG5ld0RhdGEpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh0b1Y4KHRoaXMpKTsKKyAgICBpZiAod3JhcHBlci5J
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICB3cmFwcGVyLT5TZXRIaWRkZW5WYWx1ZShW
OEhpZGRlblByb3BlcnR5TmFtZTo6ZG9tVHJhbnNhY3Rpb25EYXRhKCksIG5ld0RhdGEpOworfQog
Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6Ok9iamVj
dD46OkNhc3QoZGF0YSktPkdldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2wocHJvcGVydHlOYW1lKSk7
Cit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gRE9NVHJhbnNhY3Rpb246OmdldEZ1bmN0aW9uKGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGlj
dGlvbmFyeSA9IGRhdGEoKTsKKyAgICBpZiAoZGljdGlvbmFyeS5Jc0VtcHR5KCkgfHwgIWRpY3Rp
b25hcnktPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
bj4oKTsKKyAgICAKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBmdW5jdGlvbiA9IHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoZGljdGlvbmFyeSktPkdldCh2ODo6U3RyaW5nOjpOZXdTeW1i
b2wocHJvcGVydHlOYW1lKSk7CiAgICAgaWYgKGZ1bmN0aW9uLklzRW1wdHkoKSB8fCAhZnVuY3Rp
b24tPklzRnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
PigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01UcmFuc2FjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVRyYW5zYWN0aW9u
LmgJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVRy
YW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gRWRpdEFjdGlvblVuc3BlY2lmaWVkOyB9CiAgICAgdmlydHVhbCBib29sIGlzRE9NVHJhbnNh
Y3Rpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZGF0YSgpOworICAgIHZvaWQgc2V0RGF0YSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4pOworCiAgICAgVW5kb01hbmFnZXIqIHVuZG9NYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV91
bmRvTWFuYWdlcjsgfQogICAgIHZvaWQgc2V0VW5kb01hbmFnZXIoVW5kb01hbmFnZXIqIHVuZG9N
YW5hZ2VyKSB7IG1fdW5kb01hbmFnZXIgPSB1bmRvTWFuYWdlcjsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhVbmRvTWFuYWdlckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VW5kb01hbmFnZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAxMjYyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhVbmRvTWFuYWdlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDYgQEAKICNpbmNsdWRlICJET01UcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJWOERPTVRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSw5ICs0OCw3
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFVuZG9NYW5hZ2VyOjp0cmEKICAgICBFWENFUFRJ
T05fQkxPQ0soYm9vbCwgbWVyZ2UsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERl
ZmF1bHRJc1VuZGVmaW5lZCktPkJvb2xlYW5WYWx1ZSgpKTsKIAogICAgIFJlZlB0cjxET01UcmFu
c2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBET01UcmFuc2FjdGlvbjo6Y3JlYXRlKFdvcmxkQ29udGV4
dEhhbmRsZShVc2VDdXJyZW50V29ybGQpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRy
YW5zYWN0aW9uV3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodG9WOCh0cmFu
c2FjdGlvbi5nZXQoKSkpOwotCi0gICAgdHJhbnNhY3Rpb25XcmFwcGVyLT5TZXRIaWRkZW5WYWx1
ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6ZG9tVHJhbnNhY3Rpb25EYXRhKCksIGRpY3Rpb25hcnkp
OworICAgIHRyYW5zYWN0aW9uLT5zZXREYXRhKGRpY3Rpb25hcnkpOwogCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgaW1wLT50cmFuc2FjdCh0cmFuc2FjdGlvbiwgbWVyZ2UsIGVjKTsK
QEAgLTYwLDYgKzU3LDM1IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFVuZG9NYW5hZ2VyOjp0
cmEKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4VW5kb01hbmFnZXI6Oml0ZW1DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQor
eworICAgIElOQ19TVEFUUygiRE9NLlVuZG9NYW5hZ2VyLml0ZW0iKTsKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICBVbmRvTWFuYWdlciogaW1wID0gVjhVbmRvTWFuYWdl
cjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisKKyAgICBFWENFUFRJT05fQkxPQ0sodW5zaWdu
ZWQsIGluZGV4LCB0b1VJbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZh
dWx0SXNVbmRlZmluZWQpKSk7CisKKyAgICBpZiAoaW5kZXggPj0gaW1wLT5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuIHY4OjpOdWxsKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKworICAgIGNvbnN0IFVu
ZG9NYW5hZ2VyRW50cnkmIGVudHJ5ID0gaW1wLT5pdGVtKGluZGV4KTsKKyAgICAKKyAgICB2ODo6
SGFuZGxlPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcoZW50cnkuc2l6ZSgpKTsK
KyAgICB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IGFyZ3MuR2V0SXNvbGF0ZSgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZW50cnkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVW5kb1N0ZXAq
IHN0ZXAgPSBlbnRyeVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKHN0ZXAtPmlzRE9NVHJhbnNhY3Rp
b24oKSkKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4SW50ZWdlcihpLCBpc29sYXRlKSwgc3Rh
dGljX2Nhc3Q8RE9NVHJhbnNhY3Rpb24qPihzdGVwKS0+ZGF0YSgpKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpPYmplY3Q6
Ok5ldygpOworICAgICAgICAgICAgb2JqZWN0LT5Gb3JjZVNldCh2ODo6U3RyaW5nOjpOZXdTeW1i
b2woImxhYmVsIiksIHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgiW0VkaXRpbmcgY29tbWFuZF0iKSk7
CisgICAgICAgICAgICByZXN1bHQtPlNldCh2OEludGVnZXIoaSwgaXNvbGF0ZSksIG9iamVjdCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFVORE9fTUFOQUdFUikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVW5kb01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVW5kb01hbmFnZXIuY3BwCShyZXZpc2lvbiAxMjYyNTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1VuZG9NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYw
LDYgKzE2MCwxNyBAQCB2b2lkIFVuZG9NYW5hZ2VyOjpyZWRvKEV4Y2VwdGlvbkNvZGUmIGVjCiAg
ICAgbV9yZWRvU3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCitVbmRvTWFuYWdlckVudHJ5IFVuZG9N
YW5hZ2VyOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRleCA8
IGxlbmd0aCgpKTsKKyAgICBpZiAoaW5kZXggPCBtX3JlZG9TdGFjay5zaXplKCkpIHsKKyAgICAg
ICAgVW5kb01hbmFnZXJFbnRyeSBlbnRyeSA9ICptX3JlZG9TdGFja1tpbmRleF07CisgICAgICAg
IGVudHJ5LnJldmVyc2UoKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKyAgICByZXR1
cm4gKm1fdW5kb1N0YWNrW2xlbmd0aCgpIC0gaW5kZXggLSAxXTsKK30KKwogdm9pZCBVbmRvTWFu
YWdlcjo6cmVnaXN0ZXJVbmRvU3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPiBzdGVwKQogewogICAg
IGlmICghbV9pc0luUHJvZ3Jlc3MpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5k
b01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1VuZG9NYW5h
Z2VyLmgJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5kb01h
bmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB1bmRvKEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgdm9pZCBy
ZWRvKEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAKKyAgICBVbmRvTWFu
YWdlckVudHJ5IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworCiAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV91bmRvU3RhY2suc2l6ZSgpICsgbV9yZWRvU3RhY2suc2l6
ZSgpOyB9CiAgICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZG9TdGFj
ay5zaXplKCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9VbmRvTWFuYWdlci5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9VbmRvTWFuYWdlci5pZGwJ
KHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5kb01hbmFnZXIu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIG1vZHVsZSBjb3JlIHsKICAgICAg
ICAgdm9pZCByZWRvKCkKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogCisgICAg
ICAgIFtDdXN0b21dIHNlcXVlbmNlPERPTVRyYW5zYWN0aW9uPiBpdGVtKGluIHVuc2lnbmVkIGxv
bmcgaW5kZXgpOworCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxl
bmd0aDsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgcG9zaXRpb247
CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjI2NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA4LTIxICBTdWtvbHNhayBTYWtz
aHV3b25nICA8c3Vrb2xzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgVW5kb01h
bmFnZXIncyBpdGVtKCkgbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdlci1pdGVtLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdl
ci1pdGVtLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA4LTIxICBEb21pbmljIENvb25leSAgPGRvbWlu
aWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQgZ2FyZGVu
aW5nLgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdlci1p
dGVtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG9t
YW5hZ2VyL3VuZG9tYW5hZ2VyLWl0ZW0tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdlci1pdGVtLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0ZXN0cyBVbmRvTWFuYWdlcidz
IGl0ZW0oKSBtZXRob2QuCisKK1BBU1MgdW5kb01hbmFnZXIgaGFzIGl0ZW0gcHJvcGVydHkuIAor
UEFTUyBBZnRlciB0d28gdHJhbnNhY3QgY2FsbHMgdGhhdCBhcmUgbWVyZ2VkIGludG8gb25lLCBp
dGVtKDApIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHR3byB0cmFuc2FjdGlvbnMgaW4gdGhlIGNv
cnJlY3Qgb3JkZXIuIAorUEFTUyBpdGVtKDEpIHJldHVybnMgbnVsbCBiZWNhdXNlIGl0J3Mgb3V0
IG9mIHJhbmdlLiAKK1BBU1MgQWZ0ZXIgYW4gdW5kbyBjYWxsLCBpdGVtKDApIHN0aWxscyByZXR1
cm4gYW4gYXJyYXkgb2YgdGhlIHR3byB0cmFuc2FjdGlvbnMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIu
IAorUEFTUyBBZnRlciBhIHJlZG8gY2FsbCwgdW5kb01hbmFnZXIncyBwb3NpdGlvbiBpcyBiYWNr
IHRvIDAuIAorUEFTUyBBZnRlciBleGVjdXRpbmcgYW4gZWRpdGluZyBjb21tYW5kLCBpdGVtKDAp
IHJldHVybnMgYW4gYXJyYXkgb2YgYW4gb2JqZWN0IHdpdGggbGFiZWwgcHJvcGVydHkuIAorUEFT
UyBpdGVtKDEpIG5vdyByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSB0d28gdHJhbnNhY3Rpb25zLiAK
K1BBU1MgaXRlbSgxKSByZXR1cm5zIGEgZGlmZmVyZW50IG9iamVjdCB0aGFuIGl0ZW0oMSkuIAor
CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG9tYW5hZ2VyL3VuZG9tYW5hZ2VyLWl0ZW0u
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG9tYW5hZ2VyL3VuZG9t
YW5hZ2VyLWl0ZW0uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvdW5k
b21hbmFnZXIvdW5kb21hbmFnZXItaXRlbS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+dW5kb01hbmFnZXIu
aXRlbSgpPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK1RoaXMgdGVzdHMgVW5kb01hbmFn
ZXIncyBpdGVtKCkgbWV0aG9kLgorCis8ZGl2IGlkPSJlZGl0IiBjb250ZW50RWRpdGFibGU+SGVs
bG88L2Rpdj4KKworPHNjcmlwdD4KK3ZhciB1bmRvTWFuYWdlciA9IGRvY3VtZW50LnVuZG9NYW5h
Z2VyOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF9pZGxfYXR0cmlidXRlKHVuZG9N
YW5hZ2VyLCAiaXRlbSIpOworfSwgInVuZG9NYW5hZ2VyIGhhcyBpdGVtIHByb3BlcnR5LiIpOwor
Cit2YXIgdHJhbnNhY3Rpb24gPSB7ImV4ZWN1dGVBdXRvbWF0aWMiOiBmdW5jdGlvbigpIHsgfX07
Cit2YXIgdHJhbnNhY3Rpb24yID0geyJleGVjdXRlQXV0b21hdGljIjogZnVuY3Rpb24oKSB7IH19
OworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHVuZG9NYW5hZ2VyLnRyYW5zYWN0KHRyYW5zYWN0
aW9uKTsKKyAgICB1bmRvTWFuYWdlci50cmFuc2FjdCh0cmFuc2FjdGlvbjIsIHRydWUpOworICAg
IAorICAgIHZhciBlbnRyeSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisgICAgYXNzZXJ0X2VxdWFs
cyhlbnRyeS5sZW5ndGgsIDIpOworICAgIGFzc2VydF9lcXVhbHMoZW50cnlbMF0sIHRyYW5zYWN0
aW9uKTsKKyAgICBhc3NlcnRfZXF1YWxzKGVudHJ5WzFdLCB0cmFuc2FjdGlvbjIpOworfSwgIkFm
dGVyIHR3byB0cmFuc2FjdCBjYWxscyB0aGF0IGFyZSBtZXJnZWQgaW50byBvbmUsIGl0ZW0oMCkg
cmV0dXJucyBhbiBhcnJheSBvZiAiCisgICAgKyAidGhlIHR3byB0cmFuc2FjdGlvbnMgaW4gdGhl
IGNvcnJlY3Qgb3JkZXIuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGVudHJ5ID0g
dW5kb01hbmFnZXIuaXRlbSgxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGVudHJ5LCBudWxsKTsKK30s
ICJpdGVtKDEpIHJldHVybnMgbnVsbCBiZWNhdXNlIGl0J3Mgb3V0IG9mIHJhbmdlLiIpOworCit0
ZXN0KGZ1bmN0aW9uKCkgeworICAgIHVuZG9NYW5hZ2VyLnVuZG8oKTsKKworICAgIHZhciBlbnRy
eSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisgICAgYXNzZXJ0X2VxdWFscyhlbnRyeS5sZW5ndGgs
IDIpOworICAgIGFzc2VydF9lcXVhbHMoZW50cnlbMF0sIHRyYW5zYWN0aW9uKTsKKyAgICBhc3Nl
cnRfZXF1YWxzKGVudHJ5WzFdLCB0cmFuc2FjdGlvbjIpOworfSwgIkFmdGVyIGFuIHVuZG8gY2Fs
bCwgaXRlbSgwKSBzdGlsbHMgcmV0dXJuIGFuIGFycmF5IG9mIHRoZSB0d28gdHJhbnNhY3Rpb25z
IGluIHRoZSBjb3JyZWN0IG9yZGVyLiIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHVuZG9N
YW5hZ2VyLnJlZG8oKTsKKyAgICBhc3NlcnRfZXF1YWxzKHVuZG9NYW5hZ2VyLnBvc2l0aW9uLCAw
KTsKK30sICJBZnRlciBhIHJlZG8gY2FsbCwgdW5kb01hbmFnZXIncyBwb3NpdGlvbiBpcyBiYWNr
IHRvIDAuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQu
Y3JlYXRlUmFuZ2UoKTsKKyAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImVkaXQiKSk7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdl
KHJhbmdlKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiQm9sZCIpOworICAgIAorICAgIHZh
ciBlbnRyeSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisgICAgYXNzZXJ0X2VxdWFscyhlbnRyeS5s
ZW5ndGgsIDEpOworICAgIGFzc2VydF9vd25fcHJvcGVydHkoZW50cnlbMF0sICJsYWJlbCIpOwor
fSwgIkFmdGVyIGV4ZWN1dGluZyBhbiBlZGl0aW5nIGNvbW1hbmQsIGl0ZW0oMCkgcmV0dXJucyBh
biBhcnJheSBvZiBhbiBvYmplY3Qgd2l0aCBsYWJlbCBwcm9wZXJ0eS4iKTsKKwordGVzdChmdW5j
dGlvbigpIHsKKyAgICB2YXIgZW50cnkgPSB1bmRvTWFuYWdlci5pdGVtKDEpOworICAgIGFzc2Vy
dF9lcXVhbHMoZW50cnkubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGVudHJ5WzBdLCB0
cmFuc2FjdGlvbik7CisgICAgYXNzZXJ0X2VxdWFscyhlbnRyeVsxXSwgdHJhbnNhY3Rpb24yKTsK
K30sICJpdGVtKDEpIG5vdyByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSB0d28gdHJhbnNhY3Rpb25z
LiIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF9ub3RfZXF1YWxzKHVuZG9NYW5h
Z2VyLml0ZW0oMSksIHVuZG9NYW5hZ2VyLml0ZW0oMSkpOworfSwgIml0ZW0oMSkgcmV0dXJucyBh
IGRpZmZlcmVudCBvYmplY3QgdGhhbiBpdGVtKDEpLiIpOworCitkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiZWRpdCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160061</attachid>
            <date>2012-08-22 18:51:25 -0700</date>
            <delta_ts>2012-08-22 19:18:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94671-20120822185409.patch</filename>
            <type>text/plain</type>
            <size>12786</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjM2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA4LTIyICBTdWtvbHNh
ayBTYWtzaHV3b25nICA8c3Vrb2xzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQg
VW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvdW5kb21hbmFnZXIvdW5kb21hbmFnZXIt
aXRlbS5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VuZG9NYW5hZ2VyQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVW5kb01hbmFnZXI6Oml0ZW0pOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVHJhbnNhY3Rpb246OmRhdGEpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01UcmFuc2FjdGlvbjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpET01UcmFuc2FjdGlvbjo6Z2V0RnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0RPTVRyYW5zYWN0aW9uLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4VW5kb01h
bmFnZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhVbmRvTWFuYWdlcjo6dHJhbnNh
Y3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFVuZG9NYW5hZ2VyOjppdGVtQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZWRpdGluZy9VbmRvTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpVbmRvTWFuYWdlcjo6aXRlbSk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBlZGl0aW5nL1VuZG9NYW5hZ2VyLmg6CisgICAgICAgIChVbmRvTWFu
YWdlcik6CisgICAgICAgICogZWRpdGluZy9VbmRvTWFuYWdlci5pZGw6CisKIDIwMTItMDgtMjIg
IEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gTW92
ZSBjb250ZXh0KCkgZnJvbSBWOFByb3h5IHRvIFNjcmlwdENvbnRyb2xsZXIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb01hbmFnZXJDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVW5kb01hbmFnZXJDdXN0b20uY3BwCShy
ZXZpc2lvbiAxMjYyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VuZG9NYW5h
Z2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTIgQEAgSlNWYWx1ZSBK
U1VuZG9NYW5hZ2VyOjp0cmFuc2FjdChFeGVjU3RhdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCitKU1ZhbHVlIEpTVW5kb01hbmFnZXI6Oml0ZW0oRXhlY1N0YXRlKikKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50IEpTQyBiaW5kaW5ncworICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworfQorCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
VHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTVRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMTI2MjU5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxNyAr
OTYsMjkgQEAgdm9pZCBET01UcmFuc2FjdGlvbjo6cmVhcHBseSgpCiAgICAgICAgIG1fdW5kb01h
bmFnZXItPnJlZ2lzdGVyVW5kb1N0ZXAodGhpcyk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPiBET01UcmFuc2FjdGlvbjo6Z2V0RnVuY3Rpb24oY29uc3QgY2hhciogcHJvcGVydHlOYW1l
KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IERPTVRyYW5zYWN0aW9uOjpkYXRhKCkKIHsKICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KHRvVjgodGhpcykpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPigpOworICAgICAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJuIHdyYXBwZXItPkdldEhpZGRlblZhbHVlKFY4SGlk
ZGVuUHJvcGVydHlOYW1lOjpkb21UcmFuc2FjdGlvbkRhdGEoKSk7Cit9CiAKLSAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiBkYXRhID0gd3JhcHBlci0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9w
ZXJ0eU5hbWU6OmRvbVRyYW5zYWN0aW9uRGF0YSgpKTsKLSAgICBpZiAoZGF0YS5Jc0VtcHR5KCkg
fHwgIWRhdGEtPklzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4oKTsKK3ZvaWQgRE9NVHJhbnNhY3Rpb246OnNldERhdGEodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG5ld0RhdGEpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh0b1Y4KHRoaXMpKTsKKyAgICBpZiAod3JhcHBlci5J
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICB3cmFwcGVyLT5TZXRIaWRkZW5WYWx1ZShW
OEhpZGRlblByb3BlcnR5TmFtZTo6ZG9tVHJhbnNhY3Rpb25EYXRhKCksIG5ld0RhdGEpOworfQog
Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6Ok9iamVj
dD46OkNhc3QoZGF0YSktPkdldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2wocHJvcGVydHlOYW1lKSk7
Cit2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gRE9NVHJhbnNhY3Rpb246OmdldEZ1bmN0aW9uKGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGlj
dGlvbmFyeSA9IGRhdGEoKTsKKyAgICBpZiAoZGljdGlvbmFyeS5Jc0VtcHR5KCkgfHwgIWRpY3Rp
b25hcnktPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
bj4oKTsKKyAgICAKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBmdW5jdGlvbiA9IHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoZGljdGlvbmFyeSktPkdldCh2ODo6U3RyaW5nOjpOZXdTeW1i
b2wocHJvcGVydHlOYW1lKSk7CiAgICAgaWYgKGZ1bmN0aW9uLklzRW1wdHkoKSB8fCAhZnVuY3Rp
b24tPklzRnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
PigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01UcmFuc2FjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVRyYW5zYWN0aW9u
LmgJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVRy
YW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gRWRpdEFjdGlvblVuc3BlY2lmaWVkOyB9CiAgICAgdmlydHVhbCBib29sIGlzRE9NVHJhbnNh
Y3Rpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZGF0YSgpOworICAgIHZvaWQgc2V0RGF0YSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4pOworCiAgICAgVW5kb01hbmFnZXIqIHVuZG9NYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV91
bmRvTWFuYWdlcjsgfQogICAgIHZvaWQgc2V0VW5kb01hbmFnZXIoVW5kb01hbmFnZXIqIHVuZG9N
YW5hZ2VyKSB7IG1fdW5kb01hbmFnZXIgPSB1bmRvTWFuYWdlcjsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhVbmRvTWFuYWdlckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VW5kb01hbmFnZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAxMjYyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhVbmRvTWFuYWdlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDYgQEAKICNpbmNsdWRlICJET01UcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJWOERPTVRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSw5ICs0OCw3
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFVuZG9NYW5hZ2VyOjp0cmEKICAgICBFWENFUFRJ
T05fQkxPQ0soYm9vbCwgbWVyZ2UsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERl
ZmF1bHRJc1VuZGVmaW5lZCktPkJvb2xlYW5WYWx1ZSgpKTsKIAogICAgIFJlZlB0cjxET01UcmFu
c2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBET01UcmFuc2FjdGlvbjo6Y3JlYXRlKFdvcmxkQ29udGV4
dEhhbmRsZShVc2VDdXJyZW50V29ybGQpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRy
YW5zYWN0aW9uV3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodG9WOCh0cmFu
c2FjdGlvbi5nZXQoKSkpOwotCi0gICAgdHJhbnNhY3Rpb25XcmFwcGVyLT5TZXRIaWRkZW5WYWx1
ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6ZG9tVHJhbnNhY3Rpb25EYXRhKCksIGRpY3Rpb25hcnkp
OworICAgIHRyYW5zYWN0aW9uLT5zZXREYXRhKGRpY3Rpb25hcnkpOwogCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgaW1wLT50cmFuc2FjdCh0cmFuc2FjdGlvbiwgbWVyZ2UsIGVjKTsK
QEAgLTYwLDYgKzU3LDM1IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFVuZG9NYW5hZ2VyOjp0
cmEKICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4VW5kb01hbmFnZXI6Oml0ZW1DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQor
eworICAgIElOQ19TVEFUUygiRE9NLlVuZG9NYW5hZ2VyLml0ZW0iKTsKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICBVbmRvTWFuYWdlciogaW1wID0gVjhVbmRvTWFuYWdl
cjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisKKyAgICBFWENFUFRJT05fQkxPQ0sodW5zaWdu
ZWQsIGluZGV4LCB0b1VJbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZh
dWx0SXNVbmRlZmluZWQpKSk7CisKKyAgICBpZiAoaW5kZXggPj0gaW1wLT5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuIHY4OjpOdWxsKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKworICAgIGNvbnN0IFVu
ZG9NYW5hZ2VyRW50cnkmIGVudHJ5ID0gaW1wLT5pdGVtKGluZGV4KTsKKworICAgIHY4OjpIYW5k
bGU8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhlbnRyeS5zaXplKCkpOworICAg
IHY4OjpJc29sYXRlKiBpc29sYXRlID0gYXJncy5HZXRJc29sYXRlKCk7CisgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IGVudHJ5LnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBV
bmRvU3RlcCogc3RlcCA9IGVudHJ5W2luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKHN0ZXAtPmlz
RE9NVHJhbnNhY3Rpb24oKSkKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4SW50ZWdlcihpbmRl
eCwgaXNvbGF0ZSksIHN0YXRpY19jYXN0PERPTVRyYW5zYWN0aW9uKj4oc3RlcCktPmRhdGEoKSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmpl
Y3QgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICAgICAgICAgIG9iamVjdC0+U2V0KHY4OjpTdHJp
bmc6Ok5ld1N5bWJvbCgibGFiZWwiKSwgdjg6OlN0cmluZzo6TmV3KCJbRWRpdGluZyBjb21tYW5k
XSIpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4SW50ZWdlcihpbmRleCwgaXNvbGF0ZSks
IG9iamVjdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFVORE9fTUFOQUdFUikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5kb01hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5kb01hbmFnZXIuY3BwCShyZXZpc2lvbiAxMjYyNTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1VuZG9NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYwLDYgKzE2MCwxNyBAQCB2b2lkIFVuZG9NYW5hZ2VyOjpyZWRvKEV4Y2VwdGlvbkNv
ZGUmIGVjCiAgICAgbV9yZWRvU3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCitVbmRvTWFuYWdlckVu
dHJ5IFVuZG9NYW5hZ2VyOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIEFTU0VS
VChpbmRleCA8IGxlbmd0aCgpKTsKKyAgICBpZiAoaW5kZXggPCBtX3JlZG9TdGFjay5zaXplKCkp
IHsKKyAgICAgICAgVW5kb01hbmFnZXJFbnRyeSBlbnRyeSA9ICptX3JlZG9TdGFja1tpbmRleF07
CisgICAgICAgIGVudHJ5LnJldmVyc2UoKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0K
KyAgICByZXR1cm4gKm1fdW5kb1N0YWNrW2xlbmd0aCgpIC0gaW5kZXggLSAxXTsKK30KKwogdm9p
ZCBVbmRvTWFuYWdlcjo6cmVnaXN0ZXJVbmRvU3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPiBzdGVw
KQogewogICAgIGlmICghbV9pc0luUHJvZ3Jlc3MpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVW5kb01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1VuZG9NYW5hZ2VyLmgJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVW5kb01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCB1bmRvKEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAg
ICAgdm9pZCByZWRvKEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAKKyAg
ICBVbmRvTWFuYWdlckVudHJ5IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworCiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV91bmRvU3RhY2suc2l6ZSgpICsgbV9yZWRv
U3RhY2suc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3JlZG9TdGFjay5zaXplKCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9VbmRv
TWFuYWdlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9VbmRvTWFu
YWdlci5pZGwJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5k
b01hbmFnZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgdm9pZCByZWRvKCkKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24p
OwogCisgICAgICAgIFtDdXN0b21dIHNlcXVlbmNlPERPTVRyYW5zYWN0aW9uPiBpdGVtKGluIHVu
c2lnbmVkIGxvbmcgaW5kZXgpOworCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGxlbmd0aDsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
cG9zaXRpb247CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjI2NSkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA4LTIxICBTdWtv
bHNhayBTYWtzaHV3b25nICA8c3Vrb2xzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1l
bnQgVW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdlci1p
dGVtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy91bmRvbWFuYWdlci91
bmRvbWFuYWdlci1pdGVtLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA4LTIxICBEb21pbmljIENvb25l
eSAgPGRvbWluaWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3
ZWQgZ2FyZGVuaW5nLgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvbWFuYWdlci91bmRv
bWFuYWdlci1pdGVtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0
aW5nL3VuZG9tYW5hZ2VyL3VuZG9tYW5hZ2VyLWl0ZW0tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdlci1pdGVtLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0ZXN0cyBVbmRv
TWFuYWdlcidzIGl0ZW0oKSBtZXRob2QuCisKK1BBU1MgdW5kb01hbmFnZXIgaGFzIGl0ZW0gcHJv
cGVydHkuIAorUEFTUyBBZnRlciB0d28gdHJhbnNhY3QgY2FsbHMgdGhhdCBhcmUgbWVyZ2VkIGlu
dG8gb25lLCBpdGVtKDApIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHR3byB0cmFuc2FjdGlvbnMg
aW4gdGhlIGNvcnJlY3Qgb3JkZXIuIAorUEFTUyBpdGVtKDEpIHJldHVybnMgbnVsbCBiZWNhdXNl
IGl0J3Mgb3V0IG9mIHJhbmdlLiAKK1BBU1MgQWZ0ZXIgYW4gdW5kbyBjYWxsLCBpdGVtKDApIHN0
aWxscyByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIHR3byB0cmFuc2FjdGlvbnMgaW4gdGhlIGNvcnJl
Y3Qgb3JkZXIuIAorUEFTUyBBZnRlciBhIHJlZG8gY2FsbCwgdW5kb01hbmFnZXIncyBwb3NpdGlv
biBpcyBiYWNrIHRvIDAuIAorUEFTUyBBZnRlciBleGVjdXRpbmcgYW4gZWRpdGluZyBjb21tYW5k
LCBpdGVtKDApIHJldHVybnMgYW4gYXJyYXkgb2YgYW4gb2JqZWN0IHdpdGggbGFiZWwgcHJvcGVy
dHkuIAorUEFTUyBpdGVtKDEpIG5vdyByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSB0d28gdHJhbnNh
Y3Rpb25zLiAKK1BBU1MgaXRlbSgxKSByZXR1cm5zIGEgZGlmZmVyZW50IG9iamVjdCB0aGFuIGl0
ZW0oMSkuIAorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG9tYW5hZ2VyL3VuZG9tYW5h
Z2VyLWl0ZW0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG9tYW5h
Z2VyL3VuZG9tYW5hZ2VyLWl0ZW0uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Vk
aXRpbmcvdW5kb21hbmFnZXIvdW5kb21hbmFnZXItaXRlbS5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+dW5k
b01hbmFnZXIuaXRlbSgpPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK1RoaXMgdGVzdHMg
VW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9kLgorCis8ZGl2IGlkPSJlZGl0IiBjb250ZW50RWRp
dGFibGU+SGVsbG88L2Rpdj4KKworPHNjcmlwdD4KK3ZhciB1bmRvTWFuYWdlciA9IGRvY3VtZW50
LnVuZG9NYW5hZ2VyOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF9pZGxfYXR0cmli
dXRlKHVuZG9NYW5hZ2VyLCAiaXRlbSIpOworfSwgInVuZG9NYW5hZ2VyIGhhcyBpdGVtIHByb3Bl
cnR5LiIpOworCit2YXIgdHJhbnNhY3Rpb24gPSB7ImV4ZWN1dGVBdXRvbWF0aWMiOiBmdW5jdGlv
bigpIHsgfX07Cit2YXIgdHJhbnNhY3Rpb24yID0geyJleGVjdXRlQXV0b21hdGljIjogZnVuY3Rp
b24oKSB7IH19OworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHVuZG9NYW5hZ2VyLnRyYW5zYWN0
KHRyYW5zYWN0aW9uKTsKKyAgICB1bmRvTWFuYWdlci50cmFuc2FjdCh0cmFuc2FjdGlvbjIsIHRy
dWUpOworICAgIAorICAgIHZhciBlbnRyeSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisgICAgYXNz
ZXJ0X2VxdWFscyhlbnRyeS5sZW5ndGgsIDIpOworICAgIGFzc2VydF9lcXVhbHMoZW50cnlbMF0s
IHRyYW5zYWN0aW9uKTsKKyAgICBhc3NlcnRfZXF1YWxzKGVudHJ5WzFdLCB0cmFuc2FjdGlvbjIp
OworfSwgIkFmdGVyIHR3byB0cmFuc2FjdCBjYWxscyB0aGF0IGFyZSBtZXJnZWQgaW50byBvbmUs
IGl0ZW0oMCkgcmV0dXJucyBhbiBhcnJheSBvZiAiCisgICAgKyAidGhlIHR3byB0cmFuc2FjdGlv
bnMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFy
IGVudHJ5ID0gdW5kb01hbmFnZXIuaXRlbSgxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGVudHJ5LCBu
dWxsKTsKK30sICJpdGVtKDEpIHJldHVybnMgbnVsbCBiZWNhdXNlIGl0J3Mgb3V0IG9mIHJhbmdl
LiIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHVuZG9NYW5hZ2VyLnVuZG8oKTsKKworICAg
IHZhciBlbnRyeSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisgICAgYXNzZXJ0X2VxdWFscyhlbnRy
eS5sZW5ndGgsIDIpOworICAgIGFzc2VydF9lcXVhbHMoZW50cnlbMF0sIHRyYW5zYWN0aW9uKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGVudHJ5WzFdLCB0cmFuc2FjdGlvbjIpOworfSwgIkFmdGVyIGFu
IHVuZG8gY2FsbCwgaXRlbSgwKSBzdGlsbHMgcmV0dXJuIGFuIGFycmF5IG9mIHRoZSB0d28gdHJh
bnNhY3Rpb25zIGluIHRoZSBjb3JyZWN0IG9yZGVyLiIpOworCit0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgIHVuZG9NYW5hZ2VyLnJlZG8oKTsKKyAgICBhc3NlcnRfZXF1YWxzKHVuZG9NYW5hZ2VyLnBv
c2l0aW9uLCAwKTsKK30sICJBZnRlciBhIHJlZG8gY2FsbCwgdW5kb01hbmFnZXIncyBwb3NpdGlv
biBpcyBiYWNrIHRvIDAuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIHJhbmdlID0g
ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQiKSk7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigp
LmFkZFJhbmdlKHJhbmdlKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiQm9sZCIpOworICAg
IAorICAgIHZhciBlbnRyeSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisgICAgYXNzZXJ0X2VxdWFs
cyhlbnRyeS5sZW5ndGgsIDEpOworICAgIGFzc2VydF9vd25fcHJvcGVydHkoZW50cnlbMF0sICJs
YWJlbCIpOworfSwgIkFmdGVyIGV4ZWN1dGluZyBhbiBlZGl0aW5nIGNvbW1hbmQsIGl0ZW0oMCkg
cmV0dXJucyBhbiBhcnJheSBvZiBhbiBvYmplY3Qgd2l0aCBsYWJlbCBwcm9wZXJ0eS4iKTsKKwor
dGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgZW50cnkgPSB1bmRvTWFuYWdlci5pdGVtKDEpOwor
ICAgIGFzc2VydF9lcXVhbHMoZW50cnkubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGVu
dHJ5WzBdLCB0cmFuc2FjdGlvbik7CisgICAgYXNzZXJ0X2VxdWFscyhlbnRyeVsxXSwgdHJhbnNh
Y3Rpb24yKTsKK30sICJpdGVtKDEpIG5vdyByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSB0d28gdHJh
bnNhY3Rpb25zLiIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF9ub3RfZXF1YWxz
KHVuZG9NYW5hZ2VyLml0ZW0oMSksIHVuZG9NYW5hZ2VyLml0ZW0oMSkpOworfSwgIml0ZW0oMSkg
cmV0dXJucyBhIGRpZmZlcmVudCBvYmplY3QgdGhhbiBpdGVtKDEpLiIpOworCitkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZWRpdCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160066</attachid>
            <date>2012-08-22 19:18:15 -0700</date>
            <delta_ts>2012-08-22 22:57:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94671-20120822192059.patch</filename>
            <type>text/plain</type>
            <size>13245</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjM2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTIyICBTdWtvbHNh
ayBTYWtzaHV3b25nICA8c3Vrb2xzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQg
VW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBVbmRvTWFuYWdlcidzIGl0
ZW0oKSBtZXRob2QgYW5kIGl0cyBWOCBjdXN0b20gYmluZGluZy4KKyAgICAgICAgV2UgbmVlZCB0
byB1c2UgY3VzdG9tIGJpbmRpbmcgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gcmV0dXJuIHVzZXIg
b2JqZWN0cworICAgICAgICB0aGF0IGFyZSBzdG9yZWQgaW4gYSBoaWRkZW4gcHJvcGVydHkgb2Yg
RE9NVHJhbnNhY3Rpb24gd3JhcHBlcnMsIG5vdCByZXR1cm5pbmcKKyAgICAgICAgdGhlIHdyYXBw
ZXJzIHRoZW1zZWx2ZXMuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy91bmRvbWFuYWdlci91bmRv
bWFuYWdlci1pdGVtLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVW5kb01hbmFnZXJD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNVbmRvTWFuYWdlcjo6aXRlbSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01UcmFuc2FjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpET01UcmFuc2FjdGlvbjo6ZGF0YSk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRyYW5zYWN0aW9uOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVRyYW5zYWN0aW9uOjpnZXRGdW5jdGlvbik6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhVbmRvTWFuYWdlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFVuZG9NYW5hZ2Vy
Ojp0cmFuc2FjdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VW5kb01hbmFnZXI6Oml0
ZW1DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0aW5nL1VuZG9N
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVuZG9NYW5hZ2VyOjppdGVtKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIGVkaXRpbmcvVW5kb01hbmFnZXIuaDoKKyAgICAgICAg
KFVuZG9NYW5hZ2VyKToKKyAgICAgICAgKiBlZGl0aW5nL1VuZG9NYW5hZ2VyLmlkbDoKKwogMjAx
Mi0wOC0yMiAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W1Y4XSBNb3ZlIGNvbnRleHQoKSBmcm9tIFY4UHJveHkgdG8gU2NyaXB0Q29udHJvbGxlcgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvTWFuYWdlckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVbmRvTWFuYWdlckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VW5kb01hbmFnZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMiBAQCBK
U1ZhbHVlIEpTVW5kb01hbmFnZXI6OnRyYW5zYWN0KEV4ZWNTdGF0CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKK0pTVmFsdWUgSlNVbmRvTWFuYWdlcjo6aXRlbShFeGVjU3RhdGUqKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgSlNDIGJpbmRpbmdzCisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Cit9CisKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9ET01UcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAxMjYyNTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9ET01UcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDE3ICs5NiwyOSBAQCB2b2lkIERPTVRyYW5zYWN0aW9uOjpyZWFwcGx5KCkKICAgICAgICAg
bV91bmRvTWFuYWdlci0+cmVnaXN0ZXJVbmRvU3RlcCh0aGlzKTsKIH0KIAotdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+IERPTVRyYW5zYWN0aW9uOjpnZXRGdW5jdGlvbihjb25zdCBjaGFyKiBwcm9w
ZXJ0eU5hbWUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gRE9NVHJhbnNhY3Rpb246OmRhdGEoKQog
ewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QodG9WOCh0aGlzKSk7CiAgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+KCk7CisgICAgICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gd3JhcHBlci0+R2V0SGlkZGVuVmFs
dWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OmRvbVRyYW5zYWN0aW9uRGF0YSgpKTsKK30KIAotICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IGRhdGEgPSB3cmFwcGVyLT5HZXRIaWRkZW5WYWx1ZShWOEhp
ZGRlblByb3BlcnR5TmFtZTo6ZG9tVHJhbnNhY3Rpb25EYXRhKCkpOwotICAgIGlmIChkYXRhLklz
RW1wdHkoKSB8fCAhZGF0YS0+SXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uPigpOwordm9pZCBET01UcmFuc2FjdGlvbjo6c2V0RGF0YSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gbmV3RGF0YSkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHRvVjgodGhpcykpOworICAgIGlmICh3
cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdyYXBwZXItPlNldEhpZGRl
blZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpkb21UcmFuc2FjdGlvbkRhdGEoKSwgbmV3RGF0
YSk7Cit9CiAKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBmdW5jdGlvbiA9IHY4OjpMb2NhbDx2
ODo6T2JqZWN0Pjo6Q2FzdChkYXRhKS0+R2V0KHY4OjpTdHJpbmc6Ok5ld1N5bWJvbChwcm9wZXJ0
eU5hbWUpKTsKK3Y4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBET01UcmFuc2FjdGlvbjo6Z2V0RnVu
Y3Rpb24oY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQoreworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBkaWN0aW9uYXJ5ID0gZGF0YSgpOworICAgIGlmIChkaWN0aW9uYXJ5LklzRW1wdHkoKSB8
fCAhZGljdGlvbmFyeS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uPigpOworICAgIAorICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGZ1bmN0aW9uID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChkaWN0aW9uYXJ5KS0+R2V0KHY4OjpTdHJpbmc6
Ok5ld1N5bWJvbChwcm9wZXJ0eU5hbWUpKTsKICAgICBpZiAoZnVuY3Rpb24uSXNFbXB0eSgpIHx8
ICFmdW5jdGlvbi0+SXNGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb24+KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVRyYW5z
YWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NVHJh
bnNhY3Rpb24uaAkocmV2aXNpb24gMTI2MjU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvRE9NVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBFZGl0QWN0aW9uVW5zcGVjaWZpZWQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNE
T01UcmFuc2FjdGlvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBkYXRhKCk7CisgICAgdm9pZCBzZXREYXRhKHY4OjpIYW5kbGU8
djg6OlZhbHVlPik7CisKICAgICBVbmRvTWFuYWdlciogdW5kb01hbmFnZXIoKSBjb25zdCB7IHJl
dHVybiBtX3VuZG9NYW5hZ2VyOyB9CiAgICAgdm9pZCBzZXRVbmRvTWFuYWdlcihVbmRvTWFuYWdl
ciogdW5kb01hbmFnZXIpIHsgbV91bmRvTWFuYWdlciA9IHVuZG9NYW5hZ2VyOyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFVuZG9NYW5hZ2VyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhVbmRv
TWFuYWdlckN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFVuZG9NYW5hZ2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkRPTVRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlY4RE9NVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRl
ICJWOEhpZGRlblByb3BlcnR5TmFtZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5
LDkgKzQ4LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VW5kb01hbmFnZXI6OnRyYQogICAg
IEVYQ0VQVElPTl9CTE9DSyhib29sLCBtZXJnZSwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJn
cywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKS0+Qm9vbGVhblZhbHVlKCkpOwogCiAgICAgUmVmUHRy
PERPTVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IERPTVRyYW5zYWN0aW9uOjpjcmVhdGUoV29y
bGRDb250ZXh0SGFuZGxlKFVzZUN1cnJlbnRXb3JsZCkpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gdHJhbnNhY3Rpb25XcmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh0
b1Y4KHRyYW5zYWN0aW9uLmdldCgpKSk7Ci0KLSAgICB0cmFuc2FjdGlvbldyYXBwZXItPlNldEhp
ZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpkb21UcmFuc2FjdGlvbkRhdGEoKSwgZGlj
dGlvbmFyeSk7CisgICAgdHJhbnNhY3Rpb24tPnNldERhdGEoZGljdGlvbmFyeSk7CiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpbXAtPnRyYW5zYWN0KHRyYW5zYWN0aW9uLCBtZXJn
ZSwgZWMpOwpAQCAtNjAsNiArNTcsMzcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VW5kb01h
bmFnZXI6OnRyYQogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhVbmRvTWFuYWdlcjo6aXRlbUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVW5kb01hbmFnZXIuaXRlbSIpOworICAgIGlm
IChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOworICAgIFVuZG9NYW5hZ2VyKiBpbXAgPSBWOFVu
ZG9NYW5hZ2VyOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKworICAgIEVYQ0VQVElPTl9CTE9D
Syh1bnNpZ25lZCwgaW5kZXgsIHRvVUludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3Ms
IDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKworICAgIGlmIChpbmRleCA+PSBpbXAtPmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoYXJncy5HZXRJc29sYXRlKCkpOworCisgICAg
Y29uc3QgVW5kb01hbmFnZXJFbnRyeSYgZW50cnkgPSBpbXAtPml0ZW0oaW5kZXgpOworCisgICAg
djg6OkhhbmRsZTx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJheTo6TmV3KGVudHJ5LnNpemUo
KSk7CisgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBhcmdzLkdldElzb2xhdGUoKTsKKyAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZW50cnkuc2l6ZSgpOyArK2luZGV4KSB7Cisg
ICAgICAgIFVuZG9TdGVwKiBzdGVwID0gZW50cnlbaW5kZXhdLmdldCgpOworICAgICAgICBpZiAo
c3RlcC0+aXNET01UcmFuc2FjdGlvbigpKQorICAgICAgICAgICAgcmVzdWx0LT5TZXQodjhJbnRl
Z2VyKGluZGV4LCBpc29sYXRlKSwgc3RhdGljX2Nhc3Q8RE9NVHJhbnNhY3Rpb24qPihzdGVwKS0+
ZGF0YSgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
bid0IGJlIGNyZWF0aW5nIG5ldyBvYmplY3QgZWFjaCB0aW1lIHdlIHJldHVybi4KKyAgICAgICAg
ICAgIC8vIE9iamVjdCBmb3IgdGhlIHNhbWUgbmF0aXZlIGVkaXRpbmcgY29tbWFuZCBzaG91bGQg
YWx3YXlzIGJlIHRoZSBzYW1lLgorICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBv
YmplY3QgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICAgICAgICAgIG9iamVjdC0+U2V0KHY4OjpT
dHJpbmc6Ok5ld1N5bWJvbCgibGFiZWwiKSwgdjg6OlN0cmluZzo6TmV3KCJbRWRpdGluZyBjb21t
YW5kXSIpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4SW50ZWdlcihpbmRleCwgaXNvbGF0
ZSksIG9iamVjdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFVORE9fTUFOQUdFUikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5kb01hbmFnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVW5kb01hbmFnZXIuY3BwCShyZXZpc2lvbiAxMjYy
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1VuZG9NYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYwLDYgKzE2MCwxNyBAQCB2b2lkIFVuZG9NYW5hZ2VyOjpyZWRvKEV4Y2VwdGlv
bkNvZGUmIGVjCiAgICAgbV9yZWRvU3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCitVbmRvTWFuYWdl
ckVudHJ5IFVuZG9NYW5hZ2VyOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIEFT
U0VSVChpbmRleCA8IGxlbmd0aCgpKTsKKyAgICBpZiAoaW5kZXggPCBtX3JlZG9TdGFjay5zaXpl
KCkpIHsKKyAgICAgICAgVW5kb01hbmFnZXJFbnRyeSBlbnRyeSA9ICptX3JlZG9TdGFja1tpbmRl
eF07CisgICAgICAgIGVudHJ5LnJldmVyc2UoKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAg
IH0KKyAgICByZXR1cm4gKm1fdW5kb1N0YWNrW2xlbmd0aCgpIC0gaW5kZXggLSAxXTsKK30KKwog
dm9pZCBVbmRvTWFuYWdlcjo6cmVnaXN0ZXJVbmRvU3RlcChQYXNzUmVmUHRyPFVuZG9TdGVwPiBz
dGVwKQogewogICAgIGlmICghbV9pc0luUHJvZ3Jlc3MpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVW5kb01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1VuZG9NYW5hZ2VyLmgJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVW5kb01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCB1bmRvKEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7
CiAgICAgdm9pZCByZWRvKEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAK
KyAgICBVbmRvTWFuYWdlckVudHJ5IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworCiAgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV91bmRvU3RhY2suc2l6ZSgpICsgbV9y
ZWRvU3RhY2suc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3JlZG9TdGFjay5zaXplKCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9V
bmRvTWFuYWdlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9VbmRv
TWFuYWdlci5pZGwJKHJldmlzaW9uIDEyNjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VW5kb01hbmFnZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIG1vZHVsZSBj
b3JlIHsKICAgICAgICAgdm9pZCByZWRvKCkKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRp
b24pOwogCisgICAgICAgIFtDdXN0b21dIHNlcXVlbmNlPERPTVRyYW5zYWN0aW9uPiBpdGVtKGlu
IHVuc2lnbmVkIGxvbmcgaW5kZXgpOworCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBsb25nIGxlbmd0aDsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgcG9zaXRpb247CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjI2NSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA4LTIxICBT
dWtvbHNhayBTYWtzaHV3b25nICA8c3Vrb2xzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBJbXBs
ZW1lbnQgVW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdl
ci1pdGVtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy91bmRvbWFuYWdl
ci91bmRvbWFuYWdlci1pdGVtLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA4LTIxICBEb21pbmljIENv
b25leSAgPGRvbWluaWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2
aWV3ZWQgZ2FyZGVuaW5nLgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvbWFuYWdlci91
bmRvbWFuYWdlci1pdGVtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3VuZG9tYW5hZ2VyL3VuZG9tYW5hZ2VyLWl0ZW0tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvbWFuYWdlci91bmRvbWFuYWdlci1pdGVt
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0ZXN0cyBV
bmRvTWFuYWdlcidzIGl0ZW0oKSBtZXRob2QuCisKK1BBU1MgdW5kb01hbmFnZXIgaGFzIGl0ZW0g
cHJvcGVydHkuIAorUEFTUyBBZnRlciB0d28gdHJhbnNhY3QgY2FsbHMgdGhhdCBhcmUgbWVyZ2Vk
IGludG8gb25lLCBpdGVtKDApIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHR3byB0cmFuc2FjdGlv
bnMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIAorUEFTUyBpdGVtKDEpIHJldHVybnMgbnVsbCBiZWNh
dXNlIGl0J3Mgb3V0IG9mIHJhbmdlLiAKK1BBU1MgQWZ0ZXIgYW4gdW5kbyBjYWxsLCBpdGVtKDAp
IHN0aWxscyByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIHR3byB0cmFuc2FjdGlvbnMgaW4gdGhlIGNv
cnJlY3Qgb3JkZXIuIAorUEFTUyBBZnRlciBhIHJlZG8gY2FsbCwgdW5kb01hbmFnZXIncyBwb3Np
dGlvbiBpcyBiYWNrIHRvIDAuIAorUEFTUyBBZnRlciBleGVjdXRpbmcgYW4gZWRpdGluZyBjb21t
YW5kLCBpdGVtKDApIHJldHVybnMgYW4gYXJyYXkgb2YgYW4gb2JqZWN0IHdpdGggbGFiZWwgcHJv
cGVydHkuIAorUEFTUyBpdGVtKDEpIG5vdyByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSB0d28gdHJh
bnNhY3Rpb25zLiAKK1BBU1MgaXRlbSgxKSByZXR1cm5zIGEgZGlmZmVyZW50IG9iamVjdCB0aGFu
IGl0ZW0oMSkuIAorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG9tYW5hZ2VyL3VuZG9t
YW5hZ2VyLWl0ZW0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG9t
YW5hZ2VyL3VuZG9tYW5hZ2VyLWl0ZW0uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2VkaXRpbmcvdW5kb21hbmFnZXIvdW5kb21hbmFnZXItaXRlbS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+
dW5kb01hbmFnZXIuaXRlbSgpPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK1RoaXMgdGVz
dHMgVW5kb01hbmFnZXIncyBpdGVtKCkgbWV0aG9kLgorCis8ZGl2IGlkPSJlZGl0IiBjb250ZW50
RWRpdGFibGU+SGVsbG88L2Rpdj4KKworPHNjcmlwdD4KK3ZhciB1bmRvTWFuYWdlciA9IGRvY3Vt
ZW50LnVuZG9NYW5hZ2VyOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF9pZGxfYXR0
cmlidXRlKHVuZG9NYW5hZ2VyLCAiaXRlbSIpOworfSwgInVuZG9NYW5hZ2VyIGhhcyBpdGVtIHBy
b3BlcnR5LiIpOworCit2YXIgdHJhbnNhY3Rpb24gPSB7ImV4ZWN1dGVBdXRvbWF0aWMiOiBmdW5j
dGlvbigpIHsgfX07Cit2YXIgdHJhbnNhY3Rpb24yID0geyJleGVjdXRlQXV0b21hdGljIjogZnVu
Y3Rpb24oKSB7IH19OworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHVuZG9NYW5hZ2VyLnRyYW5z
YWN0KHRyYW5zYWN0aW9uKTsKKyAgICB1bmRvTWFuYWdlci50cmFuc2FjdCh0cmFuc2FjdGlvbjIs
IHRydWUpOworICAgIAorICAgIHZhciBlbnRyeSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisgICAg
YXNzZXJ0X2VxdWFscyhlbnRyeS5sZW5ndGgsIDIpOworICAgIGFzc2VydF9lcXVhbHMoZW50cnlb
MF0sIHRyYW5zYWN0aW9uKTsKKyAgICBhc3NlcnRfZXF1YWxzKGVudHJ5WzFdLCB0cmFuc2FjdGlv
bjIpOworfSwgIkFmdGVyIHR3byB0cmFuc2FjdCBjYWxscyB0aGF0IGFyZSBtZXJnZWQgaW50byBv
bmUsIGl0ZW0oMCkgcmV0dXJucyBhbiBhcnJheSBvZiAiCisgICAgKyAidGhlIHR3byB0cmFuc2Fj
dGlvbnMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAg
dmFyIGVudHJ5ID0gdW5kb01hbmFnZXIuaXRlbSgxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGVudHJ5
LCBudWxsKTsKK30sICJpdGVtKDEpIHJldHVybnMgbnVsbCBiZWNhdXNlIGl0J3Mgb3V0IG9mIHJh
bmdlLiIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHVuZG9NYW5hZ2VyLnVuZG8oKTsKKwor
ICAgIHZhciBlbnRyeSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisgICAgYXNzZXJ0X2VxdWFscyhl
bnRyeS5sZW5ndGgsIDIpOworICAgIGFzc2VydF9lcXVhbHMoZW50cnlbMF0sIHRyYW5zYWN0aW9u
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGVudHJ5WzFdLCB0cmFuc2FjdGlvbjIpOworfSwgIkFmdGVy
IGFuIHVuZG8gY2FsbCwgaXRlbSgwKSBzdGlsbHMgcmV0dXJuIGFuIGFycmF5IG9mIHRoZSB0d28g
dHJhbnNhY3Rpb25zIGluIHRoZSBjb3JyZWN0IG9yZGVyLiIpOworCit0ZXN0KGZ1bmN0aW9uKCkg
eworICAgIHVuZG9NYW5hZ2VyLnJlZG8oKTsKKyAgICBhc3NlcnRfZXF1YWxzKHVuZG9NYW5hZ2Vy
LnBvc2l0aW9uLCAwKTsKK30sICJBZnRlciBhIHJlZG8gY2FsbCwgdW5kb01hbmFnZXIncyBwb3Np
dGlvbiBpcyBiYWNrIHRvIDAuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIHJhbmdl
ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQiKSk7CisgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLmFkZFJhbmdlKHJhbmdlKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiQm9sZCIpOwor
ICAgIAorICAgIHZhciBlbnRyeSA9IHVuZG9NYW5hZ2VyLml0ZW0oMCk7CisgICAgYXNzZXJ0X2Vx
dWFscyhlbnRyeS5sZW5ndGgsIDEpOworICAgIGFzc2VydF9vd25fcHJvcGVydHkoZW50cnlbMF0s
ICJsYWJlbCIpOworfSwgIkFmdGVyIGV4ZWN1dGluZyBhbiBlZGl0aW5nIGNvbW1hbmQsIGl0ZW0o
MCkgcmV0dXJucyBhbiBhcnJheSBvZiBhbiBvYmplY3Qgd2l0aCBsYWJlbCBwcm9wZXJ0eS4iKTsK
KwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgZW50cnkgPSB1bmRvTWFuYWdlci5pdGVtKDEp
OworICAgIGFzc2VydF9lcXVhbHMoZW50cnkubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGVudHJ5WzBdLCB0cmFuc2FjdGlvbik7CisgICAgYXNzZXJ0X2VxdWFscyhlbnRyeVsxXSwgdHJh
bnNhY3Rpb24yKTsKK30sICJpdGVtKDEpIG5vdyByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSB0d28g
dHJhbnNhY3Rpb25zLiIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF9ub3RfZXF1
YWxzKHVuZG9NYW5hZ2VyLml0ZW0oMSksIHVuZG9NYW5hZ2VyLml0ZW0oMSkpOworfSwgIml0ZW0o
MSkgcmV0dXJucyBhIGRpZmZlcmVudCBvYmplY3QgdGhhbiBpdGVtKDEpLiIpOworCitkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZWRpdCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>