<?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>91146</bug_id>
          
          <creation_ts>2012-07-12 14:01:50 -0700</creation_ts>
          <short_desc>IndexedDB: put() followed by createIndex() does not fire error event due to constraint violation</short_desc>
          <delta_ts>2012-08-14 08:46:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>91125</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>668186</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-12 14:01:50 -0700</bug_when>
    <thetext>IndexedDB: put() followed by createIndex() does not fire error event due to constraint violation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668205</commentid>
    <comment_count>1</comment_count>
      <attachid>152060</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-12 14:19:52 -0700</bug_when>
    <thetext>Created attachment 152060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668213</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-12 14:22:30 -0700</bug_when>
    <thetext>dgrogan@, alecflett@ - please take a look

The enum naming is lame. Maybe rename EarlyTask =&gt; SynchronousTask, NormalTask =&gt; AsynchronousTask ? (But that&apos;s a lie, as the former is still not really synchronous.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668302</commentid>
    <comment_count>3</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-12 15:23:03 -0700</bug_when>
    <thetext>while I think this is *a* solution, I&apos;m in the middle of rewriting this stuff in bug 91925 such that the end result happens in IDBObjectStore.cpp. 

This looks fine to me but I&apos;m a bit dreading the fact that I have additional tests to pass when I finish working, and we&apos;ll likely want to remove the &apos;Early&apos; stuff once that has landed (since it would have been the only consumer of it)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668304</commentid>
    <comment_count>4</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-12 15:24:07 -0700</bug_when>
    <thetext>I guess I&apos;m wondering, can we delay fixing this until bug 91125 lands? It may, just *may* be a lot more straightforward there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668336</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-12 15:45:38 -0700</bug_when>
    <thetext>I&apos;m okay with delaying. I don&apos;t think this is high priority, but once the fix occurred to me I had to implement it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668346</commentid>
    <comment_count>6</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-12 16:04:19 -0700</bug_when>
    <thetext>heh, at the very least we have some good test cases now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684565</commentid>
    <comment_count>7</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-08-01 14:07:25 -0700</bug_when>
    <thetext>ok, I&apos;ve finally got this test running with my createIndex() work, and the third case (verifyPutThenCreate()) is I think inline with the spec. 

In particular, the test checks if the put request results in an error callback, but I think all that is really supposed to happen is that the transaction should abort. 

A few choice bits from the spec:
&gt; If the referenced object store already contains data which violates these constraints, this must not cause the implementation of createIndex to throw an exception or affect what it returns. The implementation must still create and return an IDBIndex object. Instead the implementation must queue up an operation to abort the &quot;versionchange&quot; transaction which was used for the createIndex call.

And: 
&gt; In some implementations it&apos;s possible for the implementation to asynchronously run into problems creating the index after the createIndex function has returned. For example in implementations where metadata about the newly created index is queued up to be inserted into the database asynchronously, or where the implementation might need to ask the user for permission for quota reasons. Such implementations must still create and return an IDBIndex object. Instead, once the implementation realizes that creating the index has failed, it must abort the transaction using the steps for aborting a transaction using the appropriate error as error parameter. For example if creating the index failed due to quota reasons, QuotaError must be used as error and if the index can&apos;t be created due to unique constraints, ConstraintError must be used as error.

When I look at &quot;steps for aborting a transaction&quot; I see that only outstanding requests should fire an error but as I understand it, the 2nd put() is no longer outstanding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684614</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-01 14:55:43 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; ok, I&apos;ve finally got this test running with my createIndex() work, and the third case (verifyPutThenCreate()) is I think inline with the spec. 
&gt; 
&gt; In particular, the test checks if the put request results in an error callback, but I think all that is really supposed to happen is that the transaction should abort. 
...
&gt; When I look at &quot;steps for aborting a transaction&quot; I see that only outstanding requests should fire an error but as I understand it, the 2nd put() is no longer outstanding

In that test, the abort SHOULD have nothing to do with the creation of the index. It should behave the same as verifyPreExistingIndex().

In script, the call order is:
1. store.put(1)
2. store.put(2)
3. store.createIndex()

But in terms of when the actual requests are processed, it should be:
1. store.createIndex() // synchronous operation
2. store.put(1) // async request processed
3. store.put(2) // async request processed

And here&apos;s what should happen (and works with either the original patch, or in Firefox):

1. The index creation occurs before either of the requests are processed.
2. The first request is then processed, and the store and index are updated.
3. The second request is then processed, and the store fails due to the index constraint violation. This causes the error to be fired at the request itself - not because of the abort, but because of the constraint violation. If preventDefault() was called on the error the transaction would not abort (and we should add a test for that!), but it isn&apos;t, so that constraint error causes the transaction to abort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684674</commentid>
    <comment_count>9</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-08-01 15:47:08 -0700</bug_when>
    <thetext>The thing is, the createIndex() itself to create the sort of stub-index is synchronous, but as the spec says, the population can happen asynchronously, so what I see is:

1. store.createIndex() // synchronous operation
2. store.put(1) // async request processed
3. store.put(2) // async request processed
4. createIndex population // async request processed, transaction aborted

I guess I&apos;m reading the spec that index population *can* happen asynchronously, and the only requirement is that the transaction aborts. I think it&apos;s better to populate the index asynchronously so that we don&apos;t have to lock up the renderer. (because to do that we&apos;d have to hold the renderer thread hostage while we wait for indexing to finish) The only way to do this asynchronously but cleanly in our implementation is to run things in the order above. (believe me I tried to do it otherwise!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684691</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-01 15:55:34 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; The thing is, the createIndex() itself to create the sort of stub-index is synchronous, but as the spec says, the population can happen asynchronously, so what I see is:
&gt; 
&gt; 1. store.createIndex() // synchronous operation
&gt; 2. store.put(1) // async request processed
&gt; 3. store.put(2) // async request processed
&gt; 4. createIndex population // async request processed, transaction aborted
&gt; 
&gt; I guess I&apos;m reading the spec that index population *can* happen asynchronously, and the only requirement is that the transaction aborts. I think it&apos;s better to populate the index asynchronously so that we don&apos;t have to lock up the renderer. (because to do that we&apos;d have to hold the renderer thread hostage while we wait for indexing to finish) The only way to do this asynchronously but cleanly in our implementation is to run things in the order above. (believe me I tried to do it otherwise!)

I agree the index population can and should be async. Why not simply process the puts after the index population? That&apos;s how the patch attached to this bug did it - a secondary queue is introduced; index population requests go on the &quot;hi priority&quot; queue, others go on the &quot;low priority&quot; queue.

The renderer can&apos;t be held hostage, but it&apos;s not responsible for processing the async requests. So far as I can tell, the big problem is what we&apos;ve known about since the &quot;pre-compute the index keys&quot; refactor began: the pre-computed keys may be rendered invalid by index changes, and the browser may need to call back in to the renderer to compute them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684752</commentid>
    <comment_count>11</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-08-01 16:31:05 -0700</bug_when>
    <thetext>(sorry I put more explanation in bug 91125 - I have been basically trying to make the early/normal task queue stuff work for the last week...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695014</commentid>
    <comment_count>12</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-14 08:46:19 -0700</bug_when>
    <thetext>Alec followed up with the standards list, and this interpretation of the spec was rejected. (Which is good - simplifies the implementation!).

bug 91125 covers the the appropriate cases with a derivative of the tests here, so resolving this issue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152060</attachid>
            <date>2012-07-12 14:19:52 -0700</date>
            <delta_ts>2012-07-30 16:26:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91146-20120712141952.patch</filename>
            <type>text/plain</type>
            <size>24341</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYzOTdkYzU0OWVkNTEx
NzUyNjc3ZWY5ZWVkYTUyOWZiNDRkNTc4MS4uODhiMTcxMjgyZDIwN2Y4ODU5MGNlMzM5OGViNzBj
Y2VlMGYyZTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTA3LTEyICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBwdXQo
KSBmb2xsb3dlZCBieSBjcmVhdGVJbmRleCgpIGRvZXMgbm90IGZpcmUgZXJyb3IgZXZlbnQgZHVl
IHRvIGNvbnN0cmFpbnQgdmlvbGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTE0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFBlciB0aGUgSURCIHNwZWMsIElEQk9iamVjdFN0b3JlLmNyZWF0ZUlu
ZGV4KCkgbXVzdCBiZWhhdmUgYXMgaWYgcGVyZm9ybWVkIHN5bmNocm9ub3VzbHkuIFNvCisgICAg
ICAgIGEgcHV0KCkgcmVxdWVzdCAod2hpY2ggc2NoZWR1bGVzIGFuIGFzeW5jIHRhc2spIGZvbGxv
d2VkIGJ5IGEgY3JlYXRlSW5kZXgoKSAod2hpY2ggaW1wb3NlcyBhIAorICAgICAgICBjb25zdHJh
aW50KSBzaG91bGQgcmVjZWl2ZSBhbiBlcnJvciBldmVudCB3aGVuIHRoZSByZXF1ZXN0IGlzIHBy
b2Nlc3NlZC4gVG8gYXZvaWQgYmxvY2tpbmcsCisgICAgICAgIHRoZSBwb3B1bGF0aW9uIG9mIHRo
ZSBuZXcgaW5kZXggaXMgZG9uZSBhc3luY2hyb25vdXNseSwgYnV0IHRoaXMgbGV0cyB0aGUgcHV0
KCkgY29tcGxldGUKKyAgICAgICAgYmVmb3JlIHRoZSBpbmRleCBpcyBwcmVzZW50IHRvIHBlcmZv
cm0gdGhlIGNvbnN0cmFpbnQgY2hlY2ssIHNvIGl0IGRvZXMgbm90IGZhaWwuIFRoaXMgcGF0Y2gg
CisgICAgICAgIGludHJvZHVjZXMgYW4gImVhcmx5IiB0YXNrIHF1ZXVlIHdoaWNoICJhcyBpZiBz
eW5jaHJvbm91cyIgdGFza3MgY2FuIGJlIHNjaGVkdWxlZCBhZ2FpbnN0LCAKKyAgICAgICAgYW5k
IHdpbGwgcnVuIHByaW9yIHRvIGFueSBub3JtYWwgYXN5bmMgcmVxdWVzdHMgd2hpY2ggaGF2ZSBh
bHJlYWR5IGJlZW4gZmlsZWQgYnV0IG5vdCBwcm9jZXNzZWQuCisKKyAgICAgICAgVGVzdDogc3Rv
cmFnZS9pbmRleGVkZGIvbGF6eS1pbmRleC1wb3B1bGF0aW9uLmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOiBQdXQgdGhl
IHRhc2sgb24gdGhlICJlYXJseSIgcXVldWUuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleCk6IFB1dCB0aGUgdGFzayBvbiB0aGUgImVh
cmx5IiBxdWV1ZS4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OnNjaGVkdWxlVGFzayk6IEFzc2lnbiB0YXNrIHRvIGFwcHJvcHJpYXRlIHF1ZXVlLgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KTogT25seSBj
b21taXQgaWYgYm90aCBxdWV1ZXMgZW1wdHkuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjppc1Rhc2tRdWV1ZUVtcHR5KTogSGVscGVyIC0gY2hlY2tzIG5vcm1h
bCBhbmQgZWFybHkgcXVldWVzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCk6IFByb2Nlc3MgdGFz
a3MgZnJvbSBib3RoIHF1ZXVlcy4KKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQpOiBPbmx5IGNvbW1pdCBpZiBib3RoIHF1ZXVl
cyBlbXB0eS4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmg6IFNpZ25hdHVyZSB1cGRhdGUuCisgICAgICAgIChJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UuaDogSW50cm9kdWNlIG5ldyBUYXNrVHlwZSBlbnVtLgorCiAyMDEyLTA3LTEy
ICBYaW5nbmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgogCiAgICAgICAgIFtJbmRl
eGVkREJdIHVwcGVyT3BlbiBzZXQgdG8gdHJ1ZSBpbiBsb3dlckJvdW5kKCkvbG93ZXJPcGVuIHNl
dCB0byB0cnVlIGluIHVwcGVyQm91bmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBl
NzNlYzk1NGJjMTljNWVhNDUwNjJkZGJjNWRkNTQ5MDY0Y2Q4ZTQwLi5mMWIzNTE0ZDVmODg4MGM5
ODJmOTlhMGQ5OWM3MDgyYTcwMzMxZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3IEBACisyMDEyLTA3LTEyICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBwdXQoKSBmb2xsb3dlZCBieSBjcmVhdGVJbmRleCgp
IGRvZXMgbm90IGZpcmUgZXJyb3IgZXZlbnQgZHVlIHRvIGNvbnN0cmFpbnQgdmlvbGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTE0NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBtZXRo
b2Qgc2lnbmF0dXJlcyBvZiBzdHViIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogc3JjL0lE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHk6OnNjaGVkdWxlVGFzayk6CisgICAgICAgICogc3JjL0lEQlRyYW5z
YWN0aW9uQmFja2VuZFByb3h5Lmg6CisgICAgICAgIChJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94
eSk6CisKIDIwMTItMDctMTEgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAg
ICA8aHR0cDovL3dlYmtpdC5vcmcvYi85MTAxNT4gUmVtb3ZlIEJVSUxESU5HX09OIC8gVEFSR0VU
SU5HIG1hY3JvcyBpbiBmYXZvciBvZiBzeXN0ZW0gYXZhaWxhYmlsaXR5IG1hY3JvcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCA1MDViYTc1N2JlNDhmYzFhZmNhNDVjNTk2NmZmYmZhMDA0ZDQ3
NWU4Li5jMGFjYmY4Zjk4ZjA0NzU0ODhmNzRkNjZjZDlkOTU4YzVhOTcwMzkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcApAQCAtMTUzLDcgKzE1Myw4IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RT
CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKICAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRy
YW5zYWN0aW9uUHRyOwogICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVD
YWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50
ZXJuYWwsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3Jl
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUZyb21NYXAsIGRh
dGFiYXNlLCBvYmplY3RTdG9yZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6RWFybHlUYXNrKSkgewogICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggNDc0
Y2RlYjViNWEyYzg4NDFhMWZjYWRmOThmZjYyMzIyZmRmMDRkYy4uMjgwYzFiNDExY2ViOTBlNzY2
MzQ1NjkwNjYyMDQ1ODQ4NTk0NjIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAg
LTQyNiwxMCArNDI2LDkgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnMKICAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uUHRyID0gdHJhbnNhY3Rp
b247CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgICBj
cmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4
SW50ZXJuYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwg
aW5kZXgsIHRyYW5zYWN0aW9uUHRyKSwKLSAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEZyb21NYXAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgaW5kZXgpKSkgeworICAgICAg
ICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNy
ZWF0ZUluZGV4SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAor
ICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnJlbW92ZUluZGV4RnJvbU1hcCwgb2JqZWN0U3RvcmUsIGluZGV4KSwKKyAgICAgICAgICAg
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpFYXJseVRhc2spKSB7CiAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCA5
NGQzMGRjOTM2OTllYjkxMzZmNmFiZDcxYmIwNjczZWJiYWJiZGZjLi43YzUzZTdkN2ZjYjg4ZTk3
YTAwYWY5OTFkNWZlZTA0ZDY0YWM1MzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApA
QCAtODgsMTIgKzg4LDE2IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yCiAgICAgcmV0dXJuIG9i
amVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KIAotYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0
YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFib3J0VGFzaykK
K2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2ssIFRhc2tUeXBlIHRhc2tUeXBlKQogewogICAg
IGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBt
X3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisgICAgaWYgKHRhc2tUeXBlID09IEVhcmx5VGFzaykK
KyAgICAgICAgbV9lYXJseVRhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisgICAgZWxzZQorICAgICAg
ICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisKICAgICBpZiAoYWJvcnRUYXNrKQogICAgICAg
ICBtX2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNrKTsKIApAQCAtMjAyLDcgKzIwNiw3
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKICAgICAvLyBhbGl2
ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHNlbGYodGhpcyk7CiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkIHx8
IG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgQVNTRVJUKG1fdGFza1F1ZXVlLmlzRW1wdHkoKSk7
CisgICAgQVNTRVJUKGlzVGFza1F1ZXVlRW1wdHkoKSk7CiAKICAgICBib29sIHVudXNlZCA9IG1f
c3RhdGUgPT0gVW51c2VkOwogICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKQEAgLTIyOSwxMCArMjMz
LDE1IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKICAgICBtX2Rh
dGFiYXNlID0gMDsKIH0KIAorYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjppc1Rhc2tR
dWV1ZUVtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lYXJseVRhc2tRdWV1ZS5pc0VtcHR5
KCkgJiYgbV90YXNrUXVldWUuaXNFbXB0eSgpOworfQorCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
KikKIHsKICAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1l
ckZpcmVkIik7Ci0gICAgQVNTRVJUKCFtX3Rhc2tRdWV1ZS5pc0VtcHR5KCkpOworICAgIEFTU0VS
VCghaXNUYXNrUXVldWVFbXB0eSgpKTsKIAogICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGlu
ZykgewogICAgICAgICBtX3RyYW5zYWN0aW9uLT5iZWdpbigpOwpAQCAtMjQwLDYgKzI0OSwxNCBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KgogICAgIH0KIAogICAgIFRhc2tRdWV1ZSBxdWV1ZTsK
KyAgICBxdWV1ZS5zd2FwKG1fZWFybHlUYXNrUXVldWUpOworICAgIHdoaWxlICghcXVldWUuaXNF
bXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUg
PT0gUnVubmluZyk7CisgICAgICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiB0YXNrKHF1ZXVlLmZpcnN0KCkucmVsZWFzZSgpKTsKKyAgICAgICAgcXVldWUucmVtb3ZlRmly
c3QoKTsKKyAgICAgICAgbV9wZW5kaW5nRXZlbnRzKys7CisgICAgICAgIHRhc2stPnBlcmZvcm1U
YXNrKDApOworICAgIH0KICAgICBxdWV1ZS5zd2FwKG1fdGFza1F1ZXVlKTsKICAgICB3aGlsZSAo
IXF1ZXVlLmlzRW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7CiAgICAgICAgIEFTU0VS
VChtX3N0YXRlID09IFJ1bm5pbmcpOwpAQCAtMjU1LDcgKzI3Miw3IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6dGFza0V2ZW50VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJCiAgICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNr
RXZlbnRUaW1lckZpcmVkIik7CiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7CiAKLSAg
ICBpZiAoIW1fcGVuZGluZ0V2ZW50cyAmJiBtX3Rhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICBp
ZiAoIW1fcGVuZGluZ0V2ZW50cyAmJiBpc1Rhc2tRdWV1ZUVtcHR5KCkpIHsKICAgICAgICAgLy8g
VGhlIGxhc3QgdGFzayBldmVudCBoYXMgY29tcGxldGVkIGFuZCB0aGUgdGFzawogICAgICAgICAv
LyBxdWV1ZSBpcyBlbXB0eS4gQ29tbWl0IHRoZSB0cmFuc2FjdGlvbi4KICAgICAgICAgY29tbWl0
KCk7CkBAIC0yNjUsNyArMjgyLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0
YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEkKICAgICAvLyBX
ZSBhcmUgc3RpbGwgd2FpdGluZyBmb3Igb3RoZXIgZXZlbnRzIHRvIGNvbXBsZXRlLiBIb3dldmVy
LAogICAgIC8vIHRoZSB0YXNrIHF1ZXVlIGlzIG5vbi1lbXB0eSBhbmQgdGhlIHRpbWVyIGlzIGlu
YWN0aXZlLgogICAgIC8vIFdlIGNhbiB0aGVyZm9yZSBzY2hlZHVsZSB0aGUgdGltZXIgYWdhaW4u
Ci0gICAgaWYgKCFtX3Rhc2tRdWV1ZS5pc0VtcHR5KCkgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZl
KCkpCisgICAgaWYgKCFpc1Rhc2tRdWV1ZUVtcHR5KCkgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5oCmluZGV4IDRlYTNiZmQ0MzcxM2FkZDQ5YTgxNzc3MTQ0ZDE2MjVjZDE2ZDFl
ZmQuLjAxODUyYzA3MWYwMDRhNWNlOWE1NzUwOTAwODZjZWMxNWM3ZWQyNzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBz
aG9ydCBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Ci0gICAgdmlydHVhbCBib29sIHNj
aGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ss
IFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4sIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJv
cnRUYXNrLCBUYXNrVHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50
cygpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxs
YmFja3MoSURCVHJhbnNhY3Rpb25DYWxsYmFja3MqIGNhbGxiYWNrcykgeyBtX2NhbGxiYWNrcyA9
IGNhbGxiYWNrczsgfQpAQCAtNzEsNiArNzEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RhcnQo
KTsKICAgICB2b2lkIGNvbW1pdCgpOwogCisgICAgYm9vbCBpc1Rhc2tRdWV1ZUVtcHR5KCkgY29u
c3Q7CisKICAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+Kik7CiAgICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+Kik7CiAgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CkBAIC04NSw2
ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gPiBUYXNrUXVldWU7CiAgICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVl
OwogICAgIFRhc2tRdWV1ZSBtX2Fib3J0VGFza1F1ZXVlOworICAgIFRhc2tRdWV1ZSBtX2Vhcmx5
VGFza1F1ZXVlOwogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IG1f
dHJhbnNhY3Rpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggZDhm
NDhhYjUwODU3MTJlZTA4ZTRmYzNkOTU0OTI5YzBmM2E3ZmJmYi4uODVhY2Y4MWE1NTQwNzVlNzk3
MzZjNmYwMjI4MWEzMTZmYjFmYTY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
LmgKQEAgLTQ5LDkgKzQ5LDE0IEBAIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvCiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkgeyB9CiAKKyAgICBl
bnVtIFRhc2tUeXBlIHsKKyAgICAgICAgTm9ybWFsVGFzayA9IDAsCisgICAgICAgIEVhcmx5VGFz
aworICAgIH07CisKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBtb2RlKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IGFib3J0VGFzayA9IG51bGxwdHIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNr
KFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIFBhc3NPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrID0gbnVsbHB0ciwgVGFza1R5cGUg
PSBOb3JtYWxUYXNrKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50
cygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBhYm9ydCgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcAppbmRleCAzYTIxYTc4MWIwNTY1YjExZDQ3
NTNlMzcyNzI5NzE2OTlhOTlhODA1Li45MTFjYTU5OWQ3MTczOTI4OGVkZWQ0YjFmNzBkYzM0ZWFl
YTQ2NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
VHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kUHJveHk6OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKFdlYkNvcmU6OklEQkN1
cnNvckJhY2tlbmRJCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgSURCVHJh
bnNhY3Rpb25CYWNrZW5kUHJveHk6OnNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+LCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+KQorYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6c2NoZWR1bGVUYXNrKFBhc3NP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIFBhc3NPd25QdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4sIFRhc2tUeXBlIHRhc2tUeXBlKQogewogICAgIC8vIFRoaXMg
c2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQgYXMgaXQncyB0aGUgaW1wbCBvYmplY3RzIHdobyBnZXQg
dG8KICAgICAvLyBleGVjdXRlIHRhc2tzIGluIHRoZSBicm93c2VyIHByb2Nlc3MuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94
eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJv
eHkuaAppbmRleCA1ODkxOGY2OGNmM2Q0ODgwNmRjNTM1YTUyMzQxZmY3NmJmZWY5MTZkLi5lZWEx
MzdlNDkwM2U1NTBkZDE1NDk3Y2Y0YmI5ZGRjZTc3ZmUzNmI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmgKQEAg
LTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCk7
CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7Ci0gICAgdmlydHVhbCBib29sIHNjaGVkdWxlVGFz
ayhQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBQYXNz
T3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4sIFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4sIFRhc2tUeXBlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZl
bnRzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkNhbGxiYWNrcyopOwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoV2Vi
Q29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGwqKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlZGI1NGU2MjY4Zjk3NzczOWZh
ZmE3ZjhkNjg0MmRmNjNlOTEyYzIxLi4wZmY5OTMyOWU5MDdkMjM4OTViN2UzYzI4Njg0MThjOGFh
NGMyODdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDctMTIgIEpvc2h1YSBCZWxsICA8
anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IHB1dCgpIGZvbGxvd2Vk
IGJ5IGNyZWF0ZUluZGV4KCkgZG9lcyBub3QgZmlyZSBlcnJvciBldmVudCBkdWUgdG8gY29uc3Ry
YWludCB2aW9sYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkxMTQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9sYXp5LWluZGV4LXBvcHVsYXRpb24tZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9sYXp5LWluZGV4LXBvcHVs
YXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTItMDctMTIgIFNpbW9uIFBlbmEgIDxzcGVuYUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdIEdhcmRlbmluZzogcmViYXNlbGluZSBhZnRlciByMTIy
NDE0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9sYXp5LWluZGV4
LXBvcHVsYXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
bGF6eS1pbmRleC1wb3B1bGF0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODdkOThmZWQ2
YzA1Zjg4NzZjOTAyNzRlNGJmZWY2MGIyMWU1N2RmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbGF6eS1pbmRleC1wb3B1bGF0aW9uLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDc4IEBACitWZXJpZnkgZWRnZSBjYXNlcyB0aGF0IGxhenkgaW5kZXggcG9w
dWxhdGlvbiBpbiBhbiBJbmRleGVkREIgaW1wbGVtZW50YXRpb24gbWlnaHQgcmV2ZWFsLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaW5kZXhlZERCID0gc2VsZi5pbmRleGVkREIg
fHwgc2VsZi53ZWJraXRJbmRleGVkREIgfHwgc2VsZi5tb3pJbmRleGVkREIgfHwgc2VsZi5tc0lu
ZGV4ZWREQiB8fCBzZWxmLk9JbmRleGVkREI7CisKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgn
bGF6eS1pbmRleC1wb3B1bGF0aW9uJykKK2luZGV4ZWREQi5vcGVuKCdsYXp5LWluZGV4LXBvcHVs
YXRpb24nKQorY29ubmVjdGlvbiA9IHJlcXVlc3QucmVzdWx0CisKK1ZlcmlmeSB0aGF0IHVuaXF1
ZW5lc3MgY29uc3RyYWludHMgYXJlIGVuZm9yY2VkIHdpdGggYSBwcmUtZXhpc3RpbmcgaW5kZXg6
Citjb25uZWN0aW9uLnNldFZlcnNpb24oJzEnKQorc3RvcmUgPSBjb25uZWN0aW9uLmNyZWF0ZU9i
amVjdFN0b3JlKCdzdG9yZScpCitzdG9yZS5jcmVhdGVJbmRleCgnaW5kZXgnLCAnbmFtZScsIHt1
bmlxdWU6IHRydWV9KQordHJhbnMgPSBjb25uZWN0aW9uLnRyYW5zYWN0aW9uKCdzdG9yZScsICdy
ZWFkd3JpdGUnKQorc3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKQorcmVxdWVzdDEg
PSBzdG9yZS5wdXQoe25hbWU6ICdib2InfSwgMSkKK3JlcXVlc3QyID0gc3RvcmUucHV0KHtuYW1l
OiAnYm9iJ30sIDIpCitzdGF0ZSA9IDAKK3JlcXVlc3QxIHJlY2VpdmVkIHN1Y2Nlc3MgZXZlbnQK
K1BBU1MgKytzdGF0ZSBpcyAxCityZXF1ZXN0MiByZWNlaXZlZCBlcnJvciBldmVudAorUEFTUyAr
K3N0YXRlIGlzIDIKK3RyYW5zYWN0aW9uIGFib3J0ZWQKK1BBU1MgKytzdGF0ZSBpcyAzCisKK1Zl
cmlmeSB0aGF0IHVuaXF1ZW5lc3MgY29uc3RyYWludHMgYXJlIGVuZm9yY2VkIHdoZW4gaW5kZXgg
aXMgY3JlYXRlZCBiZWZvcmUgcHV0czoKK2Nvbm5lY3Rpb24uc2V0VmVyc2lvbignMicpCitkZWxl
dGVBbGxPYmplY3RTdG9yZXMoY29ubmVjdGlvbikKK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMu
CitzdG9yZSA9IGNvbm5lY3Rpb24uY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJykKK3N0b3JlLmNy
ZWF0ZUluZGV4KCdpbmRleCcsICduYW1lJywge3VuaXF1ZTogdHJ1ZX0pCityZXF1ZXN0MSA9IHN0
b3JlLnB1dCh7bmFtZTogJ2Nhcm9sJ30sIDEpCityZXF1ZXN0MiA9IHN0b3JlLnB1dCh7bmFtZTog
J2Nhcm9sJ30sIDIpCitzdGF0ZSA9IDAKK3JlcXVlc3QxIHJlY2VpdmVkIHN1Y2Nlc3MgZXZlbnQK
K1BBU1MgKytzdGF0ZSBpcyAxCityZXF1ZXN0MiByZWNlaXZlZCBlcnJvciBldmVudAorUEFTUyAr
K3N0YXRlIGlzIDIKK3RyYW5zYWN0aW9uIGFib3J0ZWQKK1BBU1MgKytzdGF0ZSBpcyAzCisKK1Zl
cmlmeSB0aGF0IHVuaXF1ZW5lc3MgY29uc3RyYWludHMgYXJlIGVuZm9yY2VkIHdoZW4gaW5kZXgg
aXMgY3JlYXRlZCBhZnRlciBwdXRzOgorY29ubmVjdGlvbi5zZXRWZXJzaW9uKCczJykKK2RlbGV0
ZUFsbE9iamVjdFN0b3Jlcyhjb25uZWN0aW9uKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4K
K3N0b3JlID0gY29ubmVjdGlvbi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKQorcmVxdWVzdDEg
PSBzdG9yZS5wdXQoe25hbWU6ICd0ZWQnfSwgMSkKK3JlcXVlc3QyID0gc3RvcmUucHV0KHtuYW1l
OiAndGVkJ30sIDIpCitzdG9yZS5jcmVhdGVJbmRleCgnaW5kZXgnLCAnbmFtZScsIHt1bmlxdWU6
IHRydWV9KQorc3RhdGUgPSAwCityZXF1ZXN0MSByZWNlaXZlZCBzdWNjZXNzIGV2ZW50CitQQVNT
ICsrc3RhdGUgaXMgMQorcmVxdWVzdDIgcmVjZWl2ZWQgZXJyb3IgZXZlbnQKK1BBU1MgKytzdGF0
ZSBpcyAyCit0cmFuc2FjdGlvbiBhYm9ydGVkCitQQVNTICsrc3RhdGUgaXMgMworCitWZXJpZnkg
dGhhdCB1bmlxdWVuZXNzIGNvbnN0cmFpbnRzIGFyZSBlbmZvcmNlZCB3aGVuIGluZGV4IGlzIGNy
ZWF0ZWQgYmV0d2VlbiBwdXRzOgorY29ubmVjdGlvbi5zZXRWZXJzaW9uKCc0JykKK2RlbGV0ZUFs
bE9iamVjdFN0b3Jlcyhjb25uZWN0aW9uKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK3N0
b3JlID0gY29ubmVjdGlvbi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKQorcmVxdWVzdDEgPSBz
dG9yZS5wdXQoe25hbWU6ICdhbGljZSd9LCAxKQorc3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4Jywg
J25hbWUnLCB7dW5pcXVlOiB0cnVlfSkKK3JlcXVlc3QyID0gc3RvcmUucHV0KHtuYW1lOiAnYWxp
Y2UnfSwgMikKK3N0YXRlID0gMAorcmVxdWVzdDEgcmVjZWl2ZWQgc3VjY2VzcyBldmVudAorUEFT
UyArK3N0YXRlIGlzIDEKK3JlcXVlc3QyIHJlY2VpdmVkIGVycm9yIGV2ZW50CitQQVNTICsrc3Rh
dGUgaXMgMgordHJhbnNhY3Rpb24gYWJvcnRlZAorUEFTUyArK3N0YXRlIGlzIDMKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9sYXp5LWluZGV4LXBvcHVsYXRpb24uaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2xhenktaW5kZXgtcG9wdWxhdGlvbi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU1ZTFlNGU3ODlkZTVlYmRkMTM1OGRkMDcwMTUyOGJmZTBhNzNmZjgKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9sYXp5LWluZGV4
LXBvcHVsYXRpb24uaHRtbApAQCAtMCwwICsxLDE5MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
K3NldFRpbWVvdXQoZmluaXNoSlNUZXN0LCA0MDAwKTsKK2Rlc2NyaXB0aW9uKCJWZXJpZnkgZWRn
ZSBjYXNlcyB0aGF0IGxhenkgaW5kZXggcG9wdWxhdGlvbiBpbiBhbiBJbmRleGVkREIgaW1wbGVt
ZW50YXRpb24gbWlnaHQgcmV2ZWFsLiIpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICByZW1v
dmVWZW5kb3JQcmVmaXhlcygpOworICAgIHByZXBhcmVEYXRhYmFzZSgpOworfQorCitmdW5jdGlv
biBwcmVwYXJlRGF0YWJhc2UoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVk
REIuZGVsZXRlRGF0YWJhc2UoJ2xhenktaW5kZXgtcG9wdWxhdGlvbicpIik7CisgICAgcmVxdWVz
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVk
REIub3BlbignbGF6eS1pbmRleC1wb3B1bGF0aW9uJykiKTsKKyAgICAgICAgcmVxdWVzdC5vbmVy
cm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcXVlc3Qub25zdWNjZXNz
ID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgZXZhbEFuZExvZygiY29ubmVjdGlvbiA9IHJl
cXVlc3QucmVzdWx0Iik7CisgICAgICAgICAgICB2ZXJpZnlQcmVFeGlzdGluZ0luZGV4KCk7Cisg
ICAgICAgIH07CisgICAgfTsKK30KKworZnVuY3Rpb24gdmVyaWZ5UHJlRXhpc3RpbmdJbmRleCgp
Cit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJWZXJpZnkgdGhhdCB1bmlxdWVuZXNzIGNv
bnN0cmFpbnRzIGFyZSBlbmZvcmNlZCB3aXRoIGEgcHJlLWV4aXN0aW5nIGluZGV4OiIpOworCisg
ICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImNvbm5lY3Rpb24uc2V0VmVyc2lvbignMScpIik7Cisg
ICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxdWVz
dC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdHJhbnMgPSByZXF1ZXN0LnJlc3Vs
dDsKKyAgICAgICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAg
ICAgICBldmFsQW5kTG9nKCJzdG9yZSA9IGNvbm5lY3Rpb24uY3JlYXRlT2JqZWN0U3RvcmUoJ3N0
b3JlJykiKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4Jywg
J25hbWUnLCB7dW5pcXVlOiB0cnVlfSkiKTsKKworICAgICAgICB0cmFucy5vbmNvbXBsZXRlID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBldmFsQW5kTG9nKCJ0cmFucyA9IGNvbm5lY3Rpb24u
dHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpIik7CisgICAgICAgICAgICBldmFsQW5k
TG9nKCJzdG9yZSA9IHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpIik7CisgICAgICAgICAgICBl
dmFsQW5kTG9nKCJyZXF1ZXN0MSA9IHN0b3JlLnB1dCh7bmFtZTogJ2JvYid9LCAxKSIpOworICAg
ICAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdDIgPSBzdG9yZS5wdXQoe25hbWU6ICdib2InfSwg
MikiKTsKKyAgICAgICAgICAgIGV2YWxBbmRMb2coInN0YXRlID0gMCIpOworCisgICAgICAgICAg
ICByZXF1ZXN0MS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgICAg
ICByZXF1ZXN0MS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgZGVi
dWcoInJlcXVlc3QxIHJlY2VpdmVkIHN1Y2Nlc3MgZXZlbnQiKTsKKyAgICAgICAgICAgICAgICBz
aG91bGRCZSgiKytzdGF0ZSIsICIxIik7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBy
ZXF1ZXN0Mi5vbnN1Y2Nlc3MgPSB1bmV4cGVjdGVkU3VjY2Vzc0NhbGxiYWNrOworICAgICAgICAg
ICAgcmVxdWVzdDIub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBkZWJ1
ZygicmVxdWVzdDIgcmVjZWl2ZWQgZXJyb3IgZXZlbnQiKTsKKyAgICAgICAgICAgICAgICBzaG91
bGRCZSgiKytzdGF0ZSIsICIyIik7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB0cmFu
cy5vbmNvbXBsZXRlID0gdW5leHBlY3RlZENvbXBsZXRlQ2FsbGJhY2s7CisgICAgICAgICAgICB0
cmFucy5vbmFib3J0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGRlYnVnKCJ0cmFu
c2FjdGlvbiBhYm9ydGVkIik7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoIisrc3RhdGUiLCAi
MyIpOworICAgICAgICAgICAgICAgIHZlcmlmeUNyZWF0ZVRoZW5QdXQoKTsKKyAgICAgICAgICAg
IH07CisgICAgICAgIH07CisgICAgfTsKK30KKworZnVuY3Rpb24gdmVyaWZ5Q3JlYXRlVGhlblB1
dCgpCit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJWZXJpZnkgdGhhdCB1bmlxdWVuZXNz
IGNvbnN0cmFpbnRzIGFyZSBlbmZvcmNlZCB3aGVuIGluZGV4IGlzIGNyZWF0ZWQgYmVmb3JlIHB1
dHM6Iik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiY29ubmVjdGlvbi5zZXRWZXJzaW9u
KCcyJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
KyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0cmFucyA9IHJl
cXVlc3QucmVzdWx0OworCisgICAgICAgIGV2YWxBbmRMb2coImRlbGV0ZUFsbE9iamVjdFN0b3Jl
cyhjb25uZWN0aW9uKSIpOworCisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlID0gY29ubmVjdGlv
bi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKSIpOworICAgICAgICBldmFsQW5kTG9nKCJzdG9y
ZS5jcmVhdGVJbmRleCgnaW5kZXgnLCAnbmFtZScsIHt1bmlxdWU6IHRydWV9KSIpOworICAgICAg
ICBldmFsQW5kTG9nKCJyZXF1ZXN0MSA9IHN0b3JlLnB1dCh7bmFtZTogJ2Nhcm9sJ30sIDEpIik7
CisgICAgICAgIGV2YWxBbmRMb2coInJlcXVlc3QyID0gc3RvcmUucHV0KHtuYW1lOiAnY2Fyb2wn
fSwgMikiKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RhdGUgPSAwIik7CisKKyAgICAgICAgcmVx
dWVzdDEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXF1ZXN0
MS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBkZWJ1ZygicmVxdWVzdDEg
cmVjZWl2ZWQgc3VjY2VzcyBldmVudCIpOworICAgICAgICAgICAgc2hvdWxkQmUoIisrc3RhdGUi
LCAiMSIpOworICAgICAgICB9OworCisgICAgICAgIHJlcXVlc3QyLm9uc3VjY2VzcyA9IHVuZXhw
ZWN0ZWRTdWNjZXNzQ2FsbGJhY2s7CisgICAgICAgIHJlcXVlc3QyLm9uZXJyb3IgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBkZWJ1ZygicmVxdWVzdDIgcmVjZWl2ZWQgZXJyb3IgZXZlbnQi
KTsKKyAgICAgICAgICAgIHNob3VsZEJlKCIrK3N0YXRlIiwgIjIiKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICB0cmFucy5vbmNvbXBsZXRlID0gdW5leHBlY3RlZENvbXBsZXRlQ2FsbGJhY2s7Cisg
ICAgICAgIHRyYW5zLm9uYWJvcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBkZWJ1Zygi
dHJhbnNhY3Rpb24gYWJvcnRlZCIpOworICAgICAgICAgICAgc2hvdWxkQmUoIisrc3RhdGUiLCAi
MyIpOworICAgICAgICAgICAgdmVyaWZ5UHV0VGhlbkNyZWF0ZSgpOworICAgICAgICB9OworICAg
IH07Cit9CisKK2Z1bmN0aW9uIHZlcmlmeVB1dFRoZW5DcmVhdGUoKQoreworICAgIGRlYnVnKCIi
KTsKKyAgICBkZWJ1ZygiVmVyaWZ5IHRoYXQgdW5pcXVlbmVzcyBjb25zdHJhaW50cyBhcmUgZW5m
b3JjZWQgd2hlbiBpbmRleCBpcyBjcmVhdGVkIGFmdGVyIHB1dHM6Iik7CisKKyAgICByZXF1ZXN0
ID0gZXZhbEFuZExvZygiY29ubmVjdGlvbi5zZXRWZXJzaW9uKCczJykiKTsKKyAgICByZXF1ZXN0
Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0cmFucyA9IHJlcXVlc3QucmVzdWx0OworCisgICAg
ICAgIGV2YWxBbmRMb2coImRlbGV0ZUFsbE9iamVjdFN0b3Jlcyhjb25uZWN0aW9uKSIpOworCisg
ICAgICAgIGV2YWxBbmRMb2coInN0b3JlID0gY29ubmVjdGlvbi5jcmVhdGVPYmplY3RTdG9yZSgn
c3RvcmUnKSIpOworICAgICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0MSA9IHN0b3JlLnB1dCh7bmFt
ZTogJ3RlZCd9LCAxKSIpOworICAgICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0MiA9IHN0b3JlLnB1
dCh7bmFtZTogJ3RlZCd9LCAyKSIpOworICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5jcmVhdGVJ
bmRleCgnaW5kZXgnLCAnbmFtZScsIHt1bmlxdWU6IHRydWV9KSIpOworICAgICAgICBldmFsQW5k
TG9nKCJzdGF0ZSA9IDAiKTsKKworICAgICAgICByZXF1ZXN0MS5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcXVlc3QxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIGRlYnVnKCJyZXF1ZXN0MSByZWNlaXZlZCBzdWNjZXNzIGV2ZW50Iik7
CisgICAgICAgICAgICBzaG91bGRCZSgiKytzdGF0ZSIsICIxIik7CisgICAgICAgIH07CisKKyAg
ICAgICAgcmVxdWVzdDIub25zdWNjZXNzID0gdW5leHBlY3RlZFN1Y2Nlc3NDYWxsYmFjazsKKyAg
ICAgICAgcmVxdWVzdDIub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGRlYnVn
KCJyZXF1ZXN0MiByZWNlaXZlZCBlcnJvciBldmVudCIpOworICAgICAgICAgICAgc2hvdWxkQmUo
Iisrc3RhdGUiLCAiMiIpOworICAgICAgICB9OworCisgICAgICAgIHRyYW5zLm9uY29tcGxldGUg
PSB1bmV4cGVjdGVkQ29tcGxldGVDYWxsYmFjazsKKyAgICAgICAgdHJhbnMub25hYm9ydCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGRlYnVnKCJ0cmFuc2FjdGlvbiBhYm9ydGVkIik7Cisg
ICAgICAgICAgICBzaG91bGRCZSgiKytzdGF0ZSIsICIzIik7CisgICAgICAgICAgICB2ZXJpZnlQ
dXRUaGVuQ3JlYXRlVGhlblB1dCgpOworICAgICAgICB9OworICAgIH07Cit9CisKK2Z1bmN0aW9u
IHZlcmlmeVB1dFRoZW5DcmVhdGVUaGVuUHV0KCkKK3sKKyAgICBkZWJ1ZygiIik7CisgICAgZGVi
dWcoIlZlcmlmeSB0aGF0IHVuaXF1ZW5lc3MgY29uc3RyYWludHMgYXJlIGVuZm9yY2VkIHdoZW4g
aW5kZXggaXMgY3JlYXRlZCBiZXR3ZWVuIHB1dHM6Iik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFu
ZExvZygiY29ubmVjdGlvbi5zZXRWZXJzaW9uKCc0JykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0cmFucyA9IHJlcXVlc3QucmVzdWx0OworCisgICAgICAgIGV2YWxB
bmRMb2coImRlbGV0ZUFsbE9iamVjdFN0b3Jlcyhjb25uZWN0aW9uKSIpOworCisgICAgICAgIGV2
YWxBbmRMb2coInN0b3JlID0gY29ubmVjdGlvbi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKSIp
OworICAgICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0MSA9IHN0b3JlLnB1dCh7bmFtZTogJ2FsaWNl
J30sIDEpIik7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcs
ICduYW1lJywge3VuaXF1ZTogdHJ1ZX0pIik7CisgICAgICAgIGV2YWxBbmRMb2coInJlcXVlc3Qy
ID0gc3RvcmUucHV0KHtuYW1lOiAnYWxpY2UnfSwgMikiKTsKKyAgICAgICAgZXZhbEFuZExvZygi
c3RhdGUgPSAwIik7CisKKyAgICAgICAgcmVxdWVzdDEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOworICAgICAgICByZXF1ZXN0MS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBkZWJ1ZygicmVxdWVzdDEgcmVjZWl2ZWQgc3VjY2VzcyBldmVudCIpOworICAg
ICAgICAgICAgc2hvdWxkQmUoIisrc3RhdGUiLCAiMSIpOworICAgICAgICB9OworCisgICAgICAg
IHJlcXVlc3QyLm9uc3VjY2VzcyA9IHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2s7CisgICAgICAg
IHJlcXVlc3QyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBkZWJ1ZygicmVx
dWVzdDIgcmVjZWl2ZWQgZXJyb3IgZXZlbnQiKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCIrK3N0
YXRlIiwgIjIiKTsKKyAgICAgICAgfTsKKworICAgICAgICB0cmFucy5vbmNvbXBsZXRlID0gdW5l
eHBlY3RlZENvbXBsZXRlQ2FsbGJhY2s7CisgICAgICAgIHRyYW5zLm9uYWJvcnQgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBkZWJ1ZygidHJhbnNhY3Rpb24gYWJvcnRlZCIpOworICAgICAg
ICAgICAgc2hvdWxkQmUoIisrc3RhdGUiLCAiMyIpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgICAgIH07CisgICAgfTsKK30KKwordGVzdCgpOworCis8L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>