<?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>144178</bug_id>
          
          <creation_ts>2015-04-24 17:49:08 -0700</creation_ts>
          <short_desc>Global functions should be initialized as JSFunctions in byte code</short_desc>
          <delta_ts>2015-05-07 19:00:47 -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>JavaScriptCore</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>
          <dependson>144265</dependson>
    
    <dependson>144620</dependson>
    
    <dependson>144753</dependson>
          <blocked>142944</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1088437</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-04-24 17:49:08 -0700</bug_when>
    <thetext>Currently, ProgramExecutable::initializeGlobalProperties will initialize global &apos;var&apos;s as undefined,
and global functions as JSFunctions. We should have this function initialize global functions to undefined
and initialize those functions as JSFunctions inside the BytecodeGenerator.

This will make implementing lexical scoping at the global scope not insane. Because lexical scopes
are created in byte code, creating JSFunctions inside initializeGlobalProperties will not be created
with the correct scope.

For example:
```
let foo = 20;
function f() { return foo; }
```
Function &apos;f&apos; should be able to see &apos;foo&apos;, even though &apos;foo&apos; doesn&apos;t
live on the global object. Function &apos;f&apos; should still live on the global
object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088598</commentid>
    <comment_count>1</comment_count>
      <attachid>251651</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-04-25 16:19:13 -0700</bug_when>
    <thetext>Created attachment 251651
work in progress

All but two tests are passing. There are the failing tests:
1. A profiler test is failing (I haven&apos;t investigated).

2. An API test is failing; specifically: globalStaticFunction() test.
&apos;globalStaticFunction&apos; is resolving to undefined and not the globalStaticFunction defined inside apitests.js.
I&apos;ve spent some a good amount of time investigating this and every idea I have about what is wrong seems to be incorrect.
If anyone has an idea about why this may be failing, I&apos;d appreciate the help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088959</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-04-27 01:29:51 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 251651 [details]

&gt; 2. An API test is failing; specifically: globalStaticFunction() test.
&gt; &apos;globalStaticFunction&apos; is resolving to undefined and not the
&gt; globalStaticFunction defined inside apitests.js.
&gt; I&apos;ve spent some a good amount of time investigating this and every idea I
&gt; have about what is wrong seems to be incorrect.
&gt; If anyone has an idea about why this may be failing, I&apos;d appreciate the help.

Okay, after some digging I think I now know what&apos;s wrong. JSScope::abstractAccess won&apos;t respect the GlobalObject&apos;s Structure&apos;s propertyAccessesAreCacheable() result if the identifier being resolved is
in the GlobalObject&apos;s symbol table. This seems wrong to me. I think propertyAccessesAreCacheable() should be checked before checking the GlobalObject&apos;s symbol table.

Can anyone confirm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091544</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-04 15:12:36 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; Created attachment 251651 [details]
&gt; 
&gt; &gt; 2. An API test is failing; specifically: globalStaticFunction() test.
&gt; &gt; &apos;globalStaticFunction&apos; is resolving to undefined and not the
&gt; &gt; globalStaticFunction defined inside apitests.js.
&gt; &gt; I&apos;ve spent some a good amount of time investigating this and every idea I
&gt; &gt; have about what is wrong seems to be incorrect.
&gt; &gt; If anyone has an idea about why this may be failing, I&apos;d appreciate the help.
&gt; 
&gt; Okay, after some digging I think I now know what&apos;s wrong.
&gt; JSScope::abstractAccess won&apos;t respect the GlobalObject&apos;s Structure&apos;s
&gt; propertyAccessesAreCacheable() result if the identifier being resolved is
&gt; in the GlobalObject&apos;s symbol table. This seems wrong to me. I think
&gt; propertyAccessesAreCacheable() should be checked before checking the
&gt; GlobalObject&apos;s symbol table.
&gt; 
&gt; Can anyone confirm?
This is wrong. SymbolTablePut/Get should have priority and is cacheable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091553</commentid>
    <comment_count>4</comment_count>
      <attachid>252339</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-04 15:30:55 -0700</bug_when>
    <thetext>Created attachment 252339
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091660</commentid>
    <comment_count>5</comment_count>
      <attachid>252339</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-04 19:39:00 -0700</bug_when>
    <thetext>Comment on attachment 252339
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091675</commentid>
    <comment_count>6</comment_count>
      <attachid>252339</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-04 20:27:27 -0700</bug_when>
    <thetext>Comment on attachment 252339
patch

I&apos;m seeing some flakiness on exceptionFuzz still.

Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091677</commentid>
    <comment_count>7</comment_count>
      <attachid>252339</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-04 20:28:29 -0700</bug_when>
    <thetext>Comment on attachment 252339
patch

Clearing flags on attachment: 252339

Committed r183789: &lt;http://trac.webkit.org/changeset/183789&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091678</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-04 20:28:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091682</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-04 20:31:55 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 144620</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092535</commentid>
    <comment_count>10</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-07 01:03:37 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 252339 [details]
&gt; patch
&gt; 
&gt; I&apos;m seeing some flakiness on exceptionFuzz still.
&gt; 
&gt; Investigating.

I&apos;ve found out the reason:

We now emit put_to_scope for these global functions. They will increment the exceptionFuzz count and if the target count is low enough, will cause the VM to 
throw when initializing the global functions. This thrown exceptionFuzz exception 
won&apos;t be caught because this code for emitting global functions is emitted before 
the code for the actual &quot;program&quot; and so the big try block won&apos;t have the proper
range that includes this pre-&quot;program&quot; initialization.

The idea of throwing an exception fuzz when initializing global functions doesn&apos;t
make sense because if the count is reached, we will invariably get an uncaught exception.

I&apos;ll see if there is a nice way to get around this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092928</commentid>
    <comment_count>11</comment_count>
      <attachid>252666</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-07 18:06:14 -0700</bug_when>
    <thetext>Created attachment 252666
patch

for CQ</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092981</commentid>
    <comment_count>12</comment_count>
      <attachid>252666</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-07 19:00:38 -0700</bug_when>
    <thetext>Comment on attachment 252666
patch

Clearing flags on attachment: 252666

Committed r183972: &lt;http://trac.webkit.org/changeset/183972&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092982</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-07 19:00:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251651</attachid>
            <date>2015-04-25 16:19:13 -0700</date>
            <delta_ts>2015-05-04 15:30:55 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>8791</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgzMjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDgg
KzQ2OSw2IEBAIHZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWwKICAgICBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDAsIGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rp
b25EZWNsYXJhdGlvbnMuc2l6ZSgpOyBpICE9IGVuZDsgaSsrKQotICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5zZWNvbmQpOwogfQog
CiBVbmxpbmtlZENvZGVCbG9jazo6flVubGlua2VkQ29kZUJsb2NrKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZp
c2lvbiAxODMyOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNjM2LDIxICs2MzYsMTQgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHZvaWQgYWRkRnVuY3Rp
b25EZWNsYXJhdGlvbihWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtX2Z1
bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBXcml0ZUJhcnJp
ZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCB0aGlzLCBmdW5jdGlvbkV4ZWN1dGFi
bGUpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBhZGRWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIGJvb2wgaXNDb25zdGFudCkKICAgICB7CiAgICAgICAgIG1fdmFyRGVj
bGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBpc0NvbnN0YW50KSk7CiAgICAg
fQogCiAgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIGJvb2w+PiBWYXJp
YWJsZURlY2xhdGlvbnM7Ci0gICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIs
IFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+ID4gRnVuY3Rpb25EZWNs
YXRpb25zOwogCiAgICAgY29uc3QgVmFyaWFibGVEZWNsYXRpb25zJiB2YXJpYWJsZURlY2xhcmF0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9Ci0gICAgY29uc3QgRnVu
Y3Rpb25EZWNsYXRpb25zJiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
ZnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApAQCAtNjYxLDcgKzY1NCw2IEBAIHByaXZhdGU6CiAg
ICAgfQogCiAgICAgVmFyaWFibGVEZWNsYXRpb25zIG1fdmFyRGVjbGFyYXRpb25zOwotICAgIEZ1
bmN0aW9uRGVjbGF0aW9ucyBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOwogCiBwdWJsaWM6CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAxODMyOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsMjUgQEAgUGFyc2Vy
RXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogCiAgICAgewogICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdGVtcCA9IG5ld1RlbXBvcmFyeSgpOwotICAgICAgICBmb3IgKEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSA6IG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplKSB7Cisg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBnbG9iYWxTY29wZTsKKyAgICAgICAgZm9yIChhdXRv
IGZ1bmN0aW9uUGFpciA6IG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplKSB7CisgICAgICAgICAgICBG
dW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHkgPSBmdW5jdGlvblBhaXIuZmlyc3Q7CisgICAg
ICAgICAgICBGdW5jdGlvblZhcmlhYmxlVHlwZSB0eXBlID0gZnVuY3Rpb25QYWlyLnNlY29uZDsK
ICAgICAgICAgICAgIGVtaXROZXdGdW5jdGlvbih0ZW1wLmdldCgpLCBmdW5jdGlvbkJvZHkpOwot
ICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcmlhYmxlKHZhcmlhYmxlKGZ1bmN0aW9uQm9keS0+aWRl
bnQoKSksIHRlbXAuZ2V0KCkpOworICAgICAgICAgICAgaWYgKHR5cGUgPT0gTm9ybWFsRnVuY3Rp
b25WYXJpYWJsZSkgeworICAgICAgICAgICAgICAgIGluaXRpYWxpemVWYXJpYWJsZSh2YXJpYWJs
ZShmdW5jdGlvbkJvZHktPmlkZW50KCkpICwgdGVtcC5nZXQoKSk7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEds
b2JhbEZ1bmN0aW9uVmFyaWFibGUpOworICAgICAgICAgICAgaWYgKCFnbG9iYWxTY29wZSkgewor
ICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlID0gbmV3UmVnaXN0ZXIoKTsKKyAgICAgICAgICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBlbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIs
IFZhcmlhYmxlKGZ1bmN0aW9uQm9keS0+aWRlbnQoKSkpOworICAgICAgICAgICAgICAgIGVtaXRP
cGNvZGUob3BfbW92KTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2xv
YmFsU2NvcGUtPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChzY29wZS0+aW5kZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbWl0UHV0VG9T
Y29wZShnbG9iYWxTY29wZS5nZXQoKSwgVmFyaWFibGUoZnVuY3Rpb25Cb2R5LT5pZGVudCgpKSwg
dGVtcC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAg
LTE2MCw4ICsxNzYsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0m
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0YWNrW2ld
OwotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbiA9
IG1ha2VGdW5jdGlvbihmdW5jdGlvbik7Ci0gICAgICAgIGNvZGVCbG9jay0+YWRkRnVuY3Rpb25E
ZWNsYXJhdGlvbigqbV92bSwgZnVuY3Rpb24tPmlkZW50KCksIHVubGlua2VkRnVuY3Rpb24pOwor
ICAgICAgICBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZnVu
Y3Rpb24sIEdsb2JhbEZ1bmN0aW9uVmFyaWFibGUpKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKQpAQCAtMzc4LDcgKzM5Myw3IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICBmb3IgKEZ1bmN0aW9u
Qm9keU5vZGUqIGZ1bmN0aW9uIDogZnVuY3Rpb25Ob2RlLT5mdW5jdGlvblN0YWNrKCkpIHsKICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBmdW5jdGlvbi0+aWRlbnQoKTsKICAgICAg
ICAgY3JlYXRlVmFyaWFibGUoaWRlbnQsIHZhcktpbmQoaWRlbnQuaW1wbCgpKSwgSXNWYXJpYWJs
ZSk7Ci0gICAgICAgIG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFwcGVuZChmdW5jdGlvbik7Cisg
ICAgICAgIG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihmdW5j
dGlvbiwgTm9ybWFsRnVuY3Rpb25WYXJpYWJsZSkpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogZnVuY3Rpb25Ob2RlLT52YXJTdGFjaygpKSB7CiAgICAgICAgIENvbnN0YW50TW9kZSBj
b25zdGFudE1vZGUgPSBtb2RlRm9ySXNDb25zdGFudChlbnRyeS5zZWNvbmQgJiBEZWNsYXJhdGlv
blN0YWNrczo6SXNDb25zdGFudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODMyOTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTczMyw3ICs3MzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGb3JJbkNvbnRleHQ+PiBtX2ZvckluQ29udGV4
dFN0YWNrOwogICAgICAgICBWZWN0b3I8VHJ5Q29udGV4dD4gbV90cnlDb250ZXh0U3RhY2s7CiAg
ICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFJlZ2lzdGVySUQ+LCBjb25zdCBEZWNvbnN0
cnVjdGlvblBhdHRlcm5Ob2RlKj4+IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnM7Ci0gICAgICAg
IFZlY3RvcjxGdW5jdGlvbkJvZHlOb2RlKj4gbV9mdW5jdGlvbnNUb0luaXRpYWxpemU7CisgICAg
ICAgIGVudW0gRnVuY3Rpb25WYXJpYWJsZVR5cGUgOiB1aW50OF90IHsgTm9ybWFsRnVuY3Rpb25W
YXJpYWJsZSwgR2xvYmFsRnVuY3Rpb25WYXJpYWJsZSB9OworICAgICAgICBWZWN0b3I8c3RkOjpw
YWlyPEZ1bmN0aW9uQm9keU5vZGUqLCBGdW5jdGlvblZhcmlhYmxlVHlwZT4+IG1fZnVuY3Rpb25z
VG9Jbml0aWFsaXplOwogICAgICAgICBib29sIG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50cyB7
IGZhbHNlIH07CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2Vz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJ
KHJldmlzaW9uIDE4MzI5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsMTIgKzUxMCwxMSBAQCBKU09iamVjdCog
UHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHCiAgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRp
bWl6ZXIgb3B0aW1pemVyKHZtLCBnbG9iYWxPYmplY3QpOwogCiAgICAgY29uc3QgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrOjpWYXJpYWJsZURlY2xhdGlvbnMmIHZhcmlhYmxlRGVjbGFyYXRpb25z
ID0gdW5saW5rZWRDb2RlQmxvY2stPnZhcmlhYmxlRGVjbGFyYXRpb25zKCk7Ci0gICAgY29uc3Qg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpGdW5jdGlvbkRlY2xhdGlvbnMmIGZ1bmN0aW9uRGVj
bGFyYXRpb25zID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCk7CiAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uRGVjbGFyYXRpb25zLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSA9IGZ1bmN0aW9uRGVjbGFyYXRpb25zW2ldLnNlY29uZC5nZXQoKTsKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUtPmxpbmsodm0sIG1fc291cmNlKSwgc2NvcGUpOwotICAgICAgICBnbG9i
YWxPYmplY3QtPmFkZEZ1bmN0aW9uKGNhbGxGcmFtZSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0u
Zmlyc3QsIHZhbHVlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgKytpKSB7CisgICAgICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA9IHVubGlua2VkQ29k
ZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CisgICAgICAgIEFTU0VSVCghdW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUtPm5hbWUoKS5pc0VtcHR5KCkpOworICAgICAgICBnbG9iYWxPYmplY3QtPmFk
ZEZ1bmN0aW9uKGNhbGxGcmFtZSwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKSk7
CiAgICAgICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250cm9sRmxvd1Byb2ZpbGVy
KCkpIHsKICAgICAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRV
bmV4ZWN1dGVkUmFuZ2Uoc291cmNlSUQoKSwgCiAgICAgICAgICAgICAgICAgdW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlz
aW9uIDE4MzI5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDE0ICs1MjUsMTEgQEAgSlNHbG9iYWxPYmpl
Y3Q6Ok5ld0dsb2JhbFZhciBKU0dsb2JhbE9iagogICAgIHJldHVybiB2YXI7CiB9CiAKLXZvaWQg
SlNHbG9iYWxPYmplY3Q6OmFkZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0dsb2JhbE9iamVjdDo6
YWRkRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICByZW1vdmVEaXJlY3Qodm0sIHBy
b3BlcnR5TmFtZSk7IC8vIE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3Rp
bmcgcHJvcGVydGllcy4KLSAgICBOZXdHbG9iYWxWYXIgdmFyID0gYWRkR2xvYmFsVmFyKHByb3Bl
cnR5TmFtZSwgSXNWYXJpYWJsZSk7Ci0gICAgdmFyaWFibGVBdCh2YXIub2Zmc2V0KS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgdmFsdWUpOwotICAgIGlmICh2YXIuc2V0KQotICAgICAgICB2YXIuc2V0
LT50b3VjaChWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsKKyAg
ICBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc1ZhcmlhYmxlKTsKIH0KIAogc3RhdGljIGlu
bGluZSBKU09iamVjdCogbGFzdEluUHJvdG90eXBlQ2hhaW4oSlNPYmplY3QqIG9iamVjdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAko
cmV2aXNpb24gMTgzMjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzczLDcgKzM3Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKCFoYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAg
YWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNDb25zdGFudCk7CiAgICAgfQotICAgIHZvaWQg
YWRkRnVuY3Rpb24oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUpOworICAg
IHZvaWQgYWRkRnVuY3Rpb24oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwogCiAgICAg
Ly8gVGhlIGZvbGxvd2luZyBhY2Nlc3NvcnMgcmV0dXJuIHByaXN0aW5lIHZhbHVlcywgZXZlbiBp
ZiBhIHNjcmlwdCAKICAgICAvLyByZXBsYWNlcyB0aGUgZ2xvYmFsIG9iamVjdCdzIGFzc29jaWF0
ZWQgcHJvcGVydHkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252339</attachid>
            <date>2015-05-04 15:30:55 -0700</date>
            <delta_ts>2015-05-07 18:06:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>11754</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNzczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTA1LTA0ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBHbG9iYWwgZnVuY3Rpb25zIHNob3VsZCBiZSBpbml0aWFsaXplZCBhcyBKU0Z1bmN0aW9u
cyBpbiBieXRlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDE3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGdsb2JhbCBmdW5j
dGlvbnMgbW9yZSBleHBsaWNpdCBieQorICAgICAgICBtb3ZpbmcgaW5pdGlhbGl6YXRpb24gaW50
byBieXRlY29kZS4gSXQgYWxzbyBwcmVwYXJlcyBKU0MgZm9yIGhhdmluZyBFUzYKKyAgICAgICAg
c3R5bGUgbGV4aWNhbCBzY29waW5nIGJlY2F1c2UgaW5pdGlhbGl6aW5nIGdsb2JhbCBmdW5jdGlv
bnMgaW4gYnl0ZWNvZGUKKyAgICAgICAgZWFzaWx5IGFsbG93cyBnbG9iYWwgZnVuY3Rpb25zIHRv
IGJlIGluaXRpYWxpemVkIHdpdGggdGhlIHByb3BlciBzY29wZSB0aGF0CisgICAgICAgIHdpbGwg
aGF2ZSBhY2Nlc3MgdG8gZ2xvYmFsIGxleGljYWwgdmFyaWFibGVzLiBHbG9iYWwgbGV4aWNhbCB2
YXJpYWJsZXMKKyAgICAgICAgc2hvdWxkIGJlIHZpc2libGUgdG8gZ2xvYmFsIGZ1bmN0aW9ucyBi
dXQgZG9uJ3QgbGl2ZSBvbiB0aGUgZ2xvYmFsIG9iamVjdC4KKworICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHbG9iYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFkZEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oOgorCiAyMDE1LTA1LTA0ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4K
IAogICAgICAgICBPcHRpbWl6ZSBXZWFrQmxvY2sncyAicmVhcCIgYW5kICJ2aXNpdCIgb3BlcmF0
aW9ucy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgzNzU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcxLDggKzQ3MSw2IEBAIHZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWwK
ICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDAsIGVuZCA9IHRoaXNPYmplY3QtPm1f
ZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgpOyBpICE9IGVuZDsgaSsrKQotICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5zZWNvbmQp
OwogfQogCiBVbmxpbmtlZENvZGVCbG9jazo6flVubGlua2VkQ29kZUJsb2NrKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CShyZXZpc2lvbiAxODM3NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNjU0LDIxICs2NTQsMTQgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHZvaWQgYWRk
RnVuY3Rpb25EZWNsYXJhdGlvbihWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCi0gICAgewotICAgICAg
ICBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBXcml0
ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCB0aGlzLCBmdW5jdGlvbkV4
ZWN1dGFibGUpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBhZGRWYXJpYWJsZURlY2xhcmF0aW9uKGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIGJvb2wgaXNDb25zdGFudCkKICAgICB7CiAgICAgICAgIG1f
dmFyRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBpc0NvbnN0YW50KSk7
CiAgICAgfQogCiAgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIGJvb2w+
PiBWYXJpYWJsZURlY2xhdGlvbnM7Ci0gICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPElkZW50
aWZpZXIsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+ID4gRnVuY3Rp
b25EZWNsYXRpb25zOwogCiAgICAgY29uc3QgVmFyaWFibGVEZWNsYXRpb25zJiB2YXJpYWJsZURl
Y2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9Ci0gICAgY29u
c3QgRnVuY3Rpb25EZWNsYXRpb25zJiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApAQCAtNjc5LDcgKzY3Miw2IEBAIHByaXZh
dGU6CiAgICAgfQogCiAgICAgVmFyaWFibGVEZWNsYXRpb25zIG1fdmFyRGVjbGFyYXRpb25zOwot
ICAgIEZ1bmN0aW9uRGVjbGF0aW9ucyBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOwogCiBwdWJsaWM6
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAxODM3NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsMTcgQEAg
UGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogCiAgICAgewogICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IG5ld1RlbXBvcmFyeSgpOwotICAgICAgICBmb3Ig
KEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSA6IG1fZnVuY3Rpb25zVG9Jbml0aWFsaXpl
KSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBnbG9iYWxTY29wZSA9IHNjb3BlUmVnaXN0
ZXIoKTsgLy8gRklYTUU6IFdpdGggbGV4aWNhbCBzY29waW5nLCB0aGlzIHdvbid0IGFsd2F5cyBi
ZSB0aGUgZ2xvYmFsIG9iamVjdDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0Mjk0NCAKKyAgICAgICAgZm9yIChhdXRvIGZ1bmN0aW9uUGFpciA6IG1fZnVuY3Rpb25z
VG9Jbml0aWFsaXplKSB7CisgICAgICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJv
ZHkgPSBmdW5jdGlvblBhaXIuZmlyc3Q7CisgICAgICAgICAgICBGdW5jdGlvblZhcmlhYmxlVHlw
ZSBmdW5jdGlvblR5cGUgPSBmdW5jdGlvblBhaXIuc2Vjb25kOwogICAgICAgICAgICAgZW1pdE5l
d0Z1bmN0aW9uKHRlbXAuZ2V0KCksIGZ1bmN0aW9uQm9keSk7Ci0gICAgICAgICAgICBpbml0aWFs
aXplVmFyaWFibGUodmFyaWFibGUoZnVuY3Rpb25Cb2R5LT5pZGVudCgpKSwgdGVtcC5nZXQoKSk7
CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vcm1hbEZ1bmN0aW9uVmFyaWFibGUp
CisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcmlhYmxlKHZhcmlhYmxlKGZ1bmN0aW9uQm9k
eS0+aWRlbnQoKSkgLCB0ZW1wLmdldCgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9u
VHlwZSA9PSBHbG9iYWxGdW5jdGlvblZhcmlhYmxlKQorICAgICAgICAgICAgICAgIGVtaXRQdXRU
b1Njb3BlKGdsb2JhbFNjb3BlLmdldCgpLCBWYXJpYWJsZShmdW5jdGlvbkJvZHktPmlkZW50KCkp
LCB0ZW1wLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC0xNjMsOCArMTcxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKFZNJgogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rp
b25TdGFja1tpXTsKLSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
RnVuY3Rpb24gPSBtYWtlRnVuY3Rpb24oZnVuY3Rpb24pOwotICAgICAgICBjb2RlQmxvY2stPmFk
ZEZ1bmN0aW9uRGVjbGFyYXRpb24oKm1fdm0sIGZ1bmN0aW9uLT5pZGVudCgpLCB1bmxpbmtlZEZ1
bmN0aW9uKTsKKyAgICAgICAgbV9mdW5jdGlvbnNUb0luaXRpYWxpemUuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGZ1bmN0aW9uLCBHbG9iYWxGdW5jdGlvblZhcmlhYmxlKSk7CiAgICAgfQogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkKQEAgLTM4NCw3ICsz
OTEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgZm9y
IChGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFj
aygpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50
KCk7CiAgICAgICAgIGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSks
IElzVmFyaWFibGUpOwotICAgICAgICBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoZnVu
Y3Rpb24pOworICAgICAgICBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoZnVuY3Rpb24sIE5vcm1hbEZ1bmN0aW9uVmFyaWFibGUpKTsKICAgICB9CiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IGZ1bmN0aW9uTm9kZS0+dmFyU3RhY2soKSkgewogICAgICAgICBDb25z
dGFudE1vZGUgY29uc3RhbnRNb2RlID0gbW9kZUZvcklzQ29uc3RhbnQoZW50cnkuc2Vjb25kICYg
RGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNp
b24gMTgzNzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NDQsNyArNzQ0LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gbV9m
b3JJbkNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1fdHJ5Q29udGV4
dFN0YWNrOwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3RlcklEPiwgY29u
c3QgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJz
OwotICAgICAgICBWZWN0b3I8RnVuY3Rpb25Cb2R5Tm9kZSo+IG1fZnVuY3Rpb25zVG9Jbml0aWFs
aXplOworICAgICAgICBlbnVtIEZ1bmN0aW9uVmFyaWFibGVUeXBlIDogdWludDhfdCB7IE5vcm1h
bEZ1bmN0aW9uVmFyaWFibGUsIEdsb2JhbEZ1bmN0aW9uVmFyaWFibGUgfTsKKyAgICAgICAgVmVj
dG9yPHN0ZDo6cGFpcjxGdW5jdGlvbkJvZHlOb2RlKiwgRnVuY3Rpb25WYXJpYWJsZVR5cGU+PiBt
X2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZTsKICAgICAgICAgYm9vbCBtX25lZWRUb0luaXRpYWxpemVB
cmd1bWVudHMgeyBmYWxzZSB9OwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBt
X3RyeVJhbmdlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAxODM3NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEwLDEyICs1MTAsMTEgQEAg
SlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplRwogICAgIEJhdGNoZWRUcmFu
c2l0aW9uT3B0aW1pemVyIG9wdGltaXplcih2bSwgZ2xvYmFsT2JqZWN0KTsKIAogICAgIGNvbnN0
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6VmFyaWFibGVEZWNsYXRpb25zJiB2YXJpYWJsZURl
Y2xhcmF0aW9ucyA9IHVubGlua2VkQ29kZUJsb2NrLT52YXJpYWJsZURlY2xhcmF0aW9ucygpOwot
ICAgIGNvbnN0IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6RnVuY3Rpb25EZWNsYXRpb25zJiBm
dW5jdGlvbkRlY2xhcmF0aW9ucyA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2xhcmF0
aW9ucygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlY2xhcmF0aW9u
cy5zaXplKCk7ICsraSkgewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgPSBmdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5zZWNvbmQu
Z2V0KCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5saW5rKHZtLCBtX3NvdXJjZSksIHNjb3BlKTsKLSAg
ICAgICAgZ2xvYmFsT2JqZWN0LT5hZGRGdW5jdGlvbihjYWxsRnJhbWUsIGZ1bmN0aW9uRGVjbGFy
YXRpb25zW2ldLmZpcnN0LCB2YWx1ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIG51bWJlck9m
RnVuY3Rpb25zID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpOyBp
IDwgbnVtYmVyT2ZGdW5jdGlvbnM7ICsraSkgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+
ZnVuY3Rpb25EZWNsKGkpOworICAgICAgICBBU1NFUlQoIXVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLT5uYW1lKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5hZGRGdW5jdGlv
bihjYWxsRnJhbWUsIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5uYW1lKCkpOwogICAgICAg
ICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpKSB7CiAg
ICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRl
ZFJhbmdlKHNvdXJjZUlEKCksIAogICAgICAgICAgICAgICAgIHVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxODM3
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwMiwxNiArNTAyLDEyIEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEoKICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHko
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7
CiB9CiAKLUpTR2xvYmFsT2JqZWN0OjpOZXdHbG9iYWxWYXIgSlNHbG9iYWxPYmplY3Q6OmFkZEds
b2JhbFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9k
ZSkKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSkKIHsKICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLT5tX2xvY2spOwogICAgIFN5bWJvbFRhYmxlRW50cnkg
ZW50cnkgPSBzeW1ib2xUYWJsZSgpLT5nZXQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwotICAgIGlm
ICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgTmV3R2xvYmFsVmFyIHJlc3VsdDsKLSAgICAg
ICAgcmVzdWx0Lm9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7Ci0gICAgICAgIHJlc3VsdC5z
ZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQorICAgIGlmICghZW50cnkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKICAgICAKICAgICBT
Y29wZU9mZnNldCBvZmZzZXQgPSBzeW1ib2xUYWJsZSgpLT50YWtlTmV4dFNjb3BlT2Zmc2V0KGxv
Y2tlcik7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSwg
KGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDogMCk7CkBAIC01MjMsMjEg
KzUxOSwxMyBAQCBKU0dsb2JhbE9iamVjdDo6TmV3R2xvYmFsVmFyIEpTR2xvYmFsT2JqCiAgICAg
CiAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0Rm9yQXNzZXJ0ID0gYWRkVmFyaWFibGVzKDEpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG9mZnNldEZvckFzc2VydCA9PSBvZmZzZXQpOwotCi0gICAgTmV3R2xv
YmFsVmFyIHZhcjsKLSAgICB2YXIub2Zmc2V0ID0gb2Zmc2V0OwotICAgIHZhci5zZXQgPSBuZXdF
bnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgcmV0dXJuIHZhcjsKIH0KIAotdm9pZCBKU0dsb2Jh
bE9iamVjdDo6YWRkRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIHJlbW92ZURpcmVjdCh2bSwgcHJvcGVydHlO
YW1lKTsgLy8gTmV3bHkgZGVjbGFyZWQgZnVuY3Rpb25zIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9w
ZXJ0aWVzLgotICAgIE5ld0dsb2JhbFZhciB2YXIgPSBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1l
LCBJc1ZhcmlhYmxlKTsKLSAgICB2YXJpYWJsZUF0KHZhci5vZmZzZXQpLnNldChleGVjLT52bSgp
LCB0aGlzLCB2YWx1ZSk7Ci0gICAgaWYgKHZhci5zZXQpCi0gICAgICAgIHZhci5zZXQtPnRvdWNo
KFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOworICAgIGFkZEds
b2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUpOwogfQogCiBzdGF0aWMgaW5saW5lIEpT
T2JqZWN0KiBsYXN0SW5Qcm90b3R5cGVDaGFpbihKU09iamVjdCogb2JqZWN0KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAxODM3NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsMTEgKzMzOCw3IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgc2V0R2xvYmFsVGhpcyh2bSwgdGhpc1ZhbHVlKTsKICAgICB9CiAKLSAgICBzdHJ1Y3QgTmV3
R2xvYmFsVmFyIHsKLSAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0OwotICAgICAgICBXYXRjaHBv
aW50U2V0KiBzZXQ7Ci0gICAgfTsKLSAgICBOZXdHbG9iYWxWYXIgYWRkR2xvYmFsVmFyKGNvbnN0
IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUpOworICAgIHZvaWQgYWRkR2xvYmFsVmFyKGNvbnN0
IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUpOwogCiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CkBAIC0zNzQsNyArMzcwLDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIWhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICBh
ZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc0NvbnN0YW50KTsKICAgICB9Ci0gICAgdm9pZCBh
ZGRGdW5jdGlvbihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSk7CisgICAg
dm9pZCBhZGRGdW5jdGlvbihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAKICAgICAv
LyBUaGUgZm9sbG93aW5nIGFjY2Vzc29ycyByZXR1cm4gcHJpc3RpbmUgdmFsdWVzLCBldmVuIGlm
IGEgc2NyaXB0IAogICAgIC8vIHJlcGxhY2VzIHRoZSBnbG9iYWwgb2JqZWN0J3MgYXNzb2NpYXRl
ZCBwcm9wZXJ0eS4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252666</attachid>
            <date>2015-05-07 18:06:14 -0700</date>
            <delta_ts>2015-05-07 19:00:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>work-backup.diff</filename>
            <type>text/plain</type>
            <size>11754</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzOTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTA1LTA3ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBHbG9iYWwgZnVuY3Rpb25zIHNob3VsZCBiZSBpbml0aWFsaXplZCBhcyBKU0Z1bmN0aW9u
cyBpbiBieXRlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDE3OAorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGdsb2JhbCBmdW5j
dGlvbnMgbW9yZSBleHBsaWNpdCBieQorICAgICAgICBtb3ZpbmcgaW5pdGlhbGl6YXRpb24gaW50
byBieXRlY29kZS4gSXQgYWxzbyBwcmVwYXJlcyBKU0MgZm9yIGhhdmluZyBFUzYKKyAgICAgICAg
c3R5bGUgbGV4aWNhbCBzY29waW5nIGJlY2F1c2UgaW5pdGlhbGl6aW5nIGdsb2JhbCBmdW5jdGlv
bnMgaW4gYnl0ZWNvZGUKKyAgICAgICAgZWFzaWx5IGFsbG93cyBnbG9iYWwgZnVuY3Rpb25zIHRv
IGJlIGluaXRpYWxpemVkIHdpdGggdGhlIHByb3BlciBzY29wZSB0aGF0CisgICAgICAgIHdpbGwg
aGF2ZSBhY2Nlc3MgdG8gZ2xvYmFsIGxleGljYWwgdmFyaWFibGVzLiBHbG9iYWwgbGV4aWNhbCB2
YXJpYWJsZXMKKyAgICAgICAgc2hvdWxkIGJlIHZpc2libGUgdG8gZ2xvYmFsIGZ1bmN0aW9ucyBi
dXQgZG9uJ3QgbGl2ZSBvbiB0aGUgZ2xvYmFsIG9iamVjdC4KKworICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHbG9iYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFkZEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oOgorCiAyMDE1LTA1LTA3ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtKU0NdIEFkZCBiYXNpYyBERkcvRlRMIHN1cHBvcnQgZm9yIE1hdGgu
cm91bmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgzOTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcxLDggKzQ3MSw2IEBAIHZvaWQgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjp2aXNpdENoaWwK
ICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDAsIGVuZCA9IHRoaXNPYmplY3QtPm1f
ZnVuY3Rpb25EZWNsYXJhdGlvbnMuc2l6ZSgpOyBpICE9IGVuZDsgaSsrKQotICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5zZWNvbmQp
OwogfQogCiBVbmxpbmtlZENvZGVCbG9jazo6flVubGlua2VkQ29kZUJsb2NrKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CShyZXZpc2lvbiAxODM5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNjU0LDIxICs2NTQsMTQgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHZvaWQgYWRk
RnVuY3Rpb25EZWNsYXJhdGlvbihWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUpCi0gICAgewotICAgICAg
ICBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBXcml0
ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCB0aGlzLCBmdW5jdGlvbkV4
ZWN1dGFibGUpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBhZGRWYXJpYWJsZURlY2xhcmF0aW9uKGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIGJvb2wgaXNDb25zdGFudCkKICAgICB7CiAgICAgICAgIG1f
dmFyRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihuYW1lLCBpc0NvbnN0YW50KSk7
CiAgICAgfQogCiAgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIGJvb2w+
PiBWYXJpYWJsZURlY2xhdGlvbnM7Ci0gICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPElkZW50
aWZpZXIsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+ID4gRnVuY3Rp
b25EZWNsYXRpb25zOwogCiAgICAgY29uc3QgVmFyaWFibGVEZWNsYXRpb25zJiB2YXJpYWJsZURl
Y2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9Ci0gICAgY29u
c3QgRnVuY3Rpb25EZWNsYXRpb25zJiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApAQCAtNjc5LDcgKzY3Miw2IEBAIHByaXZh
dGU6CiAgICAgfQogCiAgICAgVmFyaWFibGVEZWNsYXRpb25zIG1fdmFyRGVjbGFyYXRpb25zOwot
ICAgIEZ1bmN0aW9uRGVjbGF0aW9ucyBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOwogCiBwdWJsaWM6
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAxODM5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsMTcgQEAg
UGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogCiAgICAgewogICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IG5ld1RlbXBvcmFyeSgpOwotICAgICAgICBmb3Ig
KEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSA6IG1fZnVuY3Rpb25zVG9Jbml0aWFsaXpl
KSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBnbG9iYWxTY29wZSA9IHNjb3BlUmVnaXN0
ZXIoKTsgLy8gRklYTUU6IFdpdGggbGV4aWNhbCBzY29waW5nLCB0aGlzIHdvbid0IGFsd2F5cyBi
ZSB0aGUgZ2xvYmFsIG9iamVjdDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0Mjk0NCAKKyAgICAgICAgZm9yIChhdXRvIGZ1bmN0aW9uUGFpciA6IG1fZnVuY3Rpb25z
VG9Jbml0aWFsaXplKSB7CisgICAgICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJv
ZHkgPSBmdW5jdGlvblBhaXIuZmlyc3Q7CisgICAgICAgICAgICBGdW5jdGlvblZhcmlhYmxlVHlw
ZSBmdW5jdGlvblR5cGUgPSBmdW5jdGlvblBhaXIuc2Vjb25kOwogICAgICAgICAgICAgZW1pdE5l
d0Z1bmN0aW9uKHRlbXAuZ2V0KCksIGZ1bmN0aW9uQm9keSk7Ci0gICAgICAgICAgICBpbml0aWFs
aXplVmFyaWFibGUodmFyaWFibGUoZnVuY3Rpb25Cb2R5LT5pZGVudCgpKSwgdGVtcC5nZXQoKSk7
CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vcm1hbEZ1bmN0aW9uVmFyaWFibGUp
CisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcmlhYmxlKHZhcmlhYmxlKGZ1bmN0aW9uQm9k
eS0+aWRlbnQoKSkgLCB0ZW1wLmdldCgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9u
VHlwZSA9PSBHbG9iYWxGdW5jdGlvblZhcmlhYmxlKQorICAgICAgICAgICAgICAgIGVtaXRQdXRU
b1Njb3BlKGdsb2JhbFNjb3BlLmdldCgpLCBWYXJpYWJsZShmdW5jdGlvbkJvZHktPmlkZW50KCkp
LCB0ZW1wLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC0xNjMsOCArMTcxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKFZNJgogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rp
b25TdGFja1tpXTsKLSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
RnVuY3Rpb24gPSBtYWtlRnVuY3Rpb24oZnVuY3Rpb24pOwotICAgICAgICBjb2RlQmxvY2stPmFk
ZEZ1bmN0aW9uRGVjbGFyYXRpb24oKm1fdm0sIGZ1bmN0aW9uLT5pZGVudCgpLCB1bmxpbmtlZEZ1
bmN0aW9uKTsKKyAgICAgICAgbV9mdW5jdGlvbnNUb0luaXRpYWxpemUuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGZ1bmN0aW9uLCBHbG9iYWxGdW5jdGlvblZhcmlhYmxlKSk7CiAgICAgfQogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkKQEAgLTM4NCw3ICsz
OTEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgZm9y
IChGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFj
aygpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50
KCk7CiAgICAgICAgIGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSks
IElzVmFyaWFibGUpOwotICAgICAgICBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoZnVu
Y3Rpb24pOworICAgICAgICBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoZnVuY3Rpb24sIE5vcm1hbEZ1bmN0aW9uVmFyaWFibGUpKTsKICAgICB9CiAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IGZ1bmN0aW9uTm9kZS0+dmFyU3RhY2soKSkgewogICAgICAgICBDb25z
dGFudE1vZGUgY29uc3RhbnRNb2RlID0gbW9kZUZvcklzQ29uc3RhbnQoZW50cnkuc2Vjb25kICYg
RGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNp
b24gMTgzOTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NDQsNyArNzQ0LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gbV9m
b3JJbkNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1fdHJ5Q29udGV4
dFN0YWNrOwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3RlcklEPiwgY29u
c3QgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJz
OwotICAgICAgICBWZWN0b3I8RnVuY3Rpb25Cb2R5Tm9kZSo+IG1fZnVuY3Rpb25zVG9Jbml0aWFs
aXplOworICAgICAgICBlbnVtIEZ1bmN0aW9uVmFyaWFibGVUeXBlIDogdWludDhfdCB7IE5vcm1h
bEZ1bmN0aW9uVmFyaWFibGUsIEdsb2JhbEZ1bmN0aW9uVmFyaWFibGUgfTsKKyAgICAgICAgVmVj
dG9yPHN0ZDo6cGFpcjxGdW5jdGlvbkJvZHlOb2RlKiwgRnVuY3Rpb25WYXJpYWJsZVR5cGU+PiBt
X2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZTsKICAgICAgICAgYm9vbCBtX25lZWRUb0luaXRpYWxpemVB
cmd1bWVudHMgeyBmYWxzZSB9OwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBt
X3RyeVJhbmdlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAxODM5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEwLDEyICs1MTAsMTEgQEAg
SlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplRwogICAgIEJhdGNoZWRUcmFu
c2l0aW9uT3B0aW1pemVyIG9wdGltaXplcih2bSwgZ2xvYmFsT2JqZWN0KTsKIAogICAgIGNvbnN0
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6VmFyaWFibGVEZWNsYXRpb25zJiB2YXJpYWJsZURl
Y2xhcmF0aW9ucyA9IHVubGlua2VkQ29kZUJsb2NrLT52YXJpYWJsZURlY2xhcmF0aW9ucygpOwot
ICAgIGNvbnN0IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6RnVuY3Rpb25EZWNsYXRpb25zJiBm
dW5jdGlvbkRlY2xhcmF0aW9ucyA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2xhcmF0
aW9ucygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlY2xhcmF0aW9u
cy5zaXplKCk7ICsraSkgewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgPSBmdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5zZWNvbmQu
Z2V0KCk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5saW5rKHZtLCBtX3NvdXJjZSksIHNjb3BlKTsKLSAg
ICAgICAgZ2xvYmFsT2JqZWN0LT5hZGRGdW5jdGlvbihjYWxsRnJhbWUsIGZ1bmN0aW9uRGVjbGFy
YXRpb25zW2ldLmZpcnN0LCB2YWx1ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIG51bWJlck9m
RnVuY3Rpb25zID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpOyBp
IDwgbnVtYmVyT2ZGdW5jdGlvbnM7ICsraSkgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+
ZnVuY3Rpb25EZWNsKGkpOworICAgICAgICBBU1NFUlQoIXVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLT5uYW1lKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5hZGRGdW5jdGlv
bihjYWxsRnJhbWUsIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5uYW1lKCkpOwogICAgICAg
ICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpKSB7CiAg
ICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRl
ZFJhbmdlKHNvdXJjZUlEKCksIAogICAgICAgICAgICAgICAgIHVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxODM5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwMiwxNiArNTAyLDEyIEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEoKICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHko
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7
CiB9CiAKLUpTR2xvYmFsT2JqZWN0OjpOZXdHbG9iYWxWYXIgSlNHbG9iYWxPYmplY3Q6OmFkZEds
b2JhbFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9k
ZSkKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSkKIHsKICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLT5tX2xvY2spOwogICAgIFN5bWJvbFRhYmxlRW50cnkg
ZW50cnkgPSBzeW1ib2xUYWJsZSgpLT5nZXQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwotICAgIGlm
ICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgTmV3R2xvYmFsVmFyIHJlc3VsdDsKLSAgICAg
ICAgcmVzdWx0Lm9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7Ci0gICAgICAgIHJlc3VsdC5z
ZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQorICAgIGlmICghZW50cnkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKICAgICAKICAgICBT
Y29wZU9mZnNldCBvZmZzZXQgPSBzeW1ib2xUYWJsZSgpLT50YWtlTmV4dFNjb3BlT2Zmc2V0KGxv
Y2tlcik7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSwg
KGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDogMCk7CkBAIC01MjMsMjEg
KzUxOSwxMyBAQCBKU0dsb2JhbE9iamVjdDo6TmV3R2xvYmFsVmFyIEpTR2xvYmFsT2JqCiAgICAg
CiAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0Rm9yQXNzZXJ0ID0gYWRkVmFyaWFibGVzKDEpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG9mZnNldEZvckFzc2VydCA9PSBvZmZzZXQpOwotCi0gICAgTmV3R2xv
YmFsVmFyIHZhcjsKLSAgICB2YXIub2Zmc2V0ID0gb2Zmc2V0OwotICAgIHZhci5zZXQgPSBuZXdF
bnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgcmV0dXJuIHZhcjsKIH0KIAotdm9pZCBKU0dsb2Jh
bE9iamVjdDo6YWRkRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIHJlbW92ZURpcmVjdCh2bSwgcHJvcGVydHlO
YW1lKTsgLy8gTmV3bHkgZGVjbGFyZWQgZnVuY3Rpb25zIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9w
ZXJ0aWVzLgotICAgIE5ld0dsb2JhbFZhciB2YXIgPSBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1l
LCBJc1ZhcmlhYmxlKTsKLSAgICB2YXJpYWJsZUF0KHZhci5vZmZzZXQpLnNldChleGVjLT52bSgp
LCB0aGlzLCB2YWx1ZSk7Ci0gICAgaWYgKHZhci5zZXQpCi0gICAgICAgIHZhci5zZXQtPnRvdWNo
KFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOworICAgIGFkZEds
b2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUpOwogfQogCiBzdGF0aWMgaW5saW5lIEpT
T2JqZWN0KiBsYXN0SW5Qcm90b3R5cGVDaGFpbihKU09iamVjdCogb2JqZWN0KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAxODM5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsMTEgKzMzOCw3IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgc2V0R2xvYmFsVGhpcyh2bSwgdGhpc1ZhbHVlKTsKICAgICB9CiAKLSAgICBzdHJ1Y3QgTmV3
R2xvYmFsVmFyIHsKLSAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0OwotICAgICAgICBXYXRjaHBv
aW50U2V0KiBzZXQ7Ci0gICAgfTsKLSAgICBOZXdHbG9iYWxWYXIgYWRkR2xvYmFsVmFyKGNvbnN0
IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUpOworICAgIHZvaWQgYWRkR2xvYmFsVmFyKGNvbnN0
IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUpOwogCiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CkBAIC0zNzQsNyArMzcwLDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAoIWhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICBh
ZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc0NvbnN0YW50KTsKICAgICB9Ci0gICAgdm9pZCBh
ZGRGdW5jdGlvbihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSk7CisgICAg
dm9pZCBhZGRGdW5jdGlvbihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAKICAgICAv
LyBUaGUgZm9sbG93aW5nIGFjY2Vzc29ycyByZXR1cm4gcHJpc3RpbmUgdmFsdWVzLCBldmVuIGlm
IGEgc2NyaXB0IAogICAgIC8vIHJlcGxhY2VzIHRoZSBnbG9iYWwgb2JqZWN0J3MgYXNzb2NpYXRl
ZCBwcm9wZXJ0eS4K
</data>

          </attachment>
      

    </bug>

</bugzilla>