<?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>95956</bug_id>
          
          <creation_ts>2012-09-06 02:34:20 -0700</creation_ts>
          <short_desc>[WK2][EFL] Add unit tests for Spelling</short_desc>
          <delta_ts>2012-10-17 05:06:55 -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>WebKit2</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>91854</dependson>
          <blocked>90451</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Grzegorz Czajkowski">g.czajkowski</reporter>
          <assigned_to name="Grzegorz Czajkowski">g.czajkowski</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>713073</commentid>
    <comment_count>0</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-06 02:34:20 -0700</bug_when>
    <thetext>This bug covers the tests for API from:
 - ewk_text_checker.h,
 - ewk_text_checker_setting.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726444</commentid>
    <comment_count>1</comment_count>
      <attachid>165326</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-24 01:12:39 -0700</bug_when>
    <thetext>Created attachment 165326
proposed patch

This patch covers API from ewk_text_checker_setting.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726446</commentid>
    <comment_count>2</comment_count>
      <attachid>165326</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-24 01:16:36 -0700</bug_when>
    <thetext>Comment on attachment 165326
proposed patch

Attachment 165326 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13986612</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726569</commentid>
    <comment_count>3</comment_count>
      <attachid>165326</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-09-24 05:16:52 -0700</bug_when>
    <thetext>Comment on attachment 165326
proposed patch

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

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:45
&gt; +static Eina_Bool settingEnabled = false;

bool

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:46
&gt; +static Ecore_Timer* timeout = 0;

timer? or timeoutTimer?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:47
&gt; +static double timeoutValue = 0.5;

Please indicate the time unit in the variable name. e.g. defaultTimeoutSeconds

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:86
&gt; +    ewk_text_checker_setting_enable_continuous_spell_checking_set(EINA_TRUE);

true

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:93
&gt; +    ecore_main_loop_begin();

We avoid using embedded main loops. We usually prefer checking a variable and calling ecore_main_loop_iterate() until the variable state changes.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:109
&gt; +    ewk_text_checker_setting_enable_continuous_spell_checking_set(EINA_FALSE);

false

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:120
&gt; +    ewk_text_checker_setting_enable_grammar_checking_set(EINA_TRUE);

true

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:127
&gt; +    ewk_text_checker_setting_enable_grammar_checking_set(EINA_FALSE);

false

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:136
&gt; +    ewk_text_checker_setting_continuous_spell_checking_changed_cb_set(

Why 3 lines for this?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:149
&gt; +    ecore_main_loop_begin();

main loop iterate.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:162
&gt; +    ecore_main_loop_begin();

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:174
&gt; +    ecore_main_loop_begin();

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:185
&gt; +    ewk_text_checker_setting_grammar_checking_changed_cb_set(

On 1 line?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:251
&gt; +            languages.appendLiteral(&quot;,&quot;);

append(&apos;,&apos;) is more efficient

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:279
&gt; +

Extra line here

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:316
&gt; +    const char* lastExpected = static_cast&lt;const char*&gt;(eina_list_nth(availableLanguages, numberOfAvailableLanguages - 1));

eina_list_last?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:322
&gt; +    languages.appendLiteral(&quot;,&quot;);

append(&apos;,&apos;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727195</commentid>
    <comment_count>4</comment_count>
      <attachid>165326</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-24 19:07:48 -0700</bug_when>
    <thetext>Comment on attachment 165326
proposed patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:86
&gt;&gt; +    ewk_text_checker_setting_enable_continuous_spell_checking_set(EINA_TRUE);
&gt; 
&gt; true

We almost decided to use standard boolean type, In EFL, they avoid to use Eina_Bool except for legacy code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727616</commentid>
    <comment_count>5</comment_count>
      <attachid>165609</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-25 07:14:35 -0700</bug_when>
    <thetext>Created attachment 165609
UT for ewk_text_checker_setting.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727625</commentid>
    <comment_count>6</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-09-25 07:21:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 165326 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165326&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:45
&gt; &gt; +static Eina_Bool settingEnabled = false;
&gt; 
&gt; bool

Ok, the unit test is using standard boolean type. EINA_TRUE, EINA_FALSE were replaced to true/false.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:46
&gt; &gt; +static Ecore_Timer* timeout = 0;
&gt; 
&gt; timer? or timeoutTimer?

timeoutTimer sounds better to me. Thanks.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:47
&gt; &gt; +static double timeoutValue = 0.5;
&gt; 
&gt; Please indicate the time unit in the variable name. e.g. defaultTimeoutSeconds

Changed to defaultTimeoutInSeconds.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:93
&gt; &gt; +    ecore_main_loop_begin();
&gt; 
&gt; We avoid using embedded main loops. We usually prefer checking a variable and calling ecore_main_loop_iterate() until the variable state changes.

I was trying to use ecore_main_loope_iterate(). Unfortunately it doesn&apos;t process idlers (ecore_idler_add) but some text checker setting are called through idlers.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:136
&gt; &gt; +    ewk_text_checker_setting_continuous_spell_checking_changed_cb_set(
&gt; 
&gt; Why 3 lines for this?

Merged.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:185
&gt; &gt; +    ewk_text_checker_setting_grammar_checking_changed_cb_set(
&gt; 
&gt; On 1 line?
&gt; 

Merged.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:251
&gt; &gt; +            languages.appendLiteral(&quot;,&quot;);
&gt; 
&gt; append(&apos;,&apos;) is more efficient

Right, done.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:279
&gt; &gt; +
&gt; 
&gt; Extra line here

Removed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:316
&gt; &gt; +    const char* lastExpected = static_cast&lt;const char*&gt;(eina_list_nth(availableLanguages, numberOfAvailableLanguages - 1));
&gt; 
&gt; eina_list_last?

Makes sense.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker_setting.cpp:322
&gt; &gt; +    languages.appendLiteral(&quot;,&quot;);
&gt; 
&gt; append(&apos;,&apos;)

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727627</commentid>
    <comment_count>7</comment_count>
      <attachid>165609</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-25 07:22:22 -0700</bug_when>
    <thetext>Comment on attachment 165609
UT for ewk_text_checker_setting.h

Attachment 165609 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14006523</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738720</commentid>
    <comment_count>8</comment_count>
      <attachid>167953</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-10 01:15:46 -0700</bug_when>
    <thetext>Created attachment 167953
UT for ewk_text_checker.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738734</commentid>
    <comment_count>9</comment_count>
      <attachid>167953</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-10 01:34:39 -0700</bug_when>
    <thetext>Comment on attachment 167953
UT for ewk_text_checker.h

Attachment 167953 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14258040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738745</commentid>
    <comment_count>10</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-10 01:48:55 -0700</bug_when>
    <thetext>
Both patches are not built because of dependency Bug 91854.
The patches covers the spelling API (ewk_text_checker.h, ewk_text_checker_settings.h)

The patches do not cover below API. They are UI specific and aren&apos;t well documented. Actually WebKit2-EFL doesn&apos;t need them so I am planing to remove them form Bug 91854.

typedef Eina_Bool (*Ewk_Text_Checker_UI_Spelling_Status_Get )(void)
typedef void (*Ewk_Text_Checker_UI_Spelling_Status_Toggle )(void)
typedef void (*Ewk_Text_Checker_UI_Spelling_Misspelled_Word_Update )(uint64_t tag, const char *misspelled_word)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740932</commentid>
    <comment_count>11</comment_count>
      <attachid>168424</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-12 08:34:17 -0700</bug_when>
    <thetext>Created attachment 168424
updated patch

1) Merge two patches into one.
2) Adjust to the recent changes in bug 91854</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740934</commentid>
    <comment_count>12</comment_count>
      <attachid>168424</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-12 08:39:55 -0700</bug_when>
    <thetext>Comment on attachment 168424
updated patch

Attachment 168424 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14265346</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740945</commentid>
    <comment_count>13</comment_count>
      <attachid>168424</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-12 08:59:58 -0700</bug_when>
    <thetext>Comment on attachment 168424
updated patch

Attachment 168424 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14266354

New failing tests:
inspector/profiler/heap-snapshot.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741792</commentid>
    <comment_count>14</comment_count>
      <attachid>168424</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-15 00:08:24 -0700</bug_when>
    <thetext>Comment on attachment 168424
updated patch

I think those tests should be moved to a test_ewk2_spellcheck.cpp file. It is big and clutter the test_ewk2_settings.cpp file too much. We already do this for download API for e.g.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741805</commentid>
    <comment_count>15</comment_count>
      <attachid>168424</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-15 00:21:07 -0700</bug_when>
    <thetext>Comment on attachment 168424
updated patch

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

Looks OK to me. (besides the small typos)

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:48
&gt; + * Its values are reseted before each test.

&quot;reset&quot;

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:73
&gt; + * the client on which object (assosiated to the tag) the spelling is being invoked.

&quot;associated&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742006</commentid>
    <comment_count>16</comment_count>
      <attachid>168702</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-15 06:35:14 -0700</bug_when>
    <thetext>Created attachment 168702
apply Christophe&apos;s suggestions

1) Move the unit tests connected to spelling settings to test_ewk2_text_checker.cpp
2) Fix typos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742009</commentid>
    <comment_count>17</comment_count>
      <attachid>168702</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-15 06:43:13 -0700</bug_when>
    <thetext>Comment on attachment 168702
apply Christophe&apos;s suggestions

Attachment 168702 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14294676</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742941</commentid>
    <comment_count>18</comment_count>
      <attachid>168702</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-16 01:20:11 -0700</bug_when>
    <thetext>Comment on attachment 168702
apply Christophe&apos;s suggestions

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

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:282
&gt; +    // if the SPELLCHECK macro is disabled, the callback is not set.

if -&gt; If ?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:409
&gt; +    loadUrlSync(environment-&gt;urlForResource(&quot;spelling_test.html&quot;).data());

loadUrlSync needs to use ASSERT_TRUE or EXPECT_TRUE

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:477
&gt; +           The word has to be selected first.

The -&gt; the ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742969</commentid>
    <comment_count>19</comment_count>
      <attachid>168893</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-16 01:54:27 -0700</bug_when>
    <thetext>Created attachment 168893
apply Gyuyoung&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742983</commentid>
    <comment_count>20</comment_count>
      <attachid>168893</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-16 02:10:42 -0700</bug_when>
    <thetext>Comment on attachment 168893
apply Gyuyoung&apos;s comments

Attachment 168893 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14384104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743150</commentid>
    <comment_count>21</comment_count>
      <attachid>168947</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-16 08:04:34 -0700</bug_when>
    <thetext>Created attachment 168947
adjust to latest changes from bug 91854</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743153</commentid>
    <comment_count>22</comment_count>
      <attachid>168947</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-16 08:14:52 -0700</bug_when>
    <thetext>Comment on attachment 168947
adjust to latest changes from bug 91854

Attachment 168947 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14392147</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744033</commentid>
    <comment_count>23</comment_count>
      <attachid>168947</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-17 02:05:35 -0700</bug_when>
    <thetext>Comment on attachment 168947
adjust to latest changes from bug 91854

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

LGTM. I think you should land this patch with Bug 91854.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:515
&gt; +    

Looks unneeded line.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:536
&gt; +    

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744123</commentid>
    <comment_count>24</comment_count>
      <attachid>169149</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-10-17 03:48:26 -0700</bug_when>
    <thetext>Created attachment 169149
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744164</commentid>
    <comment_count>25</comment_count>
      <attachid>169149</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-17 05:06:48 -0700</bug_when>
    <thetext>Comment on attachment 169149
patch for landing

Clearing flags on attachment: 169149

Committed r131589: &lt;http://trac.webkit.org/changeset/131589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744166</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-17 05:06:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165326</attachid>
            <date>2012-09-24 01:12:39 -0700</date>
            <delta_ts>2012-09-25 07:14:35 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>spelling-unit_test_for_text_checker_setting.patch</filename>
            <type>text/plain</type>
            <size>14962</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkOWVlYTQ0Li45ODQ0ZWQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
IEBACisyMDEyLTA5LTI0ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtXSzJdW0VGTF0gQWRkIHVuaXQgdGVzdHMgZm9yIFNwZWxsaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTk1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVycyB0
aGUgQVBJIGZyb20gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nLmgKKworICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOiBBZGRlZCB0ZXN0X2V3azJfdGV4dF9jaGVja2VyX3NldHRpbmcKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyX3NldHRp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRpbWVvdXRSZWFjaGVkKToKKyAgICAgICAgKHNldHRp
bmdDaGFuZ2VkQ2IpOgorCiAyMDEyLTA5LTIzICBTZW9ranUgS3dvbiAgPHNlb2tqdS5rd29uQHNh
bXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gQWRkIHNldHRpbmcgdG8gdG9nZ2xlIGRl
dmVsb3BlciBleHRlbnNpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGRlNTYyYTEu
LjI0OGJiMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yOTgsNiArMjk4LDcgQEAg
U0VUKEVXSzJVbml0VGVzdHNfQklOQVJJRVMKICAgICB0ZXN0X2V3azJfcmVmcHRyX2V2YXNfb2Jq
ZWN0CiAgICAgdGVzdF9ld2syX2ludGVudHMKICAgICB0ZXN0X2V3azJfc2V0dGluZ3MKKyAgICB0
ZXN0X2V3azJfdGV4dF9jaGVja2VyX3NldHRpbmcKICAgICB0ZXN0X2V3azJfdmlldwogKQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfdGV4dF9jaGVja2VyX3NldHRpbmcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjBjNjg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tl
cl9zZXR0aW5nLmNwcApAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGJy
aWVmIGNvdmVycyBBUEkgZnJvbSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaAorICogQGZpbGUg
dGVzdF9ld2syX3RleHRfY2hlY2tlcl9zZXR0aW5nLmNwcAorICoKKyAqIFRob3NlIHRlc3RzIGFy
ZSBlZmZlY3RpdmUgd2hlbiB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBlbmFibGVkIGZvciBXZWJL
aXQyLUVmbCBhbmQKKyAqIGF0IGxlc3QgdHdvIGRpY3Rpb25hcmllcyBoYXZlIGJlZW4gaW5zdGFs
bGVkIGZvciBleGFtcGxlLCBlbl9VUywgcGwgZXRjLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1
ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFaW5hLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVzdDsKKworc3RhdGljIEVpbmFf
Qm9vbCBzZXR0aW5nRW5hYmxlZCA9IGZhbHNlOworc3RhdGljIEVjb3JlX1RpbWVyKiB0aW1lb3V0
ID0gMDsKK3N0YXRpYyBkb3VibGUgdGltZW91dFZhbHVlID0gMC41OworCisvKioKKyAqIEhhbmRs
ZSB0aGUgdGltZW91dCwgaXQgbWF5IGhhcHBlbiBmb3IgdGhlIGFzeW5jaHJvbm91cyB0ZXN0cy4K
KyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcmV0dXJuIHRoZSBFQ09SRV9DQUxMQkFDS19DQU5D
RUwgZmxhZyB0byBkZWxldGUgdGhlIHRpbWVyIGF1dG9tYXRpY2FsbHkKKyAqLworc3RhdGljIEVp
bmFfQm9vbCB0aW1lb3V0UmVhY2hlZCh2b2lkKikKK3sKKyAgICBlY29yZV9tYWluX2xvb3BfcXVp
dCgpOworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKKy8qKgorICogVGhp
cyBjYWxsYmFjayB0ZXN0cyB0aGUgc2V0dGluZyBjaGFuZ2UgZm9yIGJvdGggdGhlIHNwZWxsIGFu
ZCBncmFtbWFyIGNoZWNraW5nLgorICogVmVyaWZ5IHRoZSBuZXcgc2V0dGluZyB2YWx1ZSAocGFz
c2VzIGluIHRoZSBAYSBmbGFnIHBhcmFtZXRlcikgaWYgaXQgZXF1YWxzIHRvIHRoZSBwcmV2aW91
c2x5IHNldC4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcGFyYW0gZmxhZyB0aGUgbmV3IHNl
dHRpbmcgdmFsdWUKKyAqLworc3RhdGljIHZvaWQgc2V0dGluZ0NoYW5nZWRDYihFaW5hX0Jvb2wg
ZmxhZykKK3sKKyAgICBFWFBFQ1RfRVEoc2V0dGluZ0VuYWJsZWQsIGZsYWcpOworCisgICAgZWNv
cmVfdGltZXJfZGVsKHRpbWVvdXQpOworICAgIHRpbWVvdXQgPSAwOworICAgIGVjb3JlX21haW5f
bG9vcF9xdWl0KCk7Cit9CisKKy8qKgorICogVGVzdCBzZXR0ZXIvZ2V0dGVyIGZvciB0aGUgY29u
dGlub3VzIHNwZWxsIGNoZWNraW5nOgorICogIC0gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2Vu
YWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldAorICogIC0gZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldAorICovCitURVNU
X0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nKQoreworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19l
bmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoRUlOQV9UUlVFKTsKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICBFWFBFQ1RfVFJVRShld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
ZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCkpOworCisgICAgLy8gV2hlbiB0
aGUgc3BlbGwgY2hlY2tpbmcgaGFzIGJlZW4gZW5hYmxlZCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2Ug
aXMgc2V0IChpZiB0aGUgdXNlcgorICAgIC8vIGRpZG4ndCBzZXQgYW55KS4gVGhlIGxhbmd1YWdl
cyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAgICB0aW1l
b3V0ID0gZWNvcmVfdGltZXJfYWRkKHRpbWVvdXRWYWx1ZSwgdGltZW91dFJlYWNoZWQsIDApOwor
ICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgRWluYV9MaXN0KiBsb2FkZWRMYW5n
dWFnZXMgPSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
X2dldCgpOworICAgIC8vIE5vIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlL2luc3RhbGxlZC4KKyAg
ICBpZiAoIWxvYWRlZExhbmd1YWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgRVhQRUNUX0VR
KDEsIGVpbmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpKTsKKworICAgIHZvaWQqIGRhdGE7
CisgICAgRUlOQV9MSVNUX0ZSRUUobG9hZGVkTGFuZ3VhZ2VzLCBkYXRhKQorICAgICAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSkpOworI2Vsc2UK
KyAgICBFWFBFQ1RfRkFMU0UoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpKTsKKyNlbmRpZgorCisgICAgZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldChFSU5BX0ZBTFNF
KTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpKTsKK30KKworLyoqCisgKiBUZXN0IHNldHRlci9n
ZXR0ZXIgZm9yIHRoZSBncmFtbWFyIGNoZWNraW5nOgorICogIC0gZXdrX3RleHRfY2hlY2tlcl9z
ZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldAorICogIC0gZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldAorICovCitURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNr
aW5nKQoreworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9jaGVj
a2luZ19zZXQoRUlOQV9UUlVFKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBFWFBFQ1Rf
VFJVRShld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0
KCkpOworI2Vsc2UKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2Vu
YWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpKTsKKyNlbmRpZgorCisgICAgZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3NldChFSU5BX0ZBTFNFKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2No
ZWNraW5nX2dldCgpKTsKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlz
IGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0aW5nIGhhcyBiZWVuIGNoYW5nZWQu
CisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3NldCkKK3sKKyAgICBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VkX2NiX3Nl
dCgKKyAgICAgICAgc2V0dGluZ0NoYW5nZWRDYgorICAgICk7CisKKyAgICBzZXR0aW5nRW5hYmxl
ZCA9IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19nZXQoKTsKKyAgICBzZXR0aW5nRW5hYmxlZCA9ICFzZXR0aW5nRW5hYmxlZDsKKyAgICBl
d2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
c2V0KHNldHRpbmdFbmFibGVkKTsKKworICAgIHRpbWVvdXQgPSBlY29yZV90aW1lcl9hZGQodGlt
ZW91dFZhbHVlLCB0aW1lb3V0UmVhY2hlZCwgMCk7CisKKyAgICAvLyBTdGFydCBwcm9jY2VzaW5n
IEVjb3JlIGV2ZW50cywgdGhlIG5vdGlmaWNhdGlvbiBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBz
cGVsbAorICAgIC8vIGNoZWNraW5nIHNldHRpbmcgaXMgY2FsbGVkIG9uIGlkbGVyLgorICAgIC8v
IFdlIGNhbid0IGNhbGwgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUgYmVjYXVzZSBpdCBkb2Vzbid0
IHByb2Nlc3MgdGhlIGlkbGVycy4KKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworI2lm
IEVOQUJMRShTUEVMTENIRUNLKQorICAgIEVYUEVDVF9GQUxTRSh0aW1lb3V0KTsKKyNlbHNlCisg
ICAgRVhQRUNUX1RSVUUodGltZW91dCk7CisjZW5kaWYKKworICAgIC8vIFRoZSBjYWxsYmFjayBz
aG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSBzZXR0aW5nIG9wdGlvbiBpcyBhbHJlYWR5IHNldC4K
KyAgICBzZXR0aW5nRW5hYmxlZCA9IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19nZXQoKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRp
bmdfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfc2V0KHNldHRpbmdFbmFibGVkKTsK
KworICAgIHRpbWVvdXQgPSBlY29yZV90aW1lcl9hZGQodGltZW91dFZhbHVlLCB0aW1lb3V0UmVh
Y2hlZCwgMCk7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICAvLyBXaGVuIHRo
ZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkIHRoZSBjYWxsYmFjayB3b24ndCBiZSBjYWxs
ZWQgdG9vLgorICAgIEVYUEVDVF9UUlVFKHRpbWVvdXQpOworCisgICAgLy8gVGhlIGNhbGxiYWNr
IHNob3VsZG4ndCBiZSBjYWxsZWQgaWYgdGhlIHVzZXIgaGFzIGludmFsaWRhdGVkIGl0LgorICAg
IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5n
ZWRfY2Jfc2V0KDApOworICAgIHNldHRpbmdFbmFibGVkID0gZXdrX3RleHRfY2hlY2tlcl9zZXR0
aW5nX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpOworICAgIHNldHRpbmdF
bmFibGVkID0gIXNldHRpbmdFbmFibGVkOworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19l
bmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQoc2V0dGluZ0VuYWJsZWQpOworCisg
ICAgdGltZW91dCA9IGVjb3JlX3RpbWVyX2FkZCh0aW1lb3V0VmFsdWUsIHRpbWVvdXRSZWFjaGVk
LCAwKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworICAgIC8vIGlmIHRoZSBTUEVM
TENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLCB0aGUgY2FsbGJhY2sgaXMgbm90IHNldC4KKyAgICBF
WFBFQ1RfVFJVRSh0aW1lb3V0KTsKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxi
YWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBncmFtbWFyIGNoZWNraW5nIHNldHRpbmcgaGFzIGJlZW4g
Y2hhbmdlZC4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJf
c2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KQoreworICAgIGV3a190ZXh0
X2NoZWNrZXJfc2V0dGluZ19ncmFtbWFyX2NoZWNraW5nX2NoYW5nZWRfY2Jfc2V0KAorICAgICAg
ICBzZXR0aW5nQ2hhbmdlZENiCisgICAgKTsKKworICAgIC8vIFRlc3Qgd2hldGhlciB0aGUgY2Fs
bGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNldHRpbmcgaGFzIGJlZW4gY2hhbmdlZC4KKyAgICBz
ZXR0aW5nRW5hYmxlZCA9IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9j
aGVja2luZ19nZXQoKTsKKyAgICBzZXR0aW5nRW5hYmxlZCA9ICFzZXR0aW5nRW5hYmxlZDsKKyAg
ICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KHNl
dHRpbmdFbmFibGVkKTsKKworICAgIHRpbWVvdXQgPSBlY29yZV90aW1lcl9hZGQodGltZW91dFZh
bHVlLCB0aW1lb3V0UmVhY2hlZCwgMCk7CisKKyAgICAvLyBTdGFydCBwcm9jY2VzaW5nIEVjb3Jl
IGV2ZW50cywgdGhlIG5vdGlmaWNhdGlvbiBhYm91dCBjaGFuZ2Ugb2YgdGhlIGdyYW1tYXIgY2hl
Y2tpbmcgc2V0dGluZyBpcyBjYWxsZWQgb24gaWRsZXIuCisgICAgLy8gV2UgY2FuJ3QgY2FsbCBl
Y29yZV9tYWluX2xvb3BfaXRlcmF0ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgcHJvY2VzcyBpZGxlcnMu
CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykK
KyAgICBFWFBFQ1RfRkFMU0UodGltZW91dCk7CisjZWxzZQorICAgIEVYUEVDVF9UUlVFKHRpbWVv
dXQpOworI2VuZGlmCisKKyAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBp
ZiB0aGUgc2V0dGluZyBvcHRpb24gaXMgYWxyZWFkeSBzZXQuCisgICAgc2V0dGluZ0VuYWJsZWQg
PSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KCk7
CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3Nl
dChzZXR0aW5nRW5hYmxlZCk7CisKKyAgICB0aW1lb3V0ID0gZWNvcmVfdGltZXJfYWRkKHRpbWVv
dXRWYWx1ZSwgdGltZW91dFJlYWNoZWQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigp
OworCisgICAgLy8gV2hlbiB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZCB0aGUgY2Fs
bGJhY2sgd29uJ3QgYmUgY2FsbGVkIHRvby4KKyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0KTsKKwor
ICAgIC8vIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGhhcyBp
bnZhbGlkYXRlZCBpdC4KKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfZ3JhbW1hcl9jaGVj
a2luZ19jaGFuZ2VkX2NiX3NldCgwKTsKKyAgICBzZXR0aW5nRW5hYmxlZCA9IGV3a190ZXh0X2No
ZWNrZXJfc2V0dGluZ19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19nZXQoKTsKKyAgICBzZXR0aW5n
RW5hYmxlZCA9ICFzZXR0aW5nRW5hYmxlZDsKKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
ZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KHNldHRpbmdFbmFibGVkKTsKKworICAgIHRpbWVv
dXQgPSBlY29yZV90aW1lcl9hZGQodGltZW91dFZhbHVlLCB0aW1lb3V0UmVhY2hlZCwgMCk7Cisg
ICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICAvLyBpZiB0aGUgU1BFTExDSEVDSyBt
YWNybyBpcyBkaXNhYmxlZCwgdGhlIGNhbGxiYWNrIGlzIG5vdCBzZXQuCisgICAgRVhQRUNUX1RS
VUUodGltZW91dCk7Cit9CisKKy8qKgorICogVGhpcyB1bml0IHRlc3Qgc2V0cyBhbGwgYXZhaWxh
YmxlL2luc3RhbGxlZCBkaWN0aW9uYXJpZXMgYW5kIHZlcmlmaWllcyB0aGVtCisgKiBpZiB0aGV5
IGFyZSBpbiB1c2UuCisgKiBBbGwgdGhlIGRpY3Rpb25hcmllcyBmcm9tIHRoZSBsaXN0IGNhbiBi
ZSBzZXQgdG8gcGVyZm9ybSBzcGVsbGNoZWNraW5nLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0
QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX2F2YWlsYWJsZV9zcGVsbF9jaGVja2luZ19s
YW5ndWFnZXNfZ2V0KQoreworICAgIEVpbmFfTGlzdCogYXZhaWxhYmxlTGFuZ3VhZ2VzID0gZXdr
X3RleHRfY2hlY2tlcl9zZXR0aW5nX2F2YWlsYWJsZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNf
Z2V0KCk7CisgICAgLy8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5zdGFsbGVkIG9yIHRo
ZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLgorICAgIGlmICghYXZhaWxhYmxlTGFuZ3Vh
Z2VzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBIZWxwZXIgdG8gY3JlYXRlIG9uZSBzdHJp
bmcgd2l0aCBjb21tYSBzZXBhcmF0ZWQgbGFuZ3VhZ2VzLgorICAgIHZvaWQqIGFjdHVhbCA9IDA7
CisgICAgV1RGOjpTdHJpbmdCdWlsZGVyIGxhbmd1YWdlczsKKyAgICBFaW5hX0xpc3QqIGxpc3RJ
dGVyYXRvciA9IDA7CisgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gZWluYV9saXN0X2NvdW50KGF2
YWlsYWJsZUxhbmd1YWdlcykgLSAxOworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIEVJTkFfTElT
VF9GT1JFQUNIKGF2YWlsYWJsZUxhbmd1YWdlcywgbGlzdEl0ZXJhdG9yLCBhY3R1YWwpIHsKKyAg
ICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWN0dWFsKSk7
CisgICAgICAgIC8vIEFkZCB0aGUgY29tbWEgYWZ0ZXIgYWxsIGJ1dCB0aGUgbGFzdCBsYW5ndWFn
ZSBJRHMuCisgICAgICAgIGlmIChpKysgIT0gbGFzdEluZGV4KQorICAgICAgICAgICAgbGFuZ3Vh
Z2VzLmFwcGVuZExpdGVyYWwoIiwiKTsKKyAgICB9CisKKyAgICAvLyBTZXQgYWxsIGF2YWlsYWJs
ZSBsYW5ndWFnZXMuCisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nX3NwZWxsX2NoZWNraW5n
X2xhbmd1YWdlc19zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAg
ICAvLyBMYW5ndWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQgZm9yIHRo
ZW0uCisgICAgdGltZW91dCA9IGVjb3JlX3RpbWVyX2FkZCh0aW1lb3V0VmFsdWUsIHRpbWVvdXRS
ZWFjaGVkLCAwKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworICAgIC8vIEdldCB0
aGUgbGFuZ3VhZ2VzIGluIHVzZS4KKyAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7Cisg
ICAgQVNTRVJUX0VRKGVpbmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpLCBlaW5hX2xpc3Rf
Y291bnQoYXZhaWxhYmxlTGFuZ3VhZ2VzKSk7CisKKyAgICBpID0gMDsKKyAgICB2b2lkKiBleHBl
Y3RlZCA9IDA7CisgICAgLy8gVmVyaWZ5IHdoZXRoZXIgdGhlIGxvYWRlZCBsYW5ndWFnZXMgbGlz
dCBpcyBlcXVhbCB0byB0aGUgYXZhaWxhYmxlIGxhbmd1YWdlcyBsaXN0LgorICAgIEVJTkFfTElT
VF9GT1JFQUNIKGxvYWRlZExhbmd1YWdlcywgbGlzdEl0ZXJhdG9yLCBhY3R1YWwpIHsKKyAgICAg
ICAgZXhwZWN0ZWQgPSBlaW5hX2xpc3RfbnRoKGF2YWlsYWJsZUxhbmd1YWdlcywgaSsrKTsKKyAg
ICAgICAgRVhQRUNUX1NUUkVRKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihleHBlY3RlZCksIHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKKyAgICB9CisKKyAgICAvLyBEZWxldGUg
dGhlIGxpc3RzLgorICAgIEVJTkFfTElTVF9GUkVFKGF2YWlsYWJsZUxhbmd1YWdlcywgYWN0dWFs
KQorICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
YWN0dWFsKSk7CisKKyAgICBFSU5BX0xJU1RfRlJFRShsb2FkZWRMYW5ndWFnZXMsIGFjdHVhbCkK
KyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFj
dHVhbCkpOworCit9CisKKy8qKgorICogSGVyZSB3ZSB0ZXN0IHRoZSBmb2xsb3dpbmcgc2NlbmFy
aW9zOgorICogIC0gc2V0dGluZyB0aGUgZGVmYXVsdCBsYW5ndWFnZSwKKyAqICAtIGlmIHR3byBh
cmJpdHJhcmlseSBzZWxlY3RlZCBkaWN0aW9uYXJpZXMgYXJlIHNldCBjb3JyZWN0bHkuCisgKi8K
K1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzKQoreworICAgIC8vIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZS4K
KyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3Nl
dCgwKTsKKworICAgIC8vIExhbmd1YWdlcyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRoZSBpZGxlciwg
d2FpdCBmb3IgdGhlbS4KKyAgICB0aW1lb3V0ID0gZWNvcmVfdGltZXJfYWRkKHRpbWVvdXRWYWx1
ZSwgdGltZW91dFJlYWNoZWQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisg
ICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIC8vIE5vIGRpY3Rpb25hcnkgaXMg
YXZhaWxhYmxlL2luc3RhbGxlZCBvciB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZC4K
KyAgICBpZiAoIWxvYWRlZExhbmd1YWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
X0VRKDEsIGVpbmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpKTsKKworICAgIC8vIERlbGV0
ZSB0aGUgbGlzdC4KKyAgICB2b2lkKiBhY3R1YWwgPSAwOworICAgIEVJTkFfTElTVF9GUkVFKGxv
YWRlZExhbmd1YWdlcywgYWN0dWFsKQorICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oYWN0dWFsKSk7CisKKyAgICAvLyBHZXQgdGhlIGZpcnN0IGFu
ZCBsYXN0IGxhbmd1YWdlIGZyb20gaW5zdGFsbGVkIGRpY3Rpb25hcmllcy4KKyAgICBFaW5hX0xp
c3QqIGF2YWlsYWJsZUxhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ19hdmFpbGFi
bGVfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIHVuc2lnbmVkIG51bWJlck9m
QXZhaWxhYmxlTGFuZ3VhZ2VzID0gZWluYV9saXN0X2NvdW50KGF2YWlsYWJsZUxhbmd1YWdlcyk7
CisgICAgLy8gV2UgYXNzdW1lIHRoYXQgdXNlciBoYXMgaW5zdGFsbGVkIGF0IGxlc3QgdHdvIGRp
Y3Rpb25hcmllcy4KKyAgICBpZiAobnVtYmVyT2ZBdmFpbGFibGVMYW5ndWFnZXMgPCAyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCBjaGFyKiBmaXJzdEV4cGVjdGVkID0gc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlzdF9udGgoYXZhaWxhYmxlTGFuZ3VhZ2VzLCAwKSk7Cisg
ICAgY29uc3QgY2hhciogbGFzdEV4cGVjdGVkID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGVp
bmFfbGlzdF9udGgoYXZhaWxhYmxlTGFuZ3VhZ2VzLCBudW1iZXJPZkF2YWlsYWJsZUxhbmd1YWdl
cyAtIDEpKTsKKworICAgIC8vIENhc2Ugc2Vuc2l0aXZpdHkgb2YgZGljdGlvbmFyaWVzIGRvZXNu
J3QgYWZmZWN0IG9uIGxvYWRpbmcgdGhlIGRpY3Rpb25hcmllcywKKyAgICAvLyB0aGUgRW5jaGFu
dCBsaWJyYXJ5IHdpbGwgJ25vcm1hbGl6ZScgdGhlbS4KKyAgICBXVEY6OlN0cmluZ0J1aWxkZXIg
bGFuZ3VhZ2VzOworICAgIGxhbmd1YWdlcy5hcHBlbmQoU3RyaW5nKGZpcnN0RXhwZWN0ZWQpLnVw
cGVyKCkpOworICAgIGxhbmd1YWdlcy5hcHBlbmRMaXRlcmFsKCIsIik7CisgICAgbGFuZ3VhZ2Vz
LmFwcGVuZChTdHJpbmcobGFzdEV4cGVjdGVkKS5sb3dlcigpKTsKKworICAgIC8vIFNldCBib3Ro
IGxhbmd1YWdlcyAodGhlIGZpcnN0IGFuZCB0aGUgbGFzdCkgZnJvbSB0aGUgbGlzdC4KKyAgICBl
d2tfdGV4dF9jaGVja2VyX3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldChsYW5n
dWFnZXMudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHRpbWVvdXQgPSBlY29yZV90
aW1lcl9hZGQodGltZW91dFZhbHVlLCB0aW1lb3V0UmVhY2hlZCwgMCk7CisgICAgZWNvcmVfbWFp
bl9sb29wX2JlZ2luKCk7CisKKyAgICBsb2FkZWRMYW5ndWFnZXMgPSBld2tfdGV4dF9jaGVja2Vy
X3NldHRpbmdfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEFTU0VSVF9FUSgy
LCBlaW5hX2xpc3RfY291bnQobG9hZGVkTGFuZ3VhZ2VzKSk7CisKKyAgICBFWFBFQ1RfU1RSRVEo
Zmlyc3RFeHBlY3RlZCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlzdF9udGgobG9h
ZGVkTGFuZ3VhZ2VzLCAwKSkpOworICAgIEVYUEVDVF9TVFJFUShsYXN0RXhwZWN0ZWQsIHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihlaW5hX2xpc3RfbnRoKGxvYWRlZExhbmd1YWdlcywgMSkpKTsK
KworICAgIC8vIERlbGV0ZSB0aGUgbGlzdHMuCisgICAgRUlOQV9MSVNUX0ZSRUUoYXZhaWxhYmxl
TGFuZ3VhZ2VzLCBhY3R1YWwpCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKKworICAgIEVJTkFfTElTVF9GUkVFKGxvYWRlZExh
bmd1YWdlcywgYWN0dWFsKQorICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oYWN0dWFsKSk7Cit9Cg==
</data>
<flag name="commit-queue"
          id="177344"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165609</attachid>
            <date>2012-09-25 07:14:35 -0700</date>
            <delta_ts>2012-10-12 08:34:17 -0700</delta_ts>
            <desc>UT for ewk_text_checker_setting.h</desc>
            <filename>spelling-unit_test_for_text_checker_setting.patch</filename>
            <type>text/plain</type>
            <size>15184</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4YzNhOThlLi4zOGJhYzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTItMDktMjQgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBBZGQgdW5pdCB0ZXN0cyBmb3IgU3BlbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTU2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJzIHRo
ZSBBUEkgZnJvbSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmcuaAorCisgICAgICAgICogUGxhdGZv
cm1FZmwuY21ha2U6IEFkZGVkIHRlc3RfZXdrMl90ZXh0X2NoZWNrZXJfc2V0dGluZ3MKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyX3NldHRp
bmdzLmNwcDogQWRkZWQuCisgICAgICAgICh0aW1lb3V0UmVhY2hlZCk6CisgICAgICAgIChzZXR0
aW5nQ2hhbmdlZENiKToKKwogMjAxMi0wOS0yNCAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3ph
amtvd3NraUBzYW1zdW5nLmNvbT4sIE1pY2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgogCiAg
ICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggMjMzM2UwMy4uYWRlMDA2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UKQEAgLTI5OSw2ICsyOTksNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwog
ICAgIHRlc3RfZXdrMl9yZWZwdHJfZXZhc19vYmplY3QKICAgICB0ZXN0X2V3azJfaW50ZW50cwog
ICAgIHRlc3RfZXdrMl9zZXR0aW5ncworICAgIHRlc3RfZXdrMl90ZXh0X2NoZWNrZXJfc2V0dGlu
Z3MKICAgICB0ZXN0X2V3azJfdmlldwogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyX3NldHRpbmdzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0
X2NoZWNrZXJfc2V0dGluZ3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjczODJkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyX3NldHRpbmdzLmNwcApAQCAtMCwwICsx
LDMzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGJyaWVmIGNvdmVycyBBUEkgZnJvbSBld2tf
dGV4dF9jaGVja2VyX3NldHRpbmdzLmgKKyAqIEBmaWxlIHRlc3RfZXdrMl90ZXh0X2NoZWNrZXJf
c2V0dGluZ3MuY3BwCisgKgorICogVGhvc2UgdGVzdHMgYXJlIGVmZmVjdGl2ZSB3aGVuIHRoZSBT
UEVMTENIRUNLIG1hY3JvIGlzIGVuYWJsZWQgZm9yIFdlYktpdDItRWZsIGFuZAorICogYXQgbGVz
dCB0d28gZGljdGlvbmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgZm9yIGV4YW1wbGUsIGVuX1VT
LCBwbCBldGMuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRl
c3RVdGlscy9FV0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNs
dWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1l
c3BhY2UgRVdLMlVuaXRUZXN0OworCitzdGF0aWMgYm9vbCBzZXR0aW5nRW5hYmxlZCA9IGZhbHNl
Oworc3RhdGljIEVjb3JlX1RpbWVyKiB0aW1lb3V0VGltZXIgPSAwOworc3RhdGljIGRvdWJsZSBk
ZWZhdWx0VGltZW91dEluU2Vjb25kcyA9IDAuNTsKKworLyoqCisgKiBIYW5kbGUgdGhlIHRpbWVv
dXQsIGl0IG1heSBoYXBwZW4gZm9yIHRoZSBhc3luY2hyb25vdXMgdGVzdHMuCisgKgorICogQGlu
dGVybmFsCisgKgorICogQHJldHVybiB0aGUgRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMIGZsYWcgdG8g
ZGVsZXRlIHRoZSB0aW1lciBhdXRvbWF0aWNhbGx5CisgKi8KK3N0YXRpYyBFaW5hX0Jvb2wgdGlt
ZW91dFJlYWNoZWQodm9pZCopCit7CisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICBy
ZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCisvKioKKyAqIFRoaXMgY2FsbGJhY2sg
dGVzdHMgdGhlIHNldHRpbmcgY2hhbmdlIGZvciBib3RoIHRoZSBzcGVsbCBhbmQgZ3JhbW1hciBj
aGVja2luZy4KKyAqIFZlcmlmeSB0aGUgbmV3IHNldHRpbmcgdmFsdWUgKHBhc3NlcyBpbiB0aGUg
QGEgZmxhZyBwYXJhbWV0ZXIpIGlmIGl0IGVxdWFscyB0byB0aGUgcHJldmlvdXNseSBzZXQuCisg
KgorICogQGludGVybmFsCisgKgorICogQHBhcmFtIGZsYWcgdGhlIG5ldyBzZXR0aW5nIHZhbHVl
CisgKi8KK3N0YXRpYyB2b2lkIHNldHRpbmdDaGFuZ2VkQ2IoRWluYV9Cb29sIGZsYWcpCit7Cisg
ICAgRVhQRUNUX0VRKHNldHRpbmdFbmFibGVkLCBmbGFnKTsKKworICAgIGVjb3JlX3RpbWVyX2Rl
bCh0aW1lb3V0VGltZXIpOworICAgIHRpbWVvdXRUaW1lciA9IDA7CisgICAgZWNvcmVfbWFpbl9s
b29wX3F1aXQoKTsKK30KKworLyoqCisgKiBUZXN0IHNldHRlci9nZXR0ZXIgZm9yIHRoZSBjb250
aW5vdXMgc3BlbGwgY2hlY2tpbmc6CisgKiAgLSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2Vu
YWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldAorICogIC0gZXdrX3RleHRfY2hlY2tl
cl9zZXR0aW5nc19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQKKyAqLworVEVT
VF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmcpCit7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
c19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQodHJ1ZSk7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgRVhQRUNUX1RSVUUoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19l
bmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19nZXQoKSk7CisKKyAgICAvLyBXaGVuIHRo
ZSBzcGVsbCBjaGVja2luZyBoYXMgYmVlbiBlbmFibGVkLCB0aGUgZGVmYXVsdCBsYW5ndWFnZSBp
cyBzZXQgKGlmIHRoZSB1c2VyCisgICAgLy8gZGlkbid0IHNldCBhbnkpLiBUaGUgbGFuZ3VhZ2Vz
IGFyZSBiZWluZyBsb2FkZWQgb24gdGhlIGlkbGVyLCB3YWl0IGZvciB0aGVtLgorICAgIHRpbWVv
dXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgdGltZW91
dFJlYWNoZWQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgRWluYV9M
aXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKKyAgICAvLyBObyBkaWN0aW9uYXJ5IGlzIGF2YWlsYWJs
ZS9pbnN0YWxsZWQuCisgICAgaWYgKCFsb2FkZWRMYW5ndWFnZXMpCisgICAgICAgIHJldHVybjsK
KworICAgIEVYUEVDVF9FUSgxLCBlaW5hX2xpc3RfY291bnQobG9hZGVkTGFuZ3VhZ2VzKSk7CisK
KyAgICB2b2lkKiBkYXRhOworICAgIEVJTkFfTElTVF9GUkVFKGxvYWRlZExhbmd1YWdlcywgZGF0
YSkKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEpKTsKKyNlbHNlCisgICAgRVhQRUNUX0ZBTFNFKGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCkpOworI2VuZGlmCisKKyAg
ICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX3NldChmYWxzZSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZ2V0KCkpOworfQorCisvKioKKyAq
IFRlc3Qgc2V0dGVyL2dldHRlciBmb3IgdGhlIGdyYW1tYXIgY2hlY2tpbmc6CisgKiAgLSBld2tf
dGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldAorICogIC0g
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19zZXQKKyAq
LworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5h
YmxlX2dyYW1tYXJfY2hlY2tpbmcpCit7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19l
bmFibGVfZ3JhbW1hcl9jaGVja2luZ19zZXQodHJ1ZSk7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
CisgICAgRVhQRUNUX1RSVUUoZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfZ3JhbW1h
cl9jaGVja2luZ19nZXQoKSk7CisjZWxzZQorICAgIEVYUEVDVF9GQUxTRShld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdzX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpKTsKKyNlbmRpZgorCisg
ICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfZ3JhbW1hcl9jaGVja2luZ19zZXQo
ZmFsc2UpOworICAgIEVYUEVDVF9GQUxTRShld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJs
ZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpKTsKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhl
IGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0aW5nIGhhcyBi
ZWVuIGNoYW5nZWQuCisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVj
a2VyX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQpCit7
CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2NoYW5nZWRfY2Jfc2V0KHNldHRpbmdDaGFuZ2VkQ2IpOworCisgICAgc2V0dGluZ0VuYWJsZWQg
PSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2dldCgpOworICAgIHNldHRpbmdFbmFibGVkID0gIXNldHRpbmdFbmFibGVkOworICAgIGV3
a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
c2V0KHNldHRpbmdFbmFibGVkKTsKKworICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2Fk
ZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgdGltZW91dFJlYWNoZWQsIDApOworCisgICAgLy8g
U3RhcnQgcHJvY2Nlc2luZyBFY29yZSBldmVudHMsIHRoZSBub3RpZmljYXRpb24gYWJvdXQgdGhl
IGNoYW5nZSBvZiB0aGUgc3BlbGwKKyAgICAvLyBjaGVja2luZyBzZXR0aW5nIGlzIGNhbGxlZCBv
biBpZGxlci4KKyAgICAvLyBXZSBjYW4ndCBjYWxsIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlIGJl
Y2F1c2UgaXQgZG9lc24ndCBwcm9jZXNzIHRoZSBpZGxlcnMuCisgICAgZWNvcmVfbWFpbl9sb29w
X2JlZ2luKCk7CisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBFWFBFQ1RfRkFMU0UodGlt
ZW91dFRpbWVyKTsKKyNlbHNlCisgICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsKKyNlbmRp
ZgorCisgICAgLy8gVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQgaWYgdGhlIHNldHRp
bmcgb3B0aW9uIGlzIGFscmVhZHkgc2V0LgorICAgIHNldHRpbmdFbmFibGVkID0gZXdrX3RleHRf
Y2hlY2tlcl9zZXR0aW5nc19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19nZXQoKTsK
KyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX3NldChzZXR0aW5nRW5hYmxlZCk7CisKKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90
aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIHRpbWVvdXRSZWFjaGVkLCAwKTsKKyAg
ICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworICAgIC8vIFdoZW4gdGhlIFNQRUxMQ0hFQ0sg
bWFjcm8gaXMgZGlzYWJsZWQgdGhlIGNhbGxiYWNrIHdvbid0IGJlIGNhbGxlZCB0b28uCisgICAg
RVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsKKworICAgIC8vIFRoZSBjYWxsYmFjayBzaG91bGRu
J3QgYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGhhcyBpbnZhbGlkYXRlZCBpdC4KKyAgICBld2tfdGV4
dF9jaGVja2VyX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlZF9jYl9z
ZXQoMCk7CisgICAgc2V0dGluZ0VuYWJsZWQgPSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2Vu
YWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2dldCgpOworICAgIHNldHRpbmdFbmFibGVk
ID0gIXNldHRpbmdFbmFibGVkOworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxl
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfc2V0KHNldHRpbmdFbmFibGVkKTsKKworICAgIHRp
bWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgdGlt
ZW91dFJlYWNoZWQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgLy8g
aWYgdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQsIHRoZSBjYWxsYmFjayBpcyBub3Qg
c2V0LgorICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7Cit9CisKKy8qKgorICogVGVzdCB3
aGV0aGVyIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZ3JhbW1hciBjaGVja2luZyBz
ZXR0aW5nIGhhcyBiZWVuIGNoYW5nZWQuCisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBl
d2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2dyYW1tYXJfY2hlY2tpbmdfY2hhbmdlZF9jYl9zZXQp
Cit7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19ncmFtbWFyX2NoZWNraW5nX2NoYW5n
ZWRfY2Jfc2V0KHNldHRpbmdDaGFuZ2VkQ2IpOworCisgICAgLy8gVGVzdCB3aGV0aGVyIHRoZSBj
YWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgc2V0dGluZyBoYXMgYmVlbiBjaGFuZ2VkLgorICAg
IHNldHRpbmdFbmFibGVkID0gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19lbmFibGVfZ3JhbW1h
cl9jaGVja2luZ19nZXQoKTsKKyAgICBzZXR0aW5nRW5hYmxlZCA9ICFzZXR0aW5nRW5hYmxlZDsK
KyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX3Nl
dChzZXR0aW5nRW5hYmxlZCk7CisKKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQo
ZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIHRpbWVvdXRSZWFjaGVkLCAwKTsKKworICAgIC8vIFN0
YXJ0IHByb2NjZXNpbmcgRWNvcmUgZXZlbnRzLCB0aGUgbm90aWZpY2F0aW9uIGFib3V0IGNoYW5n
ZSBvZiB0aGUgZ3JhbW1hciBjaGVja2luZyBzZXR0aW5nIGlzIGNhbGxlZCBvbiBpZGxlci4KKyAg
ICAvLyBXZSBjYW4ndCBjYWxsIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlIGJlY2F1c2UgaXQgZG9l
c24ndCBwcm9jZXNzIGlkbGVycy4KKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworI2lm
IEVOQUJMRShTUEVMTENIRUNLKQorICAgIEVYUEVDVF9GQUxTRSh0aW1lb3V0VGltZXIpOworI2Vs
c2UKKyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0VGltZXIpOworI2VuZGlmCisKKyAgICAvLyBUaGUg
Y2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0aGUgc2V0dGluZyBvcHRpb24gaXMgYWxy
ZWFkeSBzZXQuCisgICAgc2V0dGluZ0VuYWJsZWQgPSBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdz
X2VuYWJsZV9ncmFtbWFyX2NoZWNraW5nX2dldCgpOworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0
dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfc2V0KHNldHRpbmdFbmFibGVkKTsKKworICAg
IHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywg
dGltZW91dFJlYWNoZWQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAg
Ly8gV2hlbiB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZCB0aGUgY2FsbGJhY2sgd29u
J3QgYmUgY2FsbGVkIHRvby4KKyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0VGltZXIpOworCisgICAg
Ly8gVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQgaWYgdGhlIHVzZXIgaGFzIGludmFs
aWRhdGVkIGl0LgorICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZ3JhbW1hcl9jaGVja2lu
Z19jaGFuZ2VkX2NiX3NldCgwKTsKKyAgICBzZXR0aW5nRW5hYmxlZCA9IGV3a190ZXh0X2NoZWNr
ZXJfc2V0dGluZ3NfZW5hYmxlX2dyYW1tYXJfY2hlY2tpbmdfZ2V0KCk7CisgICAgc2V0dGluZ0Vu
YWJsZWQgPSAhc2V0dGluZ0VuYWJsZWQ7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19l
bmFibGVfZ3JhbW1hcl9jaGVja2luZ19zZXQoc2V0dGluZ0VuYWJsZWQpOworCisgICAgdGltZW91
dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCB0aW1lb3V0
UmVhY2hlZCwgMCk7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICAvLyBpZiB0
aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZCwgdGhlIGNhbGxiYWNrIGlzIG5vdCBzZXQu
CisgICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsKK30KKworLyoqCisgKiBUaGlzIHVuaXQg
dGVzdCBzZXRzIGFsbCBhdmFpbGFibGUvaW5zdGFsbGVkIGRpY3Rpb25hcmllcyBhbmQgdmVyaWZp
aWVzIHRoZW0KKyAqIGlmIHRoZXkgYXJlIGluIHVzZS4KKyAqIEFsbCB0aGUgZGljdGlvbmFyaWVz
IGZyb20gdGhlIGxpc3QgY2FuIGJlIHNldCB0byBwZXJmb3JtIHNwZWxsY2hlY2tpbmcuCisgKi8K
K1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdzX2F2YWls
YWJsZV9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KQoreworICAgIEVpbmFfTGlzdCogYXZh
aWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19hdmFpbGFibGVfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIC8vIE5vIGRpY3Rpb25hcnkgaXMgYXZh
aWxhYmxlL2luc3RhbGxlZCBvciB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZC4KKyAg
ICBpZiAoIWF2YWlsYWJsZUxhbmd1YWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSGVs
cGVyIHRvIGNyZWF0ZSBvbmUgc3RyaW5nIHdpdGggY29tbWEgc2VwYXJhdGVkIGxhbmd1YWdlcy4K
KyAgICB2b2lkKiBhY3R1YWwgPSAwOworICAgIFdURjo6U3RyaW5nQnVpbGRlciBsYW5ndWFnZXM7
CisgICAgRWluYV9MaXN0KiBsaXN0SXRlcmF0b3IgPSAwOworICAgIHVuc2lnbmVkIGxhc3RJbmRl
eCA9IGVpbmFfbGlzdF9jb3VudChhdmFpbGFibGVMYW5ndWFnZXMpIC0gMTsKKyAgICB1bnNpZ25l
ZCBpID0gMDsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSChhdmFpbGFibGVMYW5ndWFnZXMsIGxpc3RJ
dGVyYXRvciwgYWN0dWFsKSB7CisgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KGFjdHVhbCkpOworICAgICAgICAvLyBBZGQgdGhlIGNvbW1hIGFmdGVyIGFs
bCBidXQgdGhlIGxhc3QgbGFuZ3VhZ2UgSURzLgorICAgICAgICBpZiAoaSsrICE9IGxhc3RJbmRl
eCkKKyAgICAgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoJywnKTsKKyAgICB9CisKKyAgICAvLyBT
ZXQgYWxsIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
c19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGxhbmd1YWdlcy50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworCisgICAgLy8gTGFuZ3VhZ2VzIGFyZSBiZWluZyBsb2FkZWQgb24gdGhlIGlk
bGVyLCB3YWl0IGZvciB0aGVtLgorICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChk
ZWZhdWx0VGltZW91dEluU2Vjb25kcywgdGltZW91dFJlYWNoZWQsIDApOworICAgIGVjb3JlX21h
aW5fbG9vcF9iZWdpbigpOworCisgICAgLy8gR2V0IHRoZSBsYW5ndWFnZXMgaW4gdXNlLgorICAg
IEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19z
cGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CisgICAgQVNTRVJUX0VRKGVpbmFfbGlzdF9j
b3VudChsb2FkZWRMYW5ndWFnZXMpLCBlaW5hX2xpc3RfY291bnQoYXZhaWxhYmxlTGFuZ3VhZ2Vz
KSk7CisKKyAgICBpID0gMDsKKyAgICB2b2lkKiBleHBlY3RlZCA9IDA7CisgICAgLy8gVmVyaWZ5
IHdoZXRoZXIgdGhlIGxvYWRlZCBsYW5ndWFnZXMgbGlzdCBpcyBlcXVhbCB0byB0aGUgYXZhaWxh
YmxlIGxhbmd1YWdlcyBsaXN0LgorICAgIEVJTkFfTElTVF9GT1JFQUNIKGxvYWRlZExhbmd1YWdl
cywgbGlzdEl0ZXJhdG9yLCBhY3R1YWwpIHsKKyAgICAgICAgZXhwZWN0ZWQgPSBlaW5hX2xpc3Rf
bnRoKGF2YWlsYWJsZUxhbmd1YWdlcywgaSsrKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihleHBlY3RlZCksIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihh
Y3R1YWwpKTsKKyAgICB9CisKKyAgICAvLyBEZWxldGUgdGhlIGxpc3RzLgorICAgIEVJTkFfTElT
VF9GUkVFKGF2YWlsYWJsZUxhbmd1YWdlcywgYWN0dWFsKQorICAgICAgICBlaW5hX3N0cmluZ3No
YXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWN0dWFsKSk7CisKKyAgICBFSU5BX0xJ
U1RfRlJFRShsb2FkZWRMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAgICAgZWluYV9zdHJpbmdzaGFy
ZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOworfQorCisvKioKKyAqIEhl
cmUgd2UgdGVzdCB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczoKKyAqICAtIHNldHRpbmcgdGhlIGRl
ZmF1bHQgbGFuZ3VhZ2UsCisgKiAgLSBpZiB0d28gYXJiaXRyYXJpbHkgc2VsZWN0ZWQgZGljdGlv
bmFyaWVzIGFyZSBzZXQgY29ycmVjdGx5LgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwg
ZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpCit7Cisg
ICAgLy8gU2V0IHRoZSBkZWZhdWx0IGxhbmd1YWdlLgorICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0
dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCgwKTsKKworICAgIC8vIExhbmd1YWdl
cyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAgICB0aW1l
b3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIHRpbWVv
dXRSZWFjaGVkLCAwKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworICAgIEVpbmFf
TGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CisgICAgLy8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFi
bGUvaW5zdGFsbGVkIG9yIHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLgorICAgIGlm
ICghbG9hZGVkTGFuZ3VhZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfRVEoMSwg
ZWluYV9saXN0X2NvdW50KGxvYWRlZExhbmd1YWdlcykpOworCisgICAgLy8gRGVsZXRlIHRoZSBs
aXN0LgorICAgIHZvaWQqIGFjdHVhbCA9IDA7CisgICAgRUlOQV9MSVNUX0ZSRUUobG9hZGVkTGFu
Z3VhZ2VzLCBhY3R1YWwpCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKKworICAgIC8vIEdldCB0aGUgZmlyc3QgYW5kIGxhc3Qg
bGFuZ3VhZ2UgZnJvbSBpbnN0YWxsZWQgZGljdGlvbmFyaWVzLgorICAgIEVpbmFfTGlzdCogYXZh
aWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5nc19hdmFpbGFibGVfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIHVuc2lnbmVkIG51bWJlck9mQXZhaWxh
YmxlTGFuZ3VhZ2VzID0gZWluYV9saXN0X2NvdW50KGF2YWlsYWJsZUxhbmd1YWdlcyk7CisgICAg
Ly8gV2UgYXNzdW1lIHRoYXQgdXNlciBoYXMgaW5zdGFsbGVkIGF0IGxlc3QgdHdvIGRpY3Rpb25h
cmllcy4KKyAgICBpZiAobnVtYmVyT2ZBdmFpbGFibGVMYW5ndWFnZXMgPCAyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBjaGFyKiBmaXJzdEV4cGVjdGVkID0gc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcio+KGVpbmFfbGlzdF9udGgoYXZhaWxhYmxlTGFuZ3VhZ2VzLCAwKSk7CisgICAgY29u
c3QgY2hhciogbGFzdEV4cGVjdGVkID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlz
dF9kYXRhX2dldChlaW5hX2xpc3RfbGFzdChhdmFpbGFibGVMYW5ndWFnZXMpKSk7CisKKyAgICAv
LyBDYXNlIHNlbnNpdGl2aXR5IG9mIGRpY3Rpb25hcmllcyBkb2Vzbid0IGFmZmVjdCBvbiBsb2Fk
aW5nIHRoZSBkaWN0aW9uYXJpZXMsCisgICAgLy8gdGhlIEVuY2hhbnQgbGlicmFyeSB3aWxsICdu
b3JtYWxpemUnIHRoZW0uCisgICAgV1RGOjpTdHJpbmdCdWlsZGVyIGxhbmd1YWdlczsKKyAgICBs
YW5ndWFnZXMuYXBwZW5kKFN0cmluZyhmaXJzdEV4cGVjdGVkKS51cHBlcigpKTsKKyAgICBsYW5n
dWFnZXMuYXBwZW5kKCcsJyk7CisgICAgbGFuZ3VhZ2VzLmFwcGVuZChTdHJpbmcobGFzdEV4cGVj
dGVkKS5sb3dlcigpKTsKKworICAgIC8vIFNldCBib3RoIGxhbmd1YWdlcyAodGhlIGZpcnN0IGFu
ZCB0aGUgbGFzdCkgZnJvbSB0aGUgbGlzdC4KKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRpbmdz
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisKKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRp
bWVvdXRJblNlY29uZHMsIHRpbWVvdXRSZWFjaGVkLCAwKTsKKyAgICBlY29yZV9tYWluX2xvb3Bf
YmVnaW4oKTsKKworICAgIGxvYWRlZExhbmd1YWdlcyA9IGV3a190ZXh0X2NoZWNrZXJfc2V0dGlu
Z3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEFTU0VSVF9FUSgyLCBlaW5h
X2xpc3RfY291bnQobG9hZGVkTGFuZ3VhZ2VzKSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoZmlyc3RF
eHBlY3RlZCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlzdF9udGgobG9hZGVkTGFu
Z3VhZ2VzLCAwKSkpOworICAgIEVYUEVDVF9TVFJFUShsYXN0RXhwZWN0ZWQsIHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihlaW5hX2xpc3RfbnRoKGxvYWRlZExhbmd1YWdlcywgMSkpKTsKKworICAg
IC8vIERlbGV0ZSB0aGUgbGlzdHMuCisgICAgRUlOQV9MSVNUX0ZSRUUoYXZhaWxhYmxlTGFuZ3Vh
Z2VzLCBhY3R1YWwpCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihhY3R1YWwpKTsKKworICAgIEVJTkFfTElTVF9GUkVFKGxvYWRlZExhbmd1YWdl
cywgYWN0dWFsKQorICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oYWN0dWFsKSk7Cit9Cg==
</data>
<flag name="commit-queue"
          id="177711"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167953</attachid>
            <date>2012-10-10 01:15:46 -0700</date>
            <delta_ts>2012-10-12 08:34:17 -0700</delta_ts>
            <desc>UT for ewk_text_checker.h</desc>
            <filename>spelling-unit_test_for_text_checker.patch</filename>
            <type>text/plain</type>
            <size>12933</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxZmQ2ZjE2Li4wMmZkZTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTItMTAtMDkgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBBZGQgdW5pdCB0ZXN0cyBmb3IgU3BlbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTU2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSB1
bml0IHRlc3RzIHdoaWNoIGNvdmVycyB0aGUgQVBJIGZyb20gZXdrX3RleHRfY2hlY2tlci5oCisK
KyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcDogQWRkZWQu
CisgICAgICAgIChyZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKToKKyAgICAgICAgKG9uU3Bl
bGxEb2N1bWVudFRhZyk6CisgICAgICAgIChvblNwZWxsRG9jdW1lbnRUYWdDbG9zZSk6CisgICAg
ICAgIChvblNwZWxsaW5nQ2hlY2spOgorICAgICAgICAob25Xb3JkR3Vlc3Nlcyk6CisgICAgICAg
IChvbldvcmRMZWFybik6CisgICAgICAgIChvbldvcmRJZ25vcmUpOgorICAgICAgICAoVEVTVF9G
KToKKwogMjAxMi0wOS0yNCAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1z
dW5nLmNvbT4sIE1pY2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEltcGxl
bWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggNWNmNzkwOS4uYmY4MmFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTMzNCw2ICszMzQsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3RfZXdr
Ml9yZWZwdHJfZXZhc19vYmplY3QKICAgICB0ZXN0X2V3azJfaW50ZW50cwogICAgIHRlc3RfZXdr
Ml9zZXR0aW5ncworICAgIHRlc3RfZXdrMl90ZXh0X2NoZWNrZXIKICAgICB0ZXN0X2V3azJfdmll
dwogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL3NwZWxsaW5nX3Rlc3QuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjkzODIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL3NwZWxsaW5nX3Rlc3Qu
aHRtbApAQCAtMCwwICsxLDIzIEBACis8IS0tCisgICAgVGhlIHBhZ2UgY29udGFpbnMgdGhlIGlu
cHV0IGZpZWxkIGVsZW1lbnQgd2hpY2ggaXMgZmlsbGVkCisgICAgd2l0aCB0aGUgbWlzc3BlbGxl
ZCB3b3JkIHRvIHBlcmZvcm0gc3BlbGxpbmcuCistLT4KKzxIVE1MPgorPEhFQUQ+CisgICAgPFRJ
VExFPlRlc3RpbmcgV2ViIFBhZ2UgZm9yIFNwZWxsaW5nPC9USVRMRT4KKyAgICA8U0NSSVBUPgor
ICAgICAgICBmdW5jdGlvbiBzZXRJbnB1dEZpZWxkVmFsdWUoKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBUaGUgaW5wdXQgZmllbGQgaGFzIHRvIGJlIGZvY3VzZWQgYmVmb3JlIHR5cGluZyB0
byBpdC4KKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dCIpLmZvY3Vz
KCk7CisKKyAgICAgICAgICAgIC8vICdTcGFjZScgbm90aWZpZXMgV2ViS2l0IHRoYXQgd29yZCBo
YXMgYmVlbiBpbnNlcnRlZC4KKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJp
bnB1dCIpLnZhbHVlID0gImFhICI7CisgICAgICAgIH0KKyAgICA8L1NDUklQVD4KKzwvSEVBRD4K
KworPEJPRFkgb25sb2FkPSJzZXRJbnB1dEZpZWxkVmFsdWUoKSI+Cis8SU5QVVQgdHlwZT0idGV4
dCIgaWQ9ImlucHV0Ij4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hl
Y2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhZGI2MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBi
cmllZiBjb3ZlcnMgQVBJIGZyb20gZXdrX3RleHRfY2hlY2tlci5oCisgKiBAZmlsZSB0ZXN0X2V3
azJfdGV4dF9jaGVja2VyLmNwcAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgIlVuaXRUZXN0
VXRpbHMvRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5oPgor
I2luY2x1ZGUgPEVpbmEuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVzdDsKKworZXh0
ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKKworc3RhdGljIGNvbnN0
IHVpbnQ2NF90IGRlZmF1bHREb2N1bWVudFRhZyA9IDEyMzsKK3N0YXRpYyBjb25zdCBjaGFyIGV4
cGVjdGVkTWlzc3BlbGxlZFdvcmRbXSA9ICJhYSI7CitzdGF0aWMgY29uc3QgRXZhc19PYmplY3Qq
IGRlZmF1bHRWaWV3ID0gMDsKKworLyoqCisgKiBTdHJ1Y3R1cmUga2VlcHMgaW5mb3JtYXRpb24g
d2hpY2ggY2FsbGJhY2tzIHdlcmUgY2FsbGVkLgorICogSXRzIHZhbHVlcyBhcmUgcmVzZXRlZCBi
ZWZvcmUgZWFjaCB0ZXN0LgorICovCitzdGF0aWMgc3RydWN0IHsKKyAgICBib29sIHNwZWxsRG9j
dW1lbnRUYWcgOiAxOworICAgIGJvb2wgc3BlbGxEb2N1bWVudFRhZ0Nsb3NlIDogMTsKKyAgICBi
b29sIHNwZWxsaW5nQ2hlY2sgOiAxOworICAgIGJvb2wgd29yZEd1ZXNzZXMgOiAxOworICAgIGJv
b2wgd29yZExlYXJuIDogMTsKKyAgICBib29sIHdvcmRJZ25vcmUgOiAxOworfSBjYWxsYmFja3NF
eGVjdXRpb25TdGF0czsKKworc3RhdGljIHZvaWQgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0
cygpCit7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1bWVudFRhZyA9IGZh
bHNlOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsRG9jdW1lbnRUYWdDbG9zZSA9
IGZhbHNlOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsaW5nQ2hlY2sgPSBmYWxz
ZTsKKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy53b3JkR3Vlc3NlcyA9IGZhbHNlOworICAg
IGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLndvcmRMZWFybiA9IGZhbHNlOworICAgIGNhbGxiYWNr
c0V4ZWN1dGlvblN0YXRzLndvcmRJZ25vcmUgPSBmYWxzZTsKK30KKworLyoqCisgKiBSZXR1cm5z
IHVuaXF1ZSB0YWcgKGFuIGlkZW50aWZpZXIpLgorICoKKyAqIEl0IHdpbGwgYmUgdXNlZCBmb3Ig
b25TcGVsbGluZ0NoZWNrLCBvbldvcmRHdWVzc2VzIGV0Yy4gdG8gbm90aWZ5CisgKiB0aGUgY2xp
ZW50IG9uIHdoaWNoIG9iamVjdCAoYXNzb3NpYXRlZCB0byB0aGUgdGFnKSB0aGUgc3BlbGxpbmcg
aXMgYmVpbmcgaW52b2tlZC4KKyAqCisgKiBAcGFyYW0gZXdrVmlldyB0aGUgdmlldyBvYmplY3Qg
dG8gZ2V0IHVuaXF1ZSB0YWcKKyAqCisgKiBAcmV0dXJuIHVuaXF1ZSB0YWcgZm9yIHRoZSBnaXZl
biBAYSBld2tWaWV3IG9iamVjdAorICovCit1aW50NjRfdCBvblNwZWxsRG9jdW1lbnRUYWcoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7CisgICAgRVhQRUNUX0VRKGRlZmF1bHRWaWV3LCBl
d2tWaWV3KTsKKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbERvY3VtZW50VGFnID0g
dHJ1ZTsKKworICAgIHJldHVybiBkZWZhdWx0RG9jdW1lbnRUYWc7Cit9CisKKy8qKgorICogVGhl
IHZpZXcgd2hpY2ggaXMgYXNzb2NpYXRlZCB0byB0aGUgQGEgdGFnIGhhcyBiZWVuIGRlc3Ryb3ll
ZC4KKyAqCisgKiBAcGFyYW0gdGFnIHRoZSB0YWcgdG8gYmUgY2xvc2VkCisgKi8KK3ZvaWQgb25T
cGVsbERvY3VtZW50VGFnQ2xvc2UodWludDY0X3QgdGFnKQoreworICAgIEFTU0VSVF9FUShkZWZh
dWx0RG9jdW1lbnRUYWcsIHRhZyk7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxE
b2N1bWVudFRhZ0Nsb3NlID0gdHJ1ZTsKK30KKworLyoqCisgKiBDaGVja3Mgc3BlbGxpbmcgZm9y
IHRoZSBnaXZlbiBAYSB0ZXh0LgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3Rp
ZnkgdGhlIGNsaWVudCBvbiB3aGljaCBvYmplY3QgdGhlIHNwZWxsaW5nIGlzIGJlaW5nIHBlcmZv
cm1lZAorICogQHBhcmFtIHRleHQgdGhlIHRleHQgY29udGFpbmluZyB0aGUgd29yZHMgdG8gc3Bl
bGxjaGVjaworICogQHBhcmFtIG1pc3NwZWxsaW5nX2xvY2F0aW9uIGEgcG9pbnRlciB0byBzdG9y
ZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIC0xIGlmIHRoZSBA
YSB0ZXh0IGlzIGNvcnJlY3QKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19sZW5ndGggYSBwb2ludGVy
IHRvIHN0b3JlIHRoZSBsZW5ndGggb2YgbWlzc3BlbGxlZCBAYSB0ZXh0LCBAYyAwIGlmIHRoZSBA
YSB0ZXh0IGlzIGNvcnJlY3QKKyAqLwordm9pZCBvblNwZWxsaW5nQ2hlY2sodWludDY0X3QgdGFn
LCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90
KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBBU1NFUlRfRVEoZGVmYXVsdERvY3VtZW50VGFn
LCB0YWcpOworICAgIEFTU0VSVF9TVFJFUShleHBlY3RlZE1pc3NwZWxsZWRXb3JkLCB0ZXh0KTsK
KworICAgIEFTU0VSVF9UUlVFKG1pc3NwZWxsaW5nTG9jYXRpb24pOworICAgIEFTU0VSVF9UUlVF
KG1pc3NwZWxsaW5nTGVuZ3RoKTsKKworICAgIC8vIFRoZSBjbGllbnQgaXMgYWJsZSB0byBzaG93
IHRoZSBtaXNzZWxsZWQgdGV4dCB0aHJvdWdoIGl0cyBsb2NhdGlvbiAodGhlIGJlZ2lubmluZyBv
ZiBtaXNzcGVsbGluZykKKyAgICAvLyBhbmQgbGVuZ3RoICh0aGUgZW5kIG9mIG1pc3NwZWxsaW5n
KS4KKyAgICAqbWlzc3BlbGxpbmdMb2NhdGlvbiA9IDA7CisgICAgKm1pc3NwZWxsaW5nTGVuZ3Ro
ID0gc3RybGVuKGV4cGVjdGVkTWlzc3BlbGxlZFdvcmQpOworCisgICAgY2FsbGJhY2tzRXhlY3V0
aW9uU3RhdHMuc3BlbGxpbmdDaGVjayA9IHRydWU7Cit9CisKKy8qKgorICogR2V0cyBhIGxpc3Qg
b2Ygc3VnZ2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVsbGVkIEBhIHdvcmQuCisgKgorICog
QHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVj
dCB0aGUgc3BlbGxpbmcgaXMgYmVpbmcgcGVyZm9ybWVkCisgKiBAcGFyYW0gd29yZCB0aGUgd29y
ZCB0byBnZXQgZ3Vlc3NlcworICogQHJldHVybiBhIGxpc3Qgb2YgZHluYW1pY2FsbHkgYWxsb2Nh
dGVkIHN0cmluZ3MgKGFzIGNoYXIqKSBhbmQKKyAqICAgICAgICAgY2FsbGVyIGlzIHJlc3BvbnNp
YmxlIGZvciBkZXN0cm95aW5nIHRoZW0uCisgKi8KK0VpbmFfTGlzdCogb25Xb3JkR3Vlc3Nlcyh1
aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgRVhQRUNUX0VRKGRlZmF1bHRE
b2N1bWVudFRhZywgdGFnKTsKKyAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVkV29y
ZCwgd29yZCk7CisKKyAgICBFaW5hX0xpc3QqIHN1Z2dlc3Rpb25zRm9yV29yZCA9IDA7CisgICAg
Ly8gRklYTUU6IEZpbGwgdGhlIEVpbmFfTGlzdCB3aXRoIHN1Z2dlc3Rpb25zIGZvciB0aGUgbWlz
c3BlbGxlZCB3b3JkLgorICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLndvcmRHdWVzc2VzID0g
dHJ1ZTsKKworICAgIHJldHVybiBzdWdnZXN0aW9uc0ZvcldvcmQ7Cit9CisKKy8qKgorICogQWRk
cyB0aGUgQGEgd29yZCB0byB0aGUgc3BlbGwgY2hlY2tlciBkaWN0aW9uYXJ5LgorICoKKyAqIEBw
YXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIGNsaWVudCBvbiB3aGljaCBvYmplY3Qg
dGhlIHNwZWxsaW5nIGlzIGJlaW5nIHBlcmZvcm1lZAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQg
dG8gYWRkCisgKi8KK3ZvaWQgb25Xb3JkTGVhcm4odWludDY0X3QgdGFnLCBjb25zdCBjaGFyKiB3
b3JkKQoreworICAgIEFTU0VSVF9FUShkZWZhdWx0RG9jdW1lbnRUYWcsIHRhZyk7CisgICAgQVNT
RVJUX1NUUkVRKGV4cGVjdGVkTWlzc3BlbGxlZFdvcmQsIHdvcmQpOworICAgIGNhbGxiYWNrc0V4
ZWN1dGlvblN0YXRzLndvcmRMZWFybiA9IHRydWU7Cit9CisKKy8qKgorICogVGVsbHMgdGhlIHNw
ZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gQGEgd29yZC4KKyAqCisgKiBAcGFyYW0gdGFn
IHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBjbGllbnQgb24gd2hpY2ggb2JqZWN0IHRoZSBzcGVs
bGluZyBpcyBiZWluZyBwZXJmb3JtZWQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRvIGlnbm9y
ZQorICovCit2b2lkIG9uV29yZElnbm9yZSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIqIHdvcmQp
Cit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1bWVudFRhZywgdGFnKTsKKyAgICBBU1NFUlRf
U1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVkV29yZCwgd29yZCk7CisgICAgY2FsbGJhY2tzRXhlY3V0
aW9uU3RhdHMud29yZElnbm9yZSA9IHRydWU7Cit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRo
ZSBjbGllbnQncyBjYWxsYmFja3MgYXJlbid0IGNhbGxlZCAoaWYgbm90IHNwZWNpZmllZCkuCisg
Ki8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyKQoreworICAgIHJl
c2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKKyAgICBld2tfdGV4dF9jaGVja2VyX3NldHRp
bmdzX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3NldCh0cnVlKTsKKworICAgIGxv
YWRVcmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdfdGVzdC5odG1s
IikuZGF0YSgpKTsKKworICAgIC8vIElmIHVzZXIgZG9lc24ndCBzcGVjaWZ5IGNhbGxiYWNrIGZ1
bmN0aW9ucyByZXNwb25zaWJsZSBmb3Igc3BlbGxpbmcKKyAgICAvLyB0aGUgZGVmYXVsdCBXZWJL
aXQgaW1wbGVtZW50YXRpb24gKGJhc2VkIG9uIHRoZSBFbmNoYW50IGxpYnJhcnkpIHdpbGwgYmUg
dXNlZC4KKyAgICBBU1NFUlRfRkFMU0UoY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1
bWVudFRhZyk7CisgICAgQVNTRVJUX0ZBTFNFKGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxs
RG9jdW1lbnRUYWdDbG9zZSk7CisgICAgQVNTRVJUX0ZBTFNFKGNhbGxiYWNrc0V4ZWN1dGlvblN0
YXRzLnNwZWxsaW5nQ2hlY2spOworCisgICAgLy8gSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHZl
cmlmeSBvdGhlcnMgY2FsbGJhY2tzIChvbldvcmRHdWVzc2VzLAorICAgIC8vIG9uV29yZExlYXJu
LCBvbldvcmRJZ25vcmUpIGFzIHRoZXkgbmVlZCB0aGUgY29udGV4dCBtZW51IGZlYXR1cmUKKyAg
ICAvLyB3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIFdLMi1FRkwuCit9CisKKy8qKgorICog
VGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxsYmFja3MgKG9uU3BlbGxEb2N1bWVudFRhZywg
b25TcGVsbERvY3VtZW50VGFnQ2xvc2UpIGFyZSBjYWxsZWQuCisgKi8KK1RFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWcpCit7
CisgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOworICAgIGRlZmF1bHRWaWV3ID0g
d2ViVmlldygpOworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0dGluZ3NfZW5hYmxlX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfc2V0KHRydWUpOworCisgICAgZXdrX3RleHRfY2hlY2tlcl91bmlx
dWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldF9jYl9zZXQob25TcGVsbERvY3VtZW50VGFnKTsKKyAg
ICBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2VfY2Jfc2V0
KG9uU3BlbGxEb2N1bWVudFRhZ0Nsb3NlKTsKKworICAgIGxvYWRVcmxTeW5jKGVudmlyb25tZW50
LT51cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdfdGVzdC5odG1sIikuZGF0YSgpKTsKKworICAgIC8v
IENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuCisgICAgQVNTRVJUX1RSVUUo
Y2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1bWVudFRhZyk7CisgICAgLy8gSXQncyBu
b3QgcG9zc2libGUgdG8gY2hlY2sgd2hldGhlciBvblNwZWxsRG9jdW1lbnRUYWdDbG9zZSB3YXMg
Y2FsbGVkIGhlcmUsIGJlY2F1c2UKKyAgICAvLyBpdCdzIGludm9rZWQgd2hlbiBXZWJQYWdlIGlz
IGJlaW5nIGRlc3Ryb3llZC4KKyAgICAvLyBJdCBzaG91bGQgYmUgdmVyaWZpZWQgZm9yIGV4YW1w
bGUgd2hlbiB2aWV3IGlzIGZyZWVkLgorfQorCisvKioKKyAqIFRlc3Qgd2hldGhlciB0aGUgY2xp
ZW50J3MgY2FsbGJhY2sgKG9uU3BlbGxpbmdDaGVjaykgaXMgY2FsbGVkIHdoZW4KKyAqIHRoZSB3
b3JkIHRvIGlucHV0IGZpZWxkIHdhcyBwdXQuCisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNl
LCBld2tfdGV4dF9jaGVja2VyX3N0cmluZ19zcGVsbGluZ19jaGVja19jYl9zZXQpCit7CisgICAg
cmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOworICAgIGV3a190ZXh0X2NoZWNrZXJfc2V0
dGluZ3NfZW5hYmxlX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfc2V0KHRydWUpOworCisgICAg
ZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0KG9uU3BlbGxpbmdD
aGVjayk7CisKKyAgICBsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInNw
ZWxsaW5nX3Rlc3QuaHRtbCIpLmRhdGEoKSk7CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBj
YWxsYmFjayB3YXMgY2FsbGVkLgorICAgIEFTU0VSVF9UUlVFKGNhbGxiYWNrc0V4ZWN1dGlvblN0
YXRzLnNwZWxsaW5nQ2hlY2spOworfQorCisvKioKKyAqIFRlc3Qgd2hldGhlciB0aGUgY2xpZW50
J3MgY2FsbGJhY2sgKG9uV29yZEd1ZXNzZXMpIGlzIGNhbGxlZCB3aGVuCisgKiB0aGUgY29udGV4
dCBtZW51IHdhcyBzaG93biBvbiB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICovCitURVNUX0YoRVdL
MlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNfZ2V0X2NiX3NldCkK
K3sKKyAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CisgICAgZXdrX3RleHRfY2hl
Y2tlcl9zZXR0aW5nc19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQodHJ1ZSk7
CisKKyAgICBld2tfdGV4dF9jaGVja2VyX3dvcmRfZ3Vlc3Nlc19nZXRfY2Jfc2V0KG9uV29yZEd1
ZXNzZXMpOworCisgICAgbG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJz
cGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRhKCkpOworCisgICAgLyogRklYTUU6CisgICAgICAgIDEp
IEludm9rZSB0aGUgY29udGV4dCBtZW51IG9uIHRoZSBtaXNzcGVsbGVkIHdvcmQgKG5vdCBpbXBs
ZW1lbnRlZCBmb3IgV0syKSwKKyAgICAgICAgICAgVGhlIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVk
IGZpcnN0LgorICAgICAgICAyKSBGaWxsIHRoZSBzdWdnZXN0aW9uIGxpc3QgaW4gdGhlIG9uV29y
ZEd1ZXNzZXMgY2FsbGJhY2suCisgICAgICAgIDMpIENvbXBhcmUgY29udGV4dCBtZW51IHN1Z2dl
c3Rpb25zIHRvIHRoZSBzdWdnZXN0aW9uIGxpc3QuCisgICAgICAgIDQpIENoZWNrIHdoZXRoZXIg
dGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuCisgICAgKi8KK30KKworLyoqCisgKiBUZXN0IHdoZXRo
ZXIgdGhlIGNsaWVudCdzIGNhbGxiYWNrIChvbldvcmRMZWFybikgaXMgY2FsbGVkIHdoZW4KKyAq
IHRoZSBjb250ZXh0IG1lbnUgb3B0aW9uICJMZWFybiBzcGVsbGluZyIgd2FzIGNob29zZW4uCisg
Ki8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5f
Y2Jfc2V0KQoreworICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKKyAgICBld2tf
dGV4dF9jaGVja2VyX3NldHRpbmdzX2VuYWJsZV9jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX3Nl
dCh0cnVlKTsKKworICAgIGV3a190ZXh0X2NoZWNrZXJfd29yZF9sZWFybl9jYl9zZXQob25Xb3Jk
TGVhcm4pOworCisgICAgbG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJz
cGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRhKCkpOworCisgICAgLyogRklYTUU6CisgICAgICAgIDEp
IEludm9rZSB0aGUgY29udGV4dCBtZW51IG9uIHRoZSBtaXNzcGVsbGVkIHdvcmQgKG5vdCBpbXBs
ZW1lbnRlZCBmb3IgV0syKSwKKyAgICAgICAgICAgVGhlIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVk
IGZpcnN0LgorICAgICAgICAyKSBDaGVjayB3aGV0aGVyIHRoZSBjYWxsYmFjayB3YXMgY2FsbGVk
LgorICAgICovCit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxsYmFj
ayAob25Xb3JkSWdub3JlKSBpcyBjYWxsZWQgd2hlbgorICogdGhlIGNvbnRleHQgbWVudSBvcHRp
b24gIklnbm9yZSBzcGVsbGluZyIgd2FzIGNob29zZW4uCisgKi8KK1RFU1RfRihFV0syVW5pdFRl
c3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldCkKK3sKKyAgICByZXNl
dENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9zZXR0aW5n
c19lbmFibGVfY29udGludW91c19zcGVsbF9jaGVja2luZ19zZXQodHJ1ZSk7CisKKyAgICBld2tf
dGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldChvbldvcmRMZWFybik7CisKKyAgICBsb2Fk
VXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIp
LmRhdGEoKSk7CisKKyAgICAvKiBGSVhNRToKKyAgICAgICAgMSkgSW52b2tlIHRoZSBjb250ZXh0
IG1lbnUgb24gdGhlIG1pc3NwZWxsZWQgd29yZCAobm90IGltcGxlbWVudGVkIGZvciBXSzIpLAor
ICAgICAgICAgICBUaGUgd29yZCBoYXMgdG8gYmUgc2VsZWN0ZWQgZmlyc3QuCisgICAgICAgIDIp
IENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuCisgICAgKi8KK30K
</data>
<flag name="commit-queue"
          id="180794"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168424</attachid>
            <date>2012-10-12 08:34:17 -0700</date>
            <delta_ts>2012-10-15 06:35:14 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>spelling-unit_test.patch</filename>
            <type>text/plain</type>
            <size>22998</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2NzkzYzI5Li4wMDkzZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTItMTAtMTIgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBBZGQgdW5pdCB0ZXN0cyBmb3IgU3BlbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTU2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSB1
bml0IHRlc3RzIHdoaWNoIGNvdmVycyB0aGUgQVBJIGZyb20gZXdrX3RleHRfY2hlY2tlci5oCisg
ICAgICAgIGFuZCB0ZXh0IGNoZWNrZXIgc2V0dGluZ3MgZnJvbSBld2tfc2V0dGluZ3MuaAorCisg
ICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
dGVzdHMvcmVzb3VyY2VzL3NwZWxsaW5nX3Rlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKG9u
VGltZW91dCk6CisgICAgICAgIChvblNldHRpbmdDaGFuZ2UpOgorICAgICAgICAoVEVTVF9GKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2Vy
LmNwcDogQWRkZWQuCisgICAgICAgIChyZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKToKKyAg
ICAgICAgKG9uU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIChvblNwZWxsRG9jdW1lbnRUYWdD
bG9zZSk6CisgICAgICAgIChvblNwZWxsaW5nQ2hlY2spOgorICAgICAgICAob25Xb3JkR3Vlc3Nl
cyk6CisgICAgICAgIChvbldvcmRMZWFybik6CisgICAgICAgIChvbldvcmRJZ25vcmUpOgorICAg
ICAgICAoVEVTVF9GKToKKwogMjAxMi0xMC0xMiAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3ph
amtvd3NraUBzYW1zdW5nLmNvbT4sIE1pY2hhbCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgogCiAg
ICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHNwZWxsY2hlY2tpbmcgZmVhdHVyZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggZThiYTU5OC4uNTc5MGUxYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UKQEAgLTMzNiw2ICszMzYsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwog
ICAgIHRlc3RfZXdrMl9yZWZwdHJfZXZhc19vYmplY3QKICAgICB0ZXN0X2V3azJfaW50ZW50cwog
ICAgIHRlc3RfZXdrMl9zZXR0aW5ncworICAgIHRlc3RfZXdrMl90ZXh0X2NoZWNrZXIKICAgICB0
ZXN0X2V3azJfdmlldwogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL3NwZWxsaW5nX3Rlc3QuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjkzODIwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL3Nw
ZWxsaW5nX3Rlc3QuaHRtbApAQCAtMCwwICsxLDIzIEBACis8IS0tCisgICAgVGhlIHBhZ2UgY29u
dGFpbnMgdGhlIGlucHV0IGZpZWxkIGVsZW1lbnQgd2hpY2ggaXMgZmlsbGVkCisgICAgd2l0aCB0
aGUgbWlzc3BlbGxlZCB3b3JkIHRvIHBlcmZvcm0gc3BlbGxpbmcuCistLT4KKzxIVE1MPgorPEhF
QUQ+CisgICAgPFRJVExFPlRlc3RpbmcgV2ViIFBhZ2UgZm9yIFNwZWxsaW5nPC9USVRMRT4KKyAg
ICA8U0NSSVBUPgorICAgICAgICBmdW5jdGlvbiBzZXRJbnB1dEZpZWxkVmFsdWUoKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBUaGUgaW5wdXQgZmllbGQgaGFzIHRvIGJlIGZvY3VzZWQgYmVm
b3JlIHR5cGluZyB0byBpdC4KKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJp
bnB1dCIpLmZvY3VzKCk7CisKKyAgICAgICAgICAgIC8vICdTcGFjZScgbm90aWZpZXMgV2ViS2l0
IHRoYXQgd29yZCBoYXMgYmVlbiBpbnNlcnRlZC4KKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJpbnB1dCIpLnZhbHVlID0gImFhICI7CisgICAgICAgIH0KKyAgICA8L1NDUklQ
VD4KKzwvSEVBRD4KKworPEJPRFkgb25sb2FkPSJzZXRJbnB1dEZpZWxkVmFsdWUoKSI+Cis8SU5Q
VVQgdHlwZT0idGV4dCIgaWQ9ImlucHV0Ij4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9zZXR0aW5n
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
c2V0dGluZ3MuY3BwCmluZGV4IDMyZjk4MTcuLjFmZmUxZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9zZXR0aW5ncy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3NldHRp
bmdzLmNwcApAQCAtMjgsMTIgKzI4LDUwIEBACiAjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0sy
VW5pdFRlc3RCYXNlLmgiCiAjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RFbnZp
cm9ubWVudC5oIgogI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KICNp
bmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVz
dDsKIAogZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKIAorc3Rh
dGljIGJvb2wgaXNTZXR0aW5nRW5hYmxlZCA9IGZhbHNlOworc3RhdGljIEVjb3JlX1RpbWVyKiB0
aW1lb3V0VGltZXIgPSAwOworc3RhdGljIGRvdWJsZSBkZWZhdWx0VGltZW91dEluU2Vjb25kcyA9
IDAuNTsKKworLyoqCisgKiBIYW5kbGUgdGhlIHRpbWVvdXQsIGl0IG1heSBoYXBwZW4gZm9yIHRo
ZSBhc3luY2hyb25vdXMgdGVzdHMuCisgKgorICogQGludGVybmFsCisgKgorICogQHJldHVybiB0
aGUgRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMIGZsYWcgdG8gZGVsZXRlIHRoZSB0aW1lciBhdXRvbWF0
aWNhbGx5CisgKi8KK3N0YXRpYyBFaW5hX0Jvb2wgb25UaW1lb3V0KHZvaWQqKQoreworICAgIGVj
b3JlX21haW5fbG9vcF9xdWl0KCk7CisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsK
K30KKworLyoqCisgKiBUaGlzIGNhbGxiYWNrIHRlc3RzIHdoZXRoZXIgdGhlIGNsaWVudCdzIGNh
bGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFu
Z2VkLgorICoKKyAqIFZlcmlmeSB0aGUgbmV3IHNldHRpbmcgdmFsdWUgKHBhc3NlcyBpbiB0aGUg
QGEgZmxhZyBwYXJhbWV0ZXIpIGlmIGl0IGVxdWFscyB0byB0aGUgcHJldmlvdXNseSBzZXQuCisg
KgorICogQGludGVybmFsCisgKgorICogQHBhcmFtIGZsYWcgdGhlIG5ldyBzZXR0aW5nIHZhbHVl
CisgKi8KK3N0YXRpYyB2b2lkIG9uU2V0dGluZ0NoYW5nZShFaW5hX0Jvb2wgZmxhZykKK3sKKyAg
ICBFWFBFQ1RfRVEoaXNTZXR0aW5nRW5hYmxlZCwgZmxhZyk7CisKKyAgICBlY29yZV90aW1lcl9k
ZWwodGltZW91dFRpbWVyKTsKKyAgICB0aW1lb3V0VGltZXIgPSAwOworICAgIGVjb3JlX21haW5f
bG9vcF9xdWl0KCk7Cit9CisKIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nf
ZnVsbHNjcmVlbl9lbmFibGVkKQogewogICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBld2tf
dmlld19zZXR0aW5nc19nZXQod2ViVmlldygpKTsKQEAgLTE1NywzICsxOTUsMTk5IEBAIFRFU1Rf
RihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfZG5zX3ByZWZldGNoaW5nX2VuYWJsZWQp
CiAgICAgQVNTRVJUX1RSVUUoZXdrX3NldHRpbmdzX2Ruc19wcmVmZXRjaGluZ19lbmFibGVkX3Nl
dChzZXR0aW5ncywgZmFsc2UpKTsKICAgICBBU1NFUlRfRkFMU0UoZXdrX3NldHRpbmdzX2Ruc19w
cmVmZXRjaGluZ19lbmFibGVkX2dldChzZXR0aW5ncykpOwogfQorCisvKioKKyAqIFRlc3Qgc2V0
dGVyL2dldHRlciBmb3IgdGhlIGNvbnRpbm91cyBzcGVsbCBjaGVja2luZzoKKyAqICAtIGV3a19z
ZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0CisgKiAgLSBld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldAorICovCitURVNU
X0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZCkKK3sKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldCh0cnVlKTsKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBFWFBFQ1Rf
VFJVRShld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgp
KTsKKworICAgIC8vIFdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIGhhcyBiZWVuIGVuYWJsZWQsIHRo
ZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHNldCAoaWYgdGhlIHVzZXIKKyAgICAvLyBkaWRuJ3Qgc2V0
IGFueSkuIFRoZSBsYW5ndWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQg
Zm9yIHRoZW0uCisgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1l
b3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigp
OworCisgICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfZ2V0KCk7CisgICAgLy8gTm8gZGljdGlvbmFyeSBp
cyBhdmFpbGFibGUvaW5zdGFsbGVkLgorICAgIGlmICghbG9hZGVkTGFuZ3VhZ2VzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBFWFBFQ1RfRVEoMSwgZWluYV9saXN0X2NvdW50KGxvYWRlZExhbmd1
YWdlcykpOworCisgICAgdm9pZCogZGF0YTsKKyAgICBFSU5BX0xJU1RfRlJFRShsb2FkZWRMYW5n
dWFnZXMsIGRhdGEpCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihkYXRhKSk7CisjZWxzZQorICAgIEVYUEVDVF9GQUxTRShld2tfc2V0dGluZ3Nf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKTsKKyNlbmRpZgorCisgICAg
ZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoZmFsc2Up
OworICAgIEVYUEVDVF9GQUxTRShld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX2dldCgpKTsKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxiYWNr
IGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0aW5nIGhhcyBiZWVuIGNoYW5n
ZWQuCisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KQoreworICAgIGV3a19zZXR0aW5nc19jb250
aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQob25TZXR0aW5nQ2hhbmdlKTsKKwor
ICAgIGlzU2V0dGluZ0VuYWJsZWQgPSBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19lbmFibGVkX2dldCgpOworICAgIGlzU2V0dGluZ0VuYWJsZWQgPSAhaXNTZXR0aW5nRW5h
YmxlZDsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldChpc1NldHRpbmdFbmFibGVkKTsKKworICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVy
X2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsKKworICAgIC8vIFN0
YXJ0IHByb2NjZXNpbmcgRWNvcmUgZXZlbnRzLCB0aGUgbm90aWZpY2F0aW9uIGFib3V0IHRoZSBj
aGFuZ2Ugb2YgdGhlIHNwZWxsCisgICAgLy8gY2hlY2tpbmcgc2V0dGluZyBpcyBjYWxsZWQgb24g
aWRsZXIuCisgICAgLy8gV2UgY2FuJ3QgY2FsbCBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSBiZWNh
dXNlIGl0IGRvZXNuJ3QgcHJvY2VzcyB0aGUgaWRsZXJzLgorICAgIGVjb3JlX21haW5fbG9vcF9i
ZWdpbigpOworCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgRVhQRUNUX0ZBTFNFKHRpbWVv
dXRUaW1lcik7CisjZWxzZQorICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7CisjZW5kaWYK
KworICAgIC8vIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSBzZXR0aW5n
IG9wdGlvbiBpcyBhbHJlYWR5IHNldC4KKyAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3NldHRp
bmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKKyAgICBld2tfc2V0
dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFi
bGVkKTsKKworICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91
dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsK
KworICAgIC8vIFdoZW4gdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQgdGhlIGNhbGxi
YWNrIHdvbid0IGJlIGNhbGxlZCB0b28uCisgICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsK
KworICAgIC8vIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGlmIHRoZSB1c2VyIGhh
cyBpbnZhbGlkYXRlZCBpdC4KKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19jaGFuZ2VfY2Jfc2V0KDApOworICAgIGlzU2V0dGluZ0VuYWJsZWQgPSBld2tfc2V0dGlu
Z3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpOworICAgIGlzU2V0dGlu
Z0VuYWJsZWQgPSAhaXNTZXR0aW5nRW5hYmxlZDsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKKworICAgIHRp
bWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25U
aW1lb3V0LCAwKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworICAgIC8vIGlmIHRo
ZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLCB0aGUgY2FsbGJhY2sgaXMgbm90IHNldC4K
KyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0VGltZXIpOworfQorCisvKioKKyAqIFRoaXMgdW5pdCB0
ZXN0IHNldHMgYWxsIGF2YWlsYWJsZS9pbnN0YWxsZWQgZGljdGlvbmFyaWVzIGFuZCB2ZXJpZmlp
ZXMgdGhlbQorICogaWYgdGhleSBhcmUgaW4gdXNlLgorICogQWxsIHRoZSBkaWN0aW9uYXJpZXMg
ZnJvbSB0aGUgbGlzdCBjYW4gYmUgc2V0IHRvIHBlcmZvcm0gc3BlbGxjaGVja2luZy4KKyAqLwor
VEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5n
dWFnZXNfZ2V0KQoreworICAgIEVpbmFfTGlzdCogYXZhaWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3Nl
dHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKKyAgICAvLyBObyBkaWN0aW9u
YXJ5IGlzIGF2YWlsYWJsZS9pbnN0YWxsZWQgb3IgdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlz
YWJsZWQuCisgICAgaWYgKCFhdmFpbGFibGVMYW5ndWFnZXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEhlbHBlciB0byBjcmVhdGUgb25lIHN0cmluZyB3aXRoIGNvbW1hIHNlcGFyYXRlZCBs
YW5ndWFnZXMuCisgICAgdm9pZCogYWN0dWFsID0gMDsKKyAgICBXVEY6OlN0cmluZ0J1aWxkZXIg
bGFuZ3VhZ2VzOworICAgIEVpbmFfTGlzdCogbGlzdEl0ZXJhdG9yID0gMDsKKyAgICB1bnNpZ25l
ZCBsYXN0SW5kZXggPSBlaW5hX2xpc3RfY291bnQoYXZhaWxhYmxlTGFuZ3VhZ2VzKSAtIDE7Cisg
ICAgdW5zaWduZWQgaSA9IDA7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0goYXZhaWxhYmxlTGFuZ3Vh
Z2VzLCBsaXN0SXRlcmF0b3IsIGFjdHVhbCkgeworICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKKyAgICAgICAgLy8gQWRkIHRoZSBjb21t
YSBhZnRlciBhbGwgYnV0IHRoZSBsYXN0IGxhbmd1YWdlIElEcy4KKyAgICAgICAgaWYgKGkrKyAh
PSBsYXN0SW5kZXgpCisgICAgICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKCcsJyk7CisgICAgfQor
CisgICAgLy8gU2V0IGFsbCBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgIGV3a19zZXR0aW5nc19z
cGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBMYW5ndWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0
aGUgaWRsZXIsIHdhaXQgZm9yIHRoZW0uCisgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJf
YWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOworICAgIGVjb3JlX21h
aW5fbG9vcF9iZWdpbigpOworCisgICAgLy8gR2V0IHRoZSBsYW5ndWFnZXMgaW4gdXNlLgorICAg
IEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5n
X2xhbmd1YWdlc19lbmFibGVkX2dldCgpOworICAgIEFTU0VSVF9FUShlaW5hX2xpc3RfY291bnQo
bG9hZGVkTGFuZ3VhZ2VzKSwgZWluYV9saXN0X2NvdW50KGF2YWlsYWJsZUxhbmd1YWdlcykpOwor
CisgICAgaSA9IDA7CisgICAgdm9pZCogZXhwZWN0ZWQgPSAwOworICAgIC8vIFZlcmlmeSB3aGV0
aGVyIHRoZSBsb2FkZWQgbGFuZ3VhZ2VzIGxpc3QgaXMgZXF1YWwgdG8gdGhlIGF2YWlsYWJsZSBs
YW5ndWFnZXMgbGlzdC4KKyAgICBFSU5BX0xJU1RfRk9SRUFDSChsb2FkZWRMYW5ndWFnZXMsIGxp
c3RJdGVyYXRvciwgYWN0dWFsKSB7CisgICAgICAgIGV4cGVjdGVkID0gZWluYV9saXN0X250aChh
dmFpbGFibGVMYW5ndWFnZXMsIGkrKyk7CisgICAgICAgIEVYUEVDVF9TVFJFUShzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWN0dWFs
KSk7CisgICAgfQorCisgICAgLy8gRGVsZXRlIHRoZSBsaXN0cy4KKyAgICBFSU5BX0xJU1RfRlJF
RShhdmFpbGFibGVMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOworCisgICAgRUlOQV9MSVNUX0ZS
RUUobG9hZGVkTGFuZ3VhZ2VzLCBhY3R1YWwpCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVs
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKK30KKworLyoqCisgKiBIZXJlIHdl
IHRlc3QgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6CisgKiAgLSBzZXR0aW5nIHRoZSBkZWZhdWx0
IGxhbmd1YWdlLAorICogIC0gaWYgdHdvIGFyYml0cmFyaWx5IHNlbGVjdGVkIGRpY3Rpb25hcmll
cyBhcmUgc2V0IGNvcnJlY3RseS4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19z
ZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZCkKK3sKKyAgICAvLyBTZXQg
dGhlIGRlZmF1bHQgbGFuZ3VhZ2UuCisgICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlc19lbmFibGVkX3NldCgwKTsKKworICAgIC8vIExhbmd1YWdlcyBhcmUgYmVpbmcgbG9h
ZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAgICB0aW1lb3V0VGltZXIgPSBlY29y
ZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CisgICAg
ZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1YWdl
cyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9nZXQoKTsK
KyAgICAvLyBObyBkaWN0aW9uYXJ5IGlzIGF2YWlsYWJsZS9pbnN0YWxsZWQgb3IgdGhlIFNQRUxM
Q0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQuCisgICAgaWYgKCFsb2FkZWRMYW5ndWFnZXMpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVF9FUSgxLCBlaW5hX2xpc3RfY291bnQobG9hZGVkTGFu
Z3VhZ2VzKSk7CisKKyAgICAvLyBEZWxldGUgdGhlIGxpc3QuCisgICAgdm9pZCogYWN0dWFsID0g
MDsKKyAgICBFSU5BX0xJU1RfRlJFRShsb2FkZWRMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAgICAg
ZWluYV9zdHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOwor
CisgICAgLy8gR2V0IHRoZSBmaXJzdCBhbmQgbGFzdCBsYW5ndWFnZSBmcm9tIGluc3RhbGxlZCBk
aWN0aW9uYXJpZXMuCisgICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBld2tfc2V0
dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIHVuc2lnbmVkIG51bWJl
ck9mQXZhaWxhYmxlTGFuZ3VhZ2VzID0gZWluYV9saXN0X2NvdW50KGF2YWlsYWJsZUxhbmd1YWdl
cyk7CisgICAgLy8gV2UgYXNzdW1lIHRoYXQgdXNlciBoYXMgaW5zdGFsbGVkIGF0IGxlc3QgdHdv
IGRpY3Rpb25hcmllcy4KKyAgICBpZiAobnVtYmVyT2ZBdmFpbGFibGVMYW5ndWFnZXMgPCAyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBjaGFyKiBmaXJzdEV4cGVjdGVkID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlzdF9udGgoYXZhaWxhYmxlTGFuZ3VhZ2VzLCAwKSk7
CisgICAgY29uc3QgY2hhciogbGFzdEV4cGVjdGVkID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGVpbmFfbGlzdF9kYXRhX2dldChlaW5hX2xpc3RfbGFzdChhdmFpbGFibGVMYW5ndWFnZXMpKSk7
CisKKyAgICAvLyBDYXNlIHNlbnNpdGl2aXR5IG9mIGRpY3Rpb25hcmllcyBkb2Vzbid0IGFmZmVj
dCBvbiBsb2FkaW5nIHRoZSBkaWN0aW9uYXJpZXMsCisgICAgLy8gdGhlIEVuY2hhbnQgbGlicmFy
eSB3aWxsICdub3JtYWxpemUnIHRoZW0uCisgICAgV1RGOjpTdHJpbmdCdWlsZGVyIGxhbmd1YWdl
czsKKyAgICBsYW5ndWFnZXMuYXBwZW5kKFN0cmluZyhmaXJzdEV4cGVjdGVkKS51cHBlcigpKTsK
KyAgICBsYW5ndWFnZXMuYXBwZW5kKCcsJyk7CisgICAgbGFuZ3VhZ2VzLmFwcGVuZChTdHJpbmco
bGFzdEV4cGVjdGVkKS5sb3dlcigpKTsKKworICAgIC8vIFNldCBib3RoIGxhbmd1YWdlcyAodGhl
IGZpcnN0IGFuZCB0aGUgbGFzdCkgZnJvbSB0aGUgbGlzdC4KKyAgICBld2tfc2V0dGluZ3Nfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0KGxhbmd1YWdlcy50b1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworCisgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1
bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9i
ZWdpbigpOworCisgICAgbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlc19lbmFibGVkX2dldCgpOworICAgIEFTU0VSVF9FUSgyLCBlaW5hX2xpc3Rf
Y291bnQobG9hZGVkTGFuZ3VhZ2VzKSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoZmlyc3RFeHBlY3Rl
ZCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlzdF9udGgobG9hZGVkTGFuZ3VhZ2Vz
LCAwKSkpOworICAgIEVYUEVDVF9TVFJFUShsYXN0RXhwZWN0ZWQsIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihlaW5hX2xpc3RfbnRoKGxvYWRlZExhbmd1YWdlcywgMSkpKTsKKworICAgIC8vIERl
bGV0ZSB0aGUgbGlzdHMuCisgICAgRUlOQV9MSVNUX0ZSRUUoYXZhaWxhYmxlTGFuZ3VhZ2VzLCBh
Y3R1YWwpCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihhY3R1YWwpKTsKKworICAgIEVJTkFfTElTVF9GUkVFKGxvYWRlZExhbmd1YWdlcywgYWN0
dWFsKQorICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oYWN0dWFsKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2IxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVj
a2VyLmNwcApAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcK
KyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAYnJpZWYgY292ZXJzIEFQSSBm
cm9tIGV3a190ZXh0X2NoZWNrZXIuaAorICogQGZpbGUgdGVzdF9ld2syX3RleHRfY2hlY2tlci5j
cHAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxz
L0VXSzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVz
dEVudmlyb25tZW50LmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFaW5hLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5pdFRlc3Q7CisKK2V4dGVybiBFV0syVW5pdFRlc3RF
bnZpcm9ubWVudCogZW52aXJvbm1lbnQ7CisKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0
RG9jdW1lbnRUYWcgPSAxMjM7CitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZE1pc3NwZWxsZWRX
b3JkW10gPSAiYWEiOworc3RhdGljIGNvbnN0IEV2YXNfT2JqZWN0KiBkZWZhdWx0VmlldyA9IDA7
CisKKy8qKgorICogU3RydWN0dXJlIGtlZXBzIGluZm9ybWF0aW9uIHdoaWNoIGNhbGxiYWNrcyB3
ZXJlIGNhbGxlZC4KKyAqIEl0cyB2YWx1ZXMgYXJlIHJlc2V0ZWQgYmVmb3JlIGVhY2ggdGVzdC4K
KyAqLworc3RhdGljIHN0cnVjdCB7CisgICAgYm9vbCBzcGVsbERvY3VtZW50VGFnIDogMTsKKyAg
ICBib29sIHNwZWxsRG9jdW1lbnRUYWdDbG9zZSA6IDE7CisgICAgYm9vbCBzcGVsbGluZ0NoZWNr
IDogMTsKKyAgICBib29sIHdvcmRHdWVzc2VzIDogMTsKKyAgICBib29sIHdvcmRMZWFybiA6IDE7
CisgICAgYm9vbCB3b3JkSWdub3JlIDogMTsKK30gY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHM7CisK
K3N0YXRpYyB2b2lkIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKQoreworICAgIGNhbGxi
YWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsRG9jdW1lbnRUYWcgPSBmYWxzZTsKKyAgICBjYWxsYmFj
a3NFeGVjdXRpb25TdGF0cy5zcGVsbERvY3VtZW50VGFnQ2xvc2UgPSBmYWxzZTsKKyAgICBjYWxs
YmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbGluZ0NoZWNrID0gZmFsc2U7CisgICAgY2FsbGJhY2tz
RXhlY3V0aW9uU3RhdHMud29yZEd1ZXNzZXMgPSBmYWxzZTsKKyAgICBjYWxsYmFja3NFeGVjdXRp
b25TdGF0cy53b3JkTGVhcm4gPSBmYWxzZTsKKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy53
b3JkSWdub3JlID0gZmFsc2U7Cit9CisKKy8qKgorICogUmV0dXJucyB1bmlxdWUgdGFnIChhbiBp
ZGVudGlmaWVyKS4KKyAqCisgKiBJdCB3aWxsIGJlIHVzZWQgZm9yIG9uU3BlbGxpbmdDaGVjaywg
b25Xb3JkR3Vlc3NlcyBldGMuIHRvIG5vdGlmeQorICogdGhlIGNsaWVudCBvbiB3aGljaCBvYmpl
Y3QgKGFzc29zaWF0ZWQgdG8gdGhlIHRhZykgdGhlIHNwZWxsaW5nIGlzIGJlaW5nIGludm9rZWQu
CisgKgorICogQHBhcmFtIGV3a1ZpZXcgdGhlIHZpZXcgb2JqZWN0IHRvIGdldCB1bmlxdWUgdGFn
CisgKgorICogQHJldHVybiB1bmlxdWUgdGFnIGZvciB0aGUgZ2l2ZW4gQGEgZXdrVmlldyBvYmpl
Y3QKKyAqLwordWludDY0X3Qgb25TcGVsbERvY3VtZW50VGFnKGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQoreworICAgIEVYUEVDVF9FUShkZWZhdWx0VmlldywgZXdrVmlldyk7CisgICAgY2Fs
bGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1bWVudFRhZyA9IHRydWU7CisKKyAgICByZXR1
cm4gZGVmYXVsdERvY3VtZW50VGFnOworfQorCisvKioKKyAqIFRoZSB2aWV3IHdoaWNoIGlzIGFz
c29jaWF0ZWQgdG8gdGhlIEBhIHRhZyBoYXMgYmVlbiBkZXN0cm95ZWQuCisgKgorICogQHBhcmFt
IHRhZyB0aGUgdGFnIHRvIGJlIGNsb3NlZAorICovCit2b2lkIG9uU3BlbGxEb2N1bWVudFRhZ0Ns
b3NlKHVpbnQ2NF90IHRhZykKK3sKKyAgICBBU1NFUlRfRVEoZGVmYXVsdERvY3VtZW50VGFnLCB0
YWcpOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsRG9jdW1lbnRUYWdDbG9zZSA9
IHRydWU7Cit9CisKKy8qKgorICogQ2hlY2tzIHNwZWxsaW5nIGZvciB0aGUgZ2l2ZW4gQGEgdGV4
dC4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBjbGllbnQgb24g
d2hpY2ggb2JqZWN0IHRoZSBzcGVsbGluZyBpcyBiZWluZyBwZXJmb3JtZWQKKyAqIEBwYXJhbSB0
ZXh0IHRoZSB0ZXh0IGNvbnRhaW5pbmcgdGhlIHdvcmRzIHRvIHNwZWxsY2hlY2sKKyAqIEBwYXJh
bSBtaXNzcGVsbGluZ19sb2NhdGlvbiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbWlzc3BlbGxlZCBAYSB0ZXh0LCBAYyAtMSBpZiB0aGUgQGEgdGV4dCBpcyBjb3JyZWN0
CisgKiBAcGFyYW0gbWlzc3BlbGxpbmdfbGVuZ3RoIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgbGVu
Z3RoIG9mIG1pc3NwZWxsZWQgQGEgdGV4dCwgQGMgMCBpZiB0aGUgQGEgdGV4dCBpcyBjb3JyZWN0
CisgKi8KK3ZvaWQgb25TcGVsbGluZ0NoZWNrKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciogdGV4
dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5n
dGgpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1bWVudFRhZywgdGFnKTsKKyAgICBBU1NF
UlRfU1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVkV29yZCwgdGV4dCk7CisKKyAgICBBU1NFUlRfVFJV
RShtaXNzcGVsbGluZ0xvY2F0aW9uKTsKKyAgICBBU1NFUlRfVFJVRShtaXNzcGVsbGluZ0xlbmd0
aCk7CisKKyAgICAvLyBUaGUgY2xpZW50IGlzIGFibGUgdG8gc2hvdyB0aGUgbWlzc2VsbGVkIHRl
eHQgdGhyb3VnaCBpdHMgbG9jYXRpb24gKHRoZSBiZWdpbm5pbmcgb2YgbWlzc3BlbGxpbmcpCisg
ICAgLy8gYW5kIGxlbmd0aCAodGhlIGVuZCBvZiBtaXNzcGVsbGluZykuCisgICAgKm1pc3NwZWxs
aW5nTG9jYXRpb24gPSAwOworICAgICptaXNzcGVsbGluZ0xlbmd0aCA9IHN0cmxlbihleHBlY3Rl
ZE1pc3NwZWxsZWRXb3JkKTsKKworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsaW5n
Q2hlY2sgPSB0cnVlOworfQorCisvKioKKyAqIEdldHMgYSBsaXN0IG9mIHN1Z2dlc3RlZCBzcGVs
bGluZ3MgZm9yIGEgbWlzc3BlbGxlZCBAYSB3b3JkLgorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVl
IHRhZyB0byBub3RpZnkgdGhlIGNsaWVudCBvbiB3aGljaCBvYmplY3QgdGhlIHNwZWxsaW5nIGlz
IGJlaW5nIHBlcmZvcm1lZAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8gZ2V0IGd1ZXNzZXMK
KyAqIEByZXR1cm4gYSBsaXN0IG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmdzIChhcyBj
aGFyKikgYW5kCisgKiAgICAgICAgIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVzdHJveWlu
ZyB0aGVtLgorICovCitFaW5hX0xpc3QqIG9uV29yZEd1ZXNzZXModWludDY0X3QgdGFnLCBjb25z
dCBjaGFyKiB3b3JkKQoreworICAgIEVYUEVDVF9FUShkZWZhdWx0RG9jdW1lbnRUYWcsIHRhZyk7
CisgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkTWlzc3BlbGxlZFdvcmQsIHdvcmQpOworCisgICAg
RWluYV9MaXN0KiBzdWdnZXN0aW9uc0ZvcldvcmQgPSAwOworICAgIC8vIEZJWE1FOiBGaWxsIHRo
ZSBFaW5hX0xpc3Qgd2l0aCBzdWdnZXN0aW9ucyBmb3IgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAg
ICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy53b3JkR3Vlc3NlcyA9IHRydWU7CisKKyAgICByZXR1
cm4gc3VnZ2VzdGlvbnNGb3JXb3JkOworfQorCisvKioKKyAqIEFkZHMgdGhlIEBhIHdvcmQgdG8g
dGhlIHNwZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4KKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0
YWcgdG8gbm90aWZ5IHRoZSBjbGllbnQgb24gd2hpY2ggb2JqZWN0IHRoZSBzcGVsbGluZyBpcyBi
ZWluZyBwZXJmb3JtZWQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3JkIHRvIGFkZAorICovCit2b2lk
IG9uV29yZExlYXJuKHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciogd29yZCkKK3sKKyAgICBBU1NF
UlRfRVEoZGVmYXVsdERvY3VtZW50VGFnLCB0YWcpOworICAgIEFTU0VSVF9TVFJFUShleHBlY3Rl
ZE1pc3NwZWxsZWRXb3JkLCB3b3JkKTsKKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy53b3Jk
TGVhcm4gPSB0cnVlOworfQorCisvKioKKyAqIFRlbGxzIHRoZSBzcGVsbCBjaGVja2VyIHRvIGln
bm9yZSBhIGdpdmVuIEBhIHdvcmQuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5v
dGlmeSB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVjdCB0aGUgc3BlbGxpbmcgaXMgYmVpbmcgcGVy
Zm9ybWVkCisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBpZ25vcmUKKyAqLwordm9pZCBvbldv
cmRJZ25vcmUodWludDY0X3QgdGFnLCBjb25zdCBjaGFyKiB3b3JkKQoreworICAgIEFTU0VSVF9F
UShkZWZhdWx0RG9jdW1lbnRUYWcsIHRhZyk7CisgICAgQVNTRVJUX1NUUkVRKGV4cGVjdGVkTWlz
c3BlbGxlZFdvcmQsIHdvcmQpOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLndvcmRJZ25v
cmUgPSB0cnVlOworfQorCisvKioKKyAqIFRlc3Qgd2hldGhlciB0aGUgY2xpZW50J3MgY2FsbGJh
Y2tzIGFyZW4ndCBjYWxsZWQgKGlmIG5vdCBzcGVjaWZpZWQpLgorICovCitURVNUX0YoRVdLMlVu
aXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcikKK3sKKyAgICByZXNldENhbGxiYWNrc0V4ZWN1
dGlvblN0YXRzKCk7CisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZF9zZXQodHJ1ZSk7CisKKyAgICBsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9y
UmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIpLmRhdGEoKSk7CisKKyAgICAvLyBJZiB1c2Vy
IGRvZXNuJ3Qgc3BlY2lmeSBjYWxsYmFjayBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHNwZWxs
aW5nCisgICAgLy8gdGhlIGRlZmF1bHQgV2ViS2l0IGltcGxlbWVudGF0aW9uIChiYXNlZCBvbiB0
aGUgRW5jaGFudCBsaWJyYXJ5KSB3aWxsIGJlIHVzZWQuCisgICAgQVNTRVJUX0ZBTFNFKGNhbGxi
YWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsRG9jdW1lbnRUYWcpOworICAgIEFTU0VSVF9GQUxTRShj
YWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbERvY3VtZW50VGFnQ2xvc2UpOworICAgIEFTU0VS
VF9GQUxTRShjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbGluZ0NoZWNrKTsKKworICAgIC8v
IEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB2ZXJpZnkgb3RoZXJzIGNhbGxiYWNrcyAob25Xb3Jk
R3Vlc3NlcywKKyAgICAvLyBvbldvcmRMZWFybiwgb25Xb3JkSWdub3JlKSBhcyB0aGV5IG5lZWQg
dGhlIGNvbnRleHQgbWVudSBmZWF0dXJlCisgICAgLy8gd2hpY2ggaXMgbm90IGltcGxlbWVudGVk
IGZvciBXSzItRUZMLgorfQorCisvKioKKyAqIFRlc3Qgd2hldGhlciB0aGUgY2xpZW50J3MgY2Fs
bGJhY2tzIChvblNwZWxsRG9jdW1lbnRUYWcsIG9uU3BlbGxEb2N1bWVudFRhZ0Nsb3NlKSBhcmUg
Y2FsbGVkLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl91
bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnKQoreworICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9u
U3RhdHMoKTsKKyAgICBkZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKKyAgICBld2tfc2V0dGluZ3Nf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKworICAgIGV3a190
ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jfc2V0KG9uU3BlbGxE
b2N1bWVudFRhZyk7CisgICAgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRf
dGFnX2Nsb3NlX2NiX3NldChvblNwZWxsRG9jdW1lbnRUYWdDbG9zZSk7CisKKyAgICBsb2FkVXJs
U3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIpLmRh
dGEoKSk7CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkLgor
ICAgIEFTU0VSVF9UUlVFKGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsRG9jdW1lbnRUYWcp
OworICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGNoZWNrIHdoZXRoZXIgb25TcGVsbERvY3Vt
ZW50VGFnQ2xvc2Ugd2FzIGNhbGxlZCBoZXJlLCBiZWNhdXNlCisgICAgLy8gaXQncyBpbnZva2Vk
IHdoZW4gV2ViUGFnZSBpcyBiZWluZyBkZXN0cm95ZWQuCisgICAgLy8gSXQgc2hvdWxkIGJlIHZl
cmlmaWVkIGZvciBleGFtcGxlIHdoZW4gdmlldyBpcyBmcmVlZC4KK30KKworLyoqCisgKiBUZXN0
IHdoZXRoZXIgdGhlIGNsaWVudCdzIGNhbGxiYWNrIChvblNwZWxsaW5nQ2hlY2spIGlzIGNhbGxl
ZCB3aGVuCisgKiB0aGUgd29yZCB0byBpbnB1dCBmaWVsZCB3YXMgcHV0LgorICovCitURVNUX0Yo
RVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tf
Y2Jfc2V0KQoreworICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKKyAgICBkZWZh
dWx0VmlldyA9IHdlYlZpZXcoKTsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9j
aGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKworICAgIGV3a190ZXh0X2NoZWNrZXJfc3RyaW5n
X3NwZWxsaW5nX2NoZWNrX2NiX3NldChvblNwZWxsaW5nQ2hlY2spOworCisgICAgbG9hZFVybFN5
bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRh
KCkpOworCisgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC4KKyAg
ICBBU1NFUlRfVFJVRShjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbGluZ0NoZWNrKTsKK30K
KworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNsaWVudCdzIGNhbGxiYWNrIChvbldvcmRHdWVz
c2VzKSBpcyBjYWxsZWQgd2hlbgorICogdGhlIGNvbnRleHQgbWVudSB3YXMgc2hvd24gb24gdGhl
IG1pc3NwZWxsZWQgd29yZC4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0
X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQpCit7CisgICAgcmVzZXRDYWxsYmFja3NF
eGVjdXRpb25TdGF0cygpOworICAgIGRlZmF1bHRWaWV3ID0gd2ViVmlldygpOworICAgIGV3a19z
ZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworCisg
ICAgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNfZ2V0X2NiX3NldChvbldvcmRHdWVzc2Vz
KTsKKworICAgIGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgic3BlbGxp
bmdfdGVzdC5odG1sIikuZGF0YSgpKTsKKworICAgIC8qIEZJWE1FOgorICAgICAgICAxKSBJbnZv
a2UgdGhlIGNvbnRleHQgbWVudSBvbiB0aGUgbWlzc3BlbGxlZCB3b3JkIChub3QgaW1wbGVtZW50
ZWQgZm9yIFdLMiksCisgICAgICAgICAgIFRoZSB3b3JkIGhhcyB0byBiZSBzZWxlY3RlZCBmaXJz
dC4KKyAgICAgICAgMikgRmlsbCB0aGUgc3VnZ2VzdGlvbiBsaXN0IGluIHRoZSBvbldvcmRHdWVz
c2VzIGNhbGxiYWNrLgorICAgICAgICAzKSBDb21wYXJlIGNvbnRleHQgbWVudSBzdWdnZXN0aW9u
cyB0byB0aGUgc3VnZ2VzdGlvbiBsaXN0LgorICAgICAgICA0KSBDaGVjayB3aGV0aGVyIHRoZSBj
YWxsYmFjayB3YXMgY2FsbGVkLgorICAgICAqLyAKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIg
dGhlIGNsaWVudCdzIGNhbGxiYWNrIChvbldvcmRMZWFybikgaXMgY2FsbGVkIHdoZW4KKyAqIHRo
ZSBjb250ZXh0IG1lbnUgb3B0aW9uICJMZWFybiBzcGVsbGluZyIgd2FzIGNob29zZW4uCisgKi8K
K1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jf
c2V0KQoreworICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKKyAgICBkZWZhdWx0
VmlldyA9IHdlYlZpZXcoKTsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVj
a2luZ19lbmFibGVkX3NldCh0cnVlKTsKKworICAgIGV3a190ZXh0X2NoZWNrZXJfd29yZF9sZWFy
bl9jYl9zZXQob25Xb3JkTGVhcm4pOworCisgICAgbG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPnVy
bEZvclJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRhKCkpOworCisgICAgLyogRklY
TUU6CisgICAgICAgIDEpIEludm9rZSB0aGUgY29udGV4dCBtZW51IG9uIHRoZSBtaXNzcGVsbGVk
IHdvcmQgKG5vdCBpbXBsZW1lbnRlZCBmb3IgV0syKSwKKyAgICAgICAgICAgVGhlIHdvcmQgaGFz
IHRvIGJlIHNlbGVjdGVkIGZpcnN0LgorICAgICAgICAyKSBDaGVjayB3aGV0aGVyIHRoZSBjYWxs
YmFjayB3YXMgY2FsbGVkLgorICAgICovCit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRoZSBj
bGllbnQncyBjYWxsYmFjayAob25Xb3JkSWdub3JlKSBpcyBjYWxsZWQgd2hlbgorICogdGhlIGNv
bnRleHQgbWVudSBvcHRpb24gIklnbm9yZSBzcGVsbGluZyIgd2FzIGNob29zZW4uCisgKi8KK1RF
U1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3Nl
dCkKK3sKKyAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CisgICAgZGVmYXVsdFZp
ZXcgPSB3ZWJWaWV3KCk7CisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisKKyAgICBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3Jl
X2NiX3NldChvbldvcmRMZWFybik7CisKKyAgICBsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJs
Rm9yUmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIpLmRhdGEoKSk7CisKKyAgICAvKiBGSVhN
RToKKyAgICAgICAgMSkgSW52b2tlIHRoZSBjb250ZXh0IG1lbnUgb24gdGhlIG1pc3NwZWxsZWQg
d29yZCAobm90IGltcGxlbWVudGVkIGZvciBXSzIpLAorICAgICAgICAgICBUaGUgd29yZCBoYXMg
dG8gYmUgc2VsZWN0ZWQgZmlyc3QuCisgICAgICAgIDIpIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxi
YWNrIHdhcyBjYWxsZWQuCisgICAgKi8KK30K
</data>
<flag name="commit-queue"
          id="181392"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168702</attachid>
            <date>2012-10-15 06:35:14 -0700</date>
            <delta_ts>2012-10-16 01:54:27 -0700</delta_ts>
            <desc>apply Christophe&apos;s suggestions</desc>
            <filename>spelling-implementation-wk2-efl.patch</filename>
            <type>text/plain</type>
            <size>22044</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkNDBhYWIyLi43NWMzMTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTItMTAtMTUgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBBZGQgdW5pdCB0ZXN0cyBmb3IgU3BlbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTU2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSB1
bml0IHRlc3RzIHdoaWNoIGNvdmVycyBBUEkgZnJvbSBld2tfdGV4dF9jaGVja2VyLmgKKyAgICAg
ICAgYW5kIHRleHQgY2hlY2tlciBzZXR0aW5ncyBmcm9tIGV3a19zZXR0aW5ncy5oCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChyZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKToKKyAgICAgICAgKG9uVGltZW91dCk6
CisgICAgICAgIChvblNldHRpbmdDaGFuZ2UpOgorICAgICAgICAob25TcGVsbERvY3VtZW50VGFn
KToKKyAgICAgICAgKG9uU3BlbGxEb2N1bWVudFRhZ0Nsb3NlKToKKyAgICAgICAgKG9uU3BlbGxp
bmdDaGVjayk6CisgICAgICAgIChvbldvcmRHdWVzc2VzKToKKyAgICAgICAgKG9uV29yZExlYXJu
KToKKyAgICAgICAgKG9uV29yZElnbm9yZSk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTEw
LTE1ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWlj
aGFsIFJvaiA8bS5yb2pAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgSW1wbGVtZW50YXRpb24gb2Yg
c3BlbGxjaGVja2luZyBmZWF0dXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBlOGJh
NTk4Li41NzkwZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMzM2LDYgKzMzNiw3
IEBAIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX3JlZnB0cl9ldmFz
X29iamVjdAogICAgIHRlc3RfZXdrMl9pbnRlbnRzCiAgICAgdGVzdF9ld2syX3NldHRpbmdzCisg
ICAgdGVzdF9ld2syX3RleHRfY2hlY2tlcgogICAgIHRlc3RfZXdrMl92aWV3CiApCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy9z
cGVsbGluZ190ZXN0Lmh0bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJmOTM4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sCkBAIC0wLDAg
KzEsMjMgQEAKKzwhLS0KKyAgICBUaGUgcGFnZSBjb250YWlucyB0aGUgaW5wdXQgZmllbGQgZWxl
bWVudCB3aGljaCBpcyBmaWxsZWQKKyAgICB3aXRoIHRoZSBtaXNzcGVsbGVkIHdvcmQgdG8gcGVy
Zm9ybSBzcGVsbGluZy4KKy0tPgorPEhUTUw+Cis8SEVBRD4KKyAgICA8VElUTEU+VGVzdGluZyBX
ZWIgUGFnZSBmb3IgU3BlbGxpbmc8L1RJVExFPgorICAgIDxTQ1JJUFQ+CisgICAgICAgIGZ1bmN0
aW9uIHNldElucHV0RmllbGRWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBp
bnB1dCBmaWVsZCBoYXMgdG8gYmUgZm9jdXNlZCBiZWZvcmUgdHlwaW5nIHRvIGl0LgorICAgICAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucHV0IikuZm9jdXMoKTsKKworICAgICAg
ICAgICAgLy8gJ1NwYWNlJyBub3RpZmllcyBXZWJLaXQgdGhhdCB3b3JkIGhhcyBiZWVuIGluc2Vy
dGVkLgorICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucHV0IikudmFsdWUg
PSAiYWEgIjsKKyAgICAgICAgfQorICAgIDwvU0NSSVBUPgorPC9IRUFEPgorCis8Qk9EWSBvbmxv
YWQ9InNldElucHV0RmllbGRWYWx1ZSgpIj4KKzxJTlBVVCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXQi
PgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjNmOTI2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRf
Y2hlY2tlci5jcHAKQEAgLTAsMCArMSw1MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGJyaWVmIGNvdmVycyBB
UEkgZnJvbSBld2tfdGV4dF9jaGVja2VyLmgKKyAqIEBmaWxlIHRlc3RfZXdrMl90ZXh0X2NoZWNr
ZXIuY3BwCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RV
dGlscy9FV0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5p
dFRlc3RFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNv
cmUuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVX
SzJVbml0VGVzdDsKKworZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVu
dDsKKworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHREb2N1bWVudFRhZyA9IDEyMzsKK3N0
YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkTWlzc3BlbGxlZFdvcmRbXSA9ICJhYSI7CitzdGF0aWMg
Y29uc3QgRXZhc19PYmplY3QqIGRlZmF1bHRWaWV3ID0gMDsKK3N0YXRpYyBib29sIGlzU2V0dGlu
Z0VuYWJsZWQgPSBmYWxzZTsKK3N0YXRpYyBFY29yZV9UaW1lciogdGltZW91dFRpbWVyID0gMDsK
K3N0YXRpYyBkb3VibGUgZGVmYXVsdFRpbWVvdXRJblNlY29uZHMgPSAwLjU7CisKKy8qKgorICog
U3RydWN0dXJlIGtlZXBzIGluZm9ybWF0aW9uIHdoaWNoIGNhbGxiYWNrcyB3ZXJlIGNhbGxlZC4K
KyAqIEl0cyB2YWx1ZXMgYXJlIHJlc2V0IGJlZm9yZSBlYWNoIHRlc3QuCisgKi8KK3N0YXRpYyBz
dHJ1Y3QgeworICAgIGJvb2wgc3BlbGxEb2N1bWVudFRhZyA6IDE7CisgICAgYm9vbCBzcGVsbERv
Y3VtZW50VGFnQ2xvc2UgOiAxOworICAgIGJvb2wgc3BlbGxpbmdDaGVjayA6IDE7CisgICAgYm9v
bCB3b3JkR3Vlc3NlcyA6IDE7CisgICAgYm9vbCB3b3JkTGVhcm4gOiAxOworICAgIGJvb2wgd29y
ZElnbm9yZSA6IDE7Cit9IGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzOworCitzdGF0aWMgdm9pZCBy
ZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCkKK3sKKyAgICBjYWxsYmFja3NFeGVjdXRpb25T
dGF0cy5zcGVsbERvY3VtZW50VGFnID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3Rh
dHMuc3BlbGxEb2N1bWVudFRhZ0Nsb3NlID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9u
U3RhdHMuc3BlbGxpbmdDaGVjayA9IGZhbHNlOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRz
LndvcmRHdWVzc2VzID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZExl
YXJuID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZElnbm9yZSA9IGZh
bHNlOworfQorCisvKioKKyAqIEhhbmRsZSB0aGUgdGltZW91dCwgaXQgbWF5IGhhcHBlbiBmb3Ig
dGhlIGFzeW5jaHJvbm91cyB0ZXN0cy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcmV0dXJu
IHRoZSBFQ09SRV9DQUxMQkFDS19DQU5DRUwgZmxhZyB0byBkZWxldGUgdGhlIHRpbWVyIGF1dG9t
YXRpY2FsbHkKKyAqLworc3RhdGljIEVpbmFfQm9vbCBvblRpbWVvdXQodm9pZCopCit7CisgICAg
ZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VM
OworfQorCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgdGVzdHMgd2hldGhlciB0aGUgY2xpZW50J3Mg
Y2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNo
YW5nZWQuCisgKgorICogVmVyaWZ5IHRoZSBuZXcgc2V0dGluZyB2YWx1ZSAocGFzc2VzIGluIHRo
ZSBAYSBmbGFnIHBhcmFtZXRlcikgaWYgaXQgZXF1YWxzIHRvIHRoZSBwcmV2aW91c2x5IHNldC4K
KyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcGFyYW0gZmxhZyB0aGUgbmV3IHNldHRpbmcgdmFs
dWUKKyAqLworc3RhdGljIHZvaWQgb25TZXR0aW5nQ2hhbmdlKEVpbmFfQm9vbCBmbGFnKQorewor
ICAgIEVYUEVDVF9FUShpc1NldHRpbmdFbmFibGVkLCBmbGFnKTsKKworICAgIGVjb3JlX3RpbWVy
X2RlbCh0aW1lb3V0VGltZXIpOworICAgIHRpbWVvdXRUaW1lciA9IDA7CisgICAgZWNvcmVfbWFp
bl9sb29wX3F1aXQoKTsKK30KKworLyoqCisgKiBSZXR1cm5zIHVuaXF1ZSB0YWcgKGFuIGlkZW50
aWZpZXIpLgorICoKKyAqIEl0IHdpbGwgYmUgdXNlZCBmb3Igb25TcGVsbGluZ0NoZWNrLCBvbldv
cmRHdWVzc2VzIGV0Yy4gdG8gbm90aWZ5CisgKiB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVjdCAo
YXNzb2NpYXRlZCB0byB0aGUgdGFnKSB0aGUgc3BlbGxpbmcgaXMgYmVpbmcgaW52b2tlZC4KKyAq
CisgKiBAcGFyYW0gZXdrVmlldyB0aGUgdmlldyBvYmplY3QgdG8gZ2V0IHVuaXF1ZSB0YWcKKyAq
CisgKiBAcmV0dXJuIHVuaXF1ZSB0YWcgZm9yIHRoZSBnaXZlbiBAYSBld2tWaWV3IG9iamVjdAor
ICovCitzdGF0aWMgdWludDY0X3Qgb25TcGVsbERvY3VtZW50VGFnKGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQoreworICAgIEVYUEVDVF9FUShkZWZhdWx0VmlldywgZXdrVmlldyk7CisgICAg
Y2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1bWVudFRhZyA9IHRydWU7CisKKyAgICBy
ZXR1cm4gZGVmYXVsdERvY3VtZW50VGFnOworfQorCisvKioKKyAqIFRoZSB2aWV3IHdoaWNoIGlz
IGFzc29jaWF0ZWQgdG8gdGhlIEBhIHRhZyBoYXMgYmVlbiBkZXN0cm95ZWQuCisgKgorICogQHBh
cmFtIHRhZyB0aGUgdGFnIHRvIGJlIGNsb3NlZAorICovCitzdGF0aWMgdm9pZCBvblNwZWxsRG9j
dW1lbnRUYWdDbG9zZSh1aW50NjRfdCB0YWcpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1
bWVudFRhZywgdGFnKTsKKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbERvY3VtZW50
VGFnQ2xvc2UgPSB0cnVlOworfQorCisvKioKKyAqIENoZWNrcyBzcGVsbGluZyBmb3IgdGhlIGdp
dmVuIEBhIHRleHQuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUg
Y2xpZW50IG9uIHdoaWNoIG9iamVjdCB0aGUgc3BlbGxpbmcgaXMgYmVpbmcgcGVyZm9ybWVkCisg
KiBAcGFyYW0gdGV4dCB0aGUgdGV4dCBjb250YWluaW5nIHRoZSB3b3JkcyB0byBzcGVsbGNoZWNr
CisgKiBAcGFyYW0gbWlzc3BlbGxpbmdfbG9jYXRpb24gYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIG1pc3NwZWxsZWQgQGEgdGV4dCwgQGMgLTEgaWYgdGhlIEBhIHRleHQg
aXMgY29ycmVjdAorICogQHBhcmFtIG1pc3NwZWxsaW5nX2xlbmd0aCBhIHBvaW50ZXIgdG8gc3Rv
cmUgdGhlIGxlbmd0aCBvZiBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIDAgaWYgdGhlIEBhIHRleHQg
aXMgY29ycmVjdAorICovCitzdGF0aWMgdm9pZCBvblNwZWxsaW5nQ2hlY2sodWludDY0X3QgdGFn
LCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90
KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBBU1NFUlRfRVEoZGVmYXVsdERvY3VtZW50VGFn
LCB0YWcpOworICAgIEFTU0VSVF9TVFJFUShleHBlY3RlZE1pc3NwZWxsZWRXb3JkLCB0ZXh0KTsK
KworICAgIEFTU0VSVF9UUlVFKG1pc3NwZWxsaW5nTG9jYXRpb24pOworICAgIEFTU0VSVF9UUlVF
KG1pc3NwZWxsaW5nTGVuZ3RoKTsKKworICAgIC8vIFRoZSBjbGllbnQgaXMgYWJsZSB0byBzaG93
IHRoZSBtaXNzZWxsZWQgdGV4dCB0aHJvdWdoIGl0cyBsb2NhdGlvbiAodGhlIGJlZ2lubmluZyBv
ZiBtaXNzcGVsbGluZykKKyAgICAvLyBhbmQgbGVuZ3RoICh0aGUgZW5kIG9mIG1pc3NwZWxsaW5n
KS4KKyAgICAqbWlzc3BlbGxpbmdMb2NhdGlvbiA9IDA7CisgICAgKm1pc3NwZWxsaW5nTGVuZ3Ro
ID0gc3RybGVuKGV4cGVjdGVkTWlzc3BlbGxlZFdvcmQpOworCisgICAgY2FsbGJhY2tzRXhlY3V0
aW9uU3RhdHMuc3BlbGxpbmdDaGVjayA9IHRydWU7Cit9CisKKy8qKgorICogR2V0cyBhIGxpc3Qg
b2Ygc3VnZ2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVsbGVkIEBhIHdvcmQuCisgKgorICog
QHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVj
dCB0aGUgc3BlbGxpbmcgaXMgYmVpbmcgcGVyZm9ybWVkCisgKiBAcGFyYW0gd29yZCB0aGUgd29y
ZCB0byBnZXQgZ3Vlc3NlcworICogQHJldHVybiBhIGxpc3Qgb2YgZHluYW1pY2FsbHkgYWxsb2Nh
dGVkIHN0cmluZ3MgKGFzIGNoYXIqKSBhbmQKKyAqICAgICAgICAgY2FsbGVyIGlzIHJlc3BvbnNp
YmxlIGZvciBkZXN0cm95aW5nIHRoZW0uCisgKi8KK3N0YXRpYyBFaW5hX0xpc3QqIG9uV29yZEd1
ZXNzZXModWludDY0X3QgdGFnLCBjb25zdCBjaGFyKiB3b3JkKQoreworICAgIEVYUEVDVF9FUShk
ZWZhdWx0RG9jdW1lbnRUYWcsIHRhZyk7CisgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkTWlzc3Bl
bGxlZFdvcmQsIHdvcmQpOworCisgICAgRWluYV9MaXN0KiBzdWdnZXN0aW9uc0ZvcldvcmQgPSAw
OworICAgIC8vIEZJWE1FOiBGaWxsIHRoZSBFaW5hX0xpc3Qgd2l0aCBzdWdnZXN0aW9ucyBmb3Ig
dGhlIG1pc3NwZWxsZWQgd29yZC4KKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy53b3JkR3Vl
c3NlcyA9IHRydWU7CisKKyAgICByZXR1cm4gc3VnZ2VzdGlvbnNGb3JXb3JkOworfQorCisvKioK
KyAqIEFkZHMgdGhlIEBhIHdvcmQgdG8gdGhlIHNwZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4KKyAq
CisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBjbGllbnQgb24gd2hpY2gg
b2JqZWN0IHRoZSBzcGVsbGluZyBpcyBiZWluZyBwZXJmb3JtZWQKKyAqIEBwYXJhbSB3b3JkIHRo
ZSB3b3JkIHRvIGFkZAorICovCitzdGF0aWMgdm9pZCBvbldvcmRMZWFybih1aW50NjRfdCB0YWcs
IGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1bWVudFRhZywg
dGFnKTsKKyAgICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVkV29yZCwgd29yZCk7Cisg
ICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZExlYXJuID0gdHJ1ZTsKK30KKworLyoqCisg
KiBUZWxscyB0aGUgc3BlbGwgY2hlY2tlciB0byBpZ25vcmUgYSBnaXZlbiBAYSB3b3JkLgorICoK
KyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIGNsaWVudCBvbiB3aGljaCBv
YmplY3QgdGhlIHNwZWxsaW5nIGlzIGJlaW5nIHBlcmZvcm1lZAorICogQHBhcmFtIHdvcmQgdGhl
IHdvcmQgdG8gaWdub3JlCisgKi8KK3N0YXRpYyB2b2lkIG9uV29yZElnbm9yZSh1aW50NjRfdCB0
YWcsIGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1bWVudFRh
ZywgdGFnKTsKKyAgICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVkV29yZCwgd29yZCk7
CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZElnbm9yZSA9IHRydWU7Cit9CisKKy8q
KgorICogVGVzdCBzZXR0ZXIvZ2V0dGVyIGZvciB0aGUgY29udGlub3VzIHNwZWxsIGNoZWNraW5n
OgorICogIC0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9n
ZXQKKyAqICAtIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
c2V0CisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkKQoreworICAgIGV3a19zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIEVYUEVDVF9UUlVFKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfZ2V0KCkpOworCisgICAgLy8gV2hlbiB0aGUgc3BlbGwgY2hlY2tpbmcgaGFzIGJl
ZW4gZW5hYmxlZCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgc2V0IChpZiB0aGUgdXNlcgorICAg
IC8vIGRpZG4ndCBzZXQgYW55KS4gVGhlIGxhbmd1YWdlcyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRo
ZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9h
ZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CisgICAgZWNvcmVfbWFp
bl9sb29wX2JlZ2luKCk7CisKKyAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a19z
ZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9nZXQoKTsKKyAgICAvLyBO
byBkaWN0aW9uYXJ5IGlzIGF2YWlsYWJsZS9pbnN0YWxsZWQuCisgICAgaWYgKCFsb2FkZWRMYW5n
dWFnZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEVYUEVDVF9FUSgxLCBlaW5hX2xpc3RfY291
bnQobG9hZGVkTGFuZ3VhZ2VzKSk7CisKKyAgICB2b2lkKiBkYXRhOworICAgIEVJTkFfTElTVF9G
UkVFKGxvYWRlZExhbmd1YWdlcywgZGF0YSkKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpKTsKKyNlbHNlCisgICAgRVhQRUNUX0ZBTFNF
KGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOwor
I2VuZGlmCisKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFi
bGVkX3NldChmYWxzZSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3a19zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOworfQorCisvKioKKyAqIFRlc3Qgd2hldGhl
ciB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIHNldHRpbmcg
aGFzIGJlZW4gY2hhbmdlZC4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0
aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpCit7CisgICAgZXdr
X3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChvblNldHRp
bmdDaGFuZ2UpOworCisgICAgaXNTZXR0aW5nRW5hYmxlZCA9IGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7CisgICAgaXNTZXR0aW5nRW5hYmxlZCA9
ICFpc1NldHRpbmdFbmFibGVkOworICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfc2V0KGlzU2V0dGluZ0VuYWJsZWQpOworCisgICAgdGltZW91dFRpbWVy
ID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDAp
OworCisgICAgLy8gU3RhcnQgcHJvY2Nlc2luZyBFY29yZSBldmVudHMsIHRoZSBub3RpZmljYXRp
b24gYWJvdXQgdGhlIGNoYW5nZSBvZiB0aGUgc3BlbGwKKyAgICAvLyBjaGVja2luZyBzZXR0aW5n
IGlzIGNhbGxlZCBvbiBpZGxlci4KKyAgICAvLyBXZSBjYW4ndCBjYWxsIGVjb3JlX21haW5fbG9v
cF9pdGVyYXRlIGJlY2F1c2UgaXQgZG9lc24ndCBwcm9jZXNzIHRoZSBpZGxlcnMuCisgICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBFWFBF
Q1RfRkFMU0UodGltZW91dFRpbWVyKTsKKyNlbHNlCisgICAgRVhQRUNUX1RSVUUodGltZW91dFRp
bWVyKTsKKyNlbmRpZgorCisgICAgLy8gVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQg
aWYgdGhlIHNldHRpbmcgb3B0aW9uIGlzIGFscmVhZHkgc2V0LgorICAgIGlzU2V0dGluZ0VuYWJs
ZWQgPSBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgp
OworICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0
KGlzU2V0dGluZ0VuYWJsZWQpOworCisgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRk
KGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOworICAgIGVjb3JlX21haW5f
bG9vcF9iZWdpbigpOworCisgICAgLy8gV2hlbiB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNh
YmxlZCB0aGUgY2FsbGJhY2sgd29uJ3QgYmUgY2FsbGVkIHRvby4KKyAgICBFWFBFQ1RfVFJVRSh0
aW1lb3V0VGltZXIpOworCisgICAgLy8gVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQg
aWYgdGhlIHVzZXIgaGFzIGludmFsaWRhdGVkIGl0LgorICAgIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoMCk7CisgICAgaXNTZXR0aW5nRW5hYmxl
ZCA9IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7
CisgICAgaXNTZXR0aW5nRW5hYmxlZCA9ICFpc1NldHRpbmdFbmFibGVkOworICAgIGV3a19zZXR0
aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGlzU2V0dGluZ0VuYWJs
ZWQpOworCisgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0
SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwor
CisgICAgLy8gaWYgdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQsIHRoZSBjYWxsYmFj
ayBpcyBub3Qgc2V0LgorICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7Cit9CisKKy8qKgor
ICogVGhpcyB1bml0IHRlc3Qgc2V0cyBhbGwgYXZhaWxhYmxlL2luc3RhbGxlZCBkaWN0aW9uYXJp
ZXMgYW5kIHZlcmlmaWllcyB0aGVtCisgKiBpZiB0aGV5IGFyZSBpbiB1c2UuCisgKiBBbGwgdGhl
IGRpY3Rpb25hcmllcyBmcm9tIHRoZSBsaXN0IGNhbiBiZSBzZXQgdG8gcGVyZm9ybSBzcGVsbGNo
ZWNraW5nLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlc19nZXQpCit7CisgICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5n
dWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAg
IC8vIE5vIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlL2luc3RhbGxlZCBvciB0aGUgU1BFTExDSEVD
SyBtYWNybyBpcyBkaXNhYmxlZC4KKyAgICBpZiAoIWF2YWlsYWJsZUxhbmd1YWdlcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gSGVscGVyIHRvIGNyZWF0ZSBvbmUgc3RyaW5nIHdpdGggY29t
bWEgc2VwYXJhdGVkIGxhbmd1YWdlcy4KKyAgICB2b2lkKiBhY3R1YWwgPSAwOworICAgIFdURjo6
U3RyaW5nQnVpbGRlciBsYW5ndWFnZXM7CisgICAgRWluYV9MaXN0KiBsaXN0SXRlcmF0b3IgPSAw
OworICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IGVpbmFfbGlzdF9jb3VudChhdmFpbGFibGVMYW5n
dWFnZXMpIC0gMTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSChh
dmFpbGFibGVMYW5ndWFnZXMsIGxpc3RJdGVyYXRvciwgYWN0dWFsKSB7CisgICAgICAgIGxhbmd1
YWdlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOworICAgICAgICAv
LyBBZGQgdGhlIGNvbW1hIGFmdGVyIGFsbCBidXQgdGhlIGxhc3QgbGFuZ3VhZ2UgSURzLgorICAg
ICAgICBpZiAoaSsrICE9IGxhc3RJbmRleCkKKyAgICAgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQo
JywnKTsKKyAgICB9CisKKyAgICAvLyBTZXQgYWxsIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisgICAg
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19lbmFibGVkX3NldChsYW5ndWFn
ZXMudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIExhbmd1YWdlcyBhcmUgYmVp
bmcgbG9hZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAgICB0aW1lb3V0VGltZXIg
PSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7
CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICAvLyBHZXQgdGhlIGxhbmd1YWdl
cyBpbiB1c2UuCisgICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfZ2V0KCk7CisgICAgQVNTRVJUX0VRKGVp
bmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpLCBlaW5hX2xpc3RfY291bnQoYXZhaWxhYmxl
TGFuZ3VhZ2VzKSk7CisKKyAgICBpID0gMDsKKyAgICB2b2lkKiBleHBlY3RlZCA9IDA7CisgICAg
Ly8gVmVyaWZ5IHdoZXRoZXIgdGhlIGxvYWRlZCBsYW5ndWFnZXMgbGlzdCBpcyBlcXVhbCB0byB0
aGUgYXZhaWxhYmxlIGxhbmd1YWdlcyBsaXN0LgorICAgIEVJTkFfTElTVF9GT1JFQUNIKGxvYWRl
ZExhbmd1YWdlcywgbGlzdEl0ZXJhdG9yLCBhY3R1YWwpIHsKKyAgICAgICAgZXhwZWN0ZWQgPSBl
aW5hX2xpc3RfbnRoKGF2YWlsYWJsZUxhbmd1YWdlcywgaSsrKTsKKyAgICAgICAgRVhQRUNUX1NU
UkVRKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihleHBlY3RlZCksIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihhY3R1YWwpKTsKKyAgICB9CisKKyAgICAvLyBEZWxldGUgdGhlIGxpc3RzLgorICAg
IEVJTkFfTElTVF9GUkVFKGF2YWlsYWJsZUxhbmd1YWdlcywgYWN0dWFsKQorICAgICAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWN0dWFsKSk7CisKKyAg
ICBFSU5BX0xJU1RfRlJFRShsb2FkZWRMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAgICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOworfQorCisv
KioKKyAqIEhlcmUgd2UgdGVzdCB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczoKKyAqICAtIHNldHRp
bmcgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UsCisgKiAgLSBpZiB0d28gYXJiaXRyYXJpbHkgc2VsZWN0
ZWQgZGljdGlvbmFyaWVzIGFyZSBzZXQgY29ycmVjdGx5LgorICovCitURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19lbmFibGVkKQor
eworICAgIC8vIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZS4KKyAgICBld2tfc2V0dGluZ3Nfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0KDApOworCisgICAgLy8gTGFuZ3VhZ2Vz
IGFyZSBiZWluZyBsb2FkZWQgb24gdGhlIGlkbGVyLCB3YWl0IGZvciB0aGVtLgorICAgIHRpbWVv
dXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1l
b3V0LCAwKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworICAgIEVpbmFfTGlzdCog
bG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19l
bmFibGVkX2dldCgpOworICAgIC8vIE5vIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlL2luc3RhbGxl
ZCBvciB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZC4KKyAgICBpZiAoIWxvYWRlZExh
bmd1YWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX0VRKDEsIGVpbmFfbGlzdF9j
b3VudChsb2FkZWRMYW5ndWFnZXMpKTsKKworICAgIC8vIERlbGV0ZSB0aGUgbGlzdC4KKyAgICB2
b2lkKiBhY3R1YWwgPSAwOworICAgIEVJTkFfTElTVF9GUkVFKGxvYWRlZExhbmd1YWdlcywgYWN0
dWFsKQorICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oYWN0dWFsKSk7CisKKyAgICAvLyBHZXQgdGhlIGZpcnN0IGFuZCBsYXN0IGxhbmd1YWdlIGZy
b20gaW5zdGFsbGVkIGRpY3Rpb25hcmllcy4KKyAgICBFaW5hX0xpc3QqIGF2YWlsYWJsZUxhbmd1
YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CisgICAg
dW5zaWduZWQgbnVtYmVyT2ZBdmFpbGFibGVMYW5ndWFnZXMgPSBlaW5hX2xpc3RfY291bnQoYXZh
aWxhYmxlTGFuZ3VhZ2VzKTsKKyAgICAvLyBXZSBhc3N1bWUgdGhhdCB1c2VyIGhhcyBpbnN0YWxs
ZWQgYXQgbGVzdCB0d28gZGljdGlvbmFyaWVzLgorICAgIGlmIChudW1iZXJPZkF2YWlsYWJsZUxh
bmd1YWdlcyA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNoYXIqIGZpcnN0RXhw
ZWN0ZWQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZWluYV9saXN0X250aChhdmFpbGFibGVM
YW5ndWFnZXMsIDApKTsKKyAgICBjb25zdCBjaGFyKiBsYXN0RXhwZWN0ZWQgPSBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oZWluYV9saXN0X2RhdGFfZ2V0KGVpbmFfbGlzdF9sYXN0KGF2YWlsYWJs
ZUxhbmd1YWdlcykpKTsKKworICAgIC8vIENhc2Ugc2Vuc2l0aXZpdHkgb2YgZGljdGlvbmFyaWVz
IGRvZXNuJ3QgYWZmZWN0IG9uIGxvYWRpbmcgdGhlIGRpY3Rpb25hcmllcywKKyAgICAvLyB0aGUg
RW5jaGFudCBsaWJyYXJ5IHdpbGwgJ25vcm1hbGl6ZScgdGhlbS4KKyAgICBXVEY6OlN0cmluZ0J1
aWxkZXIgbGFuZ3VhZ2VzOworICAgIGxhbmd1YWdlcy5hcHBlbmQoU3RyaW5nKGZpcnN0RXhwZWN0
ZWQpLnVwcGVyKCkpOworICAgIGxhbmd1YWdlcy5hcHBlbmQoJywnKTsKKyAgICBsYW5ndWFnZXMu
YXBwZW5kKFN0cmluZyhsYXN0RXhwZWN0ZWQpLmxvd2VyKCkpOworCisgICAgLy8gU2V0IGJvdGgg
bGFuZ3VhZ2VzICh0aGUgZmlyc3QgYW5kIHRoZSBsYXN0KSBmcm9tIHRoZSBsaXN0LgorICAgIGV3
a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9zZXQobGFuZ3VhZ2Vz
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90
aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CisgICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGlu
Z3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfZ2V0KCk7CisgICAgQVNTRVJUX0VR
KDIsIGVpbmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpKTsKKworICAgIEVYUEVDVF9TVFJF
UShmaXJzdEV4cGVjdGVkLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZWluYV9saXN0X250aChs
b2FkZWRMYW5ndWFnZXMsIDApKSk7CisgICAgRVhQRUNUX1NUUkVRKGxhc3RFeHBlY3RlZCwgc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlzdF9udGgobG9hZGVkTGFuZ3VhZ2VzLCAxKSkp
OworCisgICAgLy8gRGVsZXRlIHRoZSBsaXN0cy4KKyAgICBFSU5BX0xJU1RfRlJFRShhdmFpbGFi
bGVMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOworCisgICAgRUlOQV9MSVNUX0ZSRUUobG9hZGVk
TGFuZ3VhZ2VzLCBhY3R1YWwpCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhl
IGNsaWVudCdzIGNhbGxiYWNrcyBhcmVuJ3QgY2FsbGVkIChpZiBub3Qgc3BlY2lmaWVkKS4KKyAq
LworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXIpCit7CisgICAgcmVz
ZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOworICAgIGV3a19zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworCisgICAgbG9hZFVybFN5bmMoZW52
aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRhKCkpOwor
CisgICAgLy8gSWYgdXNlciBkb2Vzbid0IHNwZWNpZnkgY2FsbGJhY2sgZnVuY3Rpb25zIHJlc3Bv
bnNpYmxlIGZvciBzcGVsbGluZworICAgIC8vIHRoZSBkZWZhdWx0IFdlYktpdCBpbXBsZW1lbnRh
dGlvbiAoYmFzZWQgb24gdGhlIEVuY2hhbnQgbGlicmFyeSkgd2lsbCBiZSB1c2VkLgorICAgIEFT
U0VSVF9GQUxTRShjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbERvY3VtZW50VGFnKTsKKyAg
ICBBU1NFUlRfRkFMU0UoY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1bWVudFRhZ0Ns
b3NlKTsKKyAgICBBU1NFUlRfRkFMU0UoY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxpbmdD
aGVjayk7CisKKyAgICAvLyBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gdmVyaWZ5IG90aGVycyBj
YWxsYmFja3MgKG9uV29yZEd1ZXNzZXMsCisgICAgLy8gb25Xb3JkTGVhcm4sIG9uV29yZElnbm9y
ZSkgYXMgdGhleSBuZWVkIHRoZSBjb250ZXh0IG1lbnUgZmVhdHVyZQorICAgIC8vIHdoaWNoIGlz
IG5vdCBpbXBsZW1lbnRlZCBmb3IgV0syLUVGTC4KK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIg
dGhlIGNsaWVudCdzIGNhbGxiYWNrcyAob25TcGVsbERvY3VtZW50VGFnLCBvblNwZWxsRG9jdW1l
bnRUYWdDbG9zZSkgYXJlIGNhbGxlZC4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3
a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZykKK3sKKyAgICByZXNldENh
bGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CisgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7Cisg
ICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1
ZSk7CisKKyAgICBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0
X2NiX3NldChvblNwZWxsRG9jdW1lbnRUYWcpOworICAgIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVl
X3NwZWxsX2RvY3VtZW50X3RhZ19jbG9zZV9jYl9zZXQob25TcGVsbERvY3VtZW50VGFnQ2xvc2Up
OworCisgICAgbG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJzcGVsbGlu
Z190ZXN0Lmh0bWwiKS5kYXRhKCkpOworCisgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgY2FsbGJh
Y2sgd2FzIGNhbGxlZC4KKyAgICBBU1NFUlRfVFJVRShjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5z
cGVsbERvY3VtZW50VGFnKTsKKyAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjaGVjayB3aGV0
aGVyIG9uU3BlbGxEb2N1bWVudFRhZ0Nsb3NlIHdhcyBjYWxsZWQgaGVyZSwgYmVjYXVzZQorICAg
IC8vIGl0J3MgaW52b2tlZCB3aGVuIFdlYlBhZ2UgaXMgYmVpbmcgZGVzdHJveWVkLgorICAgIC8v
IEl0IHNob3VsZCBiZSB2ZXJpZmllZCBmb3IgZXhhbXBsZSB3aGVuIHZpZXcgaXMgZnJlZWQuCit9
CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxsYmFjayAob25TcGVsbGlu
Z0NoZWNrKSBpcyBjYWxsZWQgd2hlbgorICogdGhlIHdvcmQgdG8gaW5wdXQgZmllbGQgd2FzIHB1
dC4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc3RyaW5n
X3NwZWxsaW5nX2NoZWNrX2NiX3NldCkKK3sKKyAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0
YXRzKCk7CisgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7CisgICAgZXdrX3NldHRpbmdzX2Nv
bnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisKKyAgICBld2tfdGV4
dF9jaGVja2VyX3N0cmluZ19zcGVsbGluZ19jaGVja19jYl9zZXQob25TcGVsbGluZ0NoZWNrKTsK
KworICAgIGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdf
dGVzdC5odG1sIikuZGF0YSgpKTsKKworICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNr
IHdhcyBjYWxsZWQuCisgICAgQVNTRVJUX1RSVUUoY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3Bl
bGxpbmdDaGVjayk7Cit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxs
YmFjayAob25Xb3JkR3Vlc3NlcykgaXMgY2FsbGVkIHdoZW4KKyAqIHRoZSBjb250ZXh0IG1lbnUg
d2FzIHNob3duIG9uIHRoZSBtaXNzcGVsbGVkIHdvcmQuCisgKi8KK1RFU1RfRihFV0syVW5pdFRl
c3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfZ3Vlc3Nlc19nZXRfY2Jfc2V0KQoreworICAg
IHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKKyAgICBkZWZhdWx0VmlldyA9IHdlYlZp
ZXcoKTsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldCh0cnVlKTsKKworICAgIGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9z
ZXQob25Xb3JkR3Vlc3Nlcyk7CisKKyAgICBsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9y
UmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIpLmRhdGEoKSk7CisKKyAgICAvKiBGSVhNRToK
KyAgICAgICAgMSkgSW52b2tlIHRoZSBjb250ZXh0IG1lbnUgb24gdGhlIG1pc3NwZWxsZWQgd29y
ZCAobm90IGltcGxlbWVudGVkIGZvciBXSzIpLAorICAgICAgICAgICBUaGUgd29yZCBoYXMgdG8g
YmUgc2VsZWN0ZWQgZmlyc3QuCisgICAgICAgIDIpIEZpbGwgdGhlIHN1Z2dlc3Rpb24gbGlzdCBp
biB0aGUgb25Xb3JkR3Vlc3NlcyBjYWxsYmFjay4KKyAgICAgICAgMykgQ29tcGFyZSBjb250ZXh0
IG1lbnUgc3VnZ2VzdGlvbnMgdG8gdGhlIHN1Z2dlc3Rpb24gbGlzdC4KKyAgICAgICAgNCkgQ2hl
Y2sgd2hldGhlciB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC4gKi8gICAgCit9CisKKy8qKgorICog
VGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxsYmFjayAob25Xb3JkTGVhcm4pIGlzIGNhbGxl
ZCB3aGVuCisgKiB0aGUgY29udGV4dCBtZW51IG9wdGlvbiAiTGVhcm4gc3BlbGxpbmciIHdhcyBj
aG9vc2VuLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl93
b3JkX2xlYXJuX2NiX3NldCkKK3sKKyAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7
CisgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7CisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisKKyAgICBld2tfdGV4dF9jaGVj
a2VyX3dvcmRfbGVhcm5fY2Jfc2V0KG9uV29yZExlYXJuKTsKKworICAgIGxvYWRVcmxTeW5jKGVu
dmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdfdGVzdC5odG1sIikuZGF0YSgpKTsK
KworICAgIC8qIEZJWE1FOgorICAgICAgICAxKSBJbnZva2UgdGhlIGNvbnRleHQgbWVudSBvbiB0
aGUgbWlzc3BlbGxlZCB3b3JkIChub3QgaW1wbGVtZW50ZWQgZm9yIFdLMiksCisgICAgICAgICAg
IFRoZSB3b3JkIGhhcyB0byBiZSBzZWxlY3RlZCBmaXJzdC4KKyAgICAgICAgMikgQ2hlY2sgd2hl
dGhlciB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC4gKi8KKyAgICAKK30KKworLyoqCisgKiBUZXN0
IHdoZXRoZXIgdGhlIGNsaWVudCdzIGNhbGxiYWNrIChvbldvcmRJZ25vcmUpIGlzIGNhbGxlZCB3
aGVuCisgKiB0aGUgY29udGV4dCBtZW51IG9wdGlvbiAiSWdub3JlIHNwZWxsaW5nIiB3YXMgY2hv
b3Nlbi4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfd29y
ZF9pZ25vcmVfY2Jfc2V0KQoreworICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsK
KyAgICBkZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKworICAgIGV3a190ZXh0X2NoZWNr
ZXJfd29yZF9pZ25vcmVfY2Jfc2V0KG9uV29yZExlYXJuKTsKKworICAgIGxvYWRVcmxTeW5jKGVu
dmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdfdGVzdC5odG1sIikuZGF0YSgpKTsK
KworICAgIC8qIEZJWE1FOgorICAgICAgICAxKSBJbnZva2UgdGhlIGNvbnRleHQgbWVudSBvbiB0
aGUgbWlzc3BlbGxlZCB3b3JkIChub3QgaW1wbGVtZW50ZWQgZm9yIFdLMiksCisgICAgICAgICAg
IFRoZSB3b3JkIGhhcyB0byBiZSBzZWxlY3RlZCBmaXJzdC4KKyAgICAgICAgMikgQ2hlY2sgd2hl
dGhlciB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC4gKi8KKyAgICAKK30K
</data>
<flag name="commit-queue"
          id="181765"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168893</attachid>
            <date>2012-10-16 01:54:27 -0700</date>
            <delta_ts>2012-10-16 08:04:34 -0700</delta_ts>
            <desc>apply Gyuyoung&apos;s comments</desc>
            <filename>spelling-unit_test.patch</filename>
            <type>text/plain</type>
            <size>22123</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzNDFhYzZjLi4yODg0NzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTItMTAtMTUgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBBZGQgdW5pdCB0ZXN0cyBmb3IgU3BlbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTU2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSB1
bml0IHRlc3RzIHdoaWNoIGNvdmVycyBBUEkgZnJvbSBld2tfdGV4dF9jaGVja2VyLmgKKyAgICAg
ICAgYW5kIHRleHQgY2hlY2tlciBzZXR0aW5ncyBmcm9tIGV3a19zZXR0aW5ncy5oCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChyZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKToKKyAgICAgICAgKG9uVGltZW91dCk6
CisgICAgICAgIChvblNldHRpbmdDaGFuZ2UpOgorICAgICAgICAob25TcGVsbERvY3VtZW50VGFn
KToKKyAgICAgICAgKG9uU3BlbGxEb2N1bWVudFRhZ0Nsb3NlKToKKyAgICAgICAgKG9uU3BlbGxp
bmdDaGVjayk6CisgICAgICAgIChvbldvcmRHdWVzc2VzKToKKyAgICAgICAgKG9uV29yZExlYXJu
KToKKyAgICAgICAgKG9uV29yZElnbm9yZSk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTEw
LTE1ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWlj
aGFsIFJvaiA8bS5yb2pAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgSW1wbGVtZW50YXRpb24gb2Yg
c3BlbGxjaGVja2luZyBmZWF0dXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBkMmQ1
MmM1Li5iMTM4ZTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMzM5LDYgKzMzOSw3
IEBAIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX3JlZnB0cl9ldmFz
X29iamVjdAogICAgIHRlc3RfZXdrMl9pbnRlbnRzCiAgICAgdGVzdF9ld2syX3NldHRpbmdzCisg
ICAgdGVzdF9ld2syX3RleHRfY2hlY2tlcgogICAgIHRlc3RfZXdrMl92aWV3CiApCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy9z
cGVsbGluZ190ZXN0Lmh0bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJmOTM4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sCkBAIC0wLDAg
KzEsMjMgQEAKKzwhLS0KKyAgICBUaGUgcGFnZSBjb250YWlucyB0aGUgaW5wdXQgZmllbGQgZWxl
bWVudCB3aGljaCBpcyBmaWxsZWQKKyAgICB3aXRoIHRoZSBtaXNzcGVsbGVkIHdvcmQgdG8gcGVy
Zm9ybSBzcGVsbGluZy4KKy0tPgorPEhUTUw+Cis8SEVBRD4KKyAgICA8VElUTEU+VGVzdGluZyBX
ZWIgUGFnZSBmb3IgU3BlbGxpbmc8L1RJVExFPgorICAgIDxTQ1JJUFQ+CisgICAgICAgIGZ1bmN0
aW9uIHNldElucHV0RmllbGRWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBp
bnB1dCBmaWVsZCBoYXMgdG8gYmUgZm9jdXNlZCBiZWZvcmUgdHlwaW5nIHRvIGl0LgorICAgICAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucHV0IikuZm9jdXMoKTsKKworICAgICAg
ICAgICAgLy8gJ1NwYWNlJyBub3RpZmllcyBXZWJLaXQgdGhhdCB3b3JkIGhhcyBiZWVuIGluc2Vy
dGVkLgorICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucHV0IikudmFsdWUg
PSAiYWEgIjsKKyAgICAgICAgfQorICAgIDwvU0NSSVBUPgorPC9IRUFEPgorCis8Qk9EWSBvbmxv
YWQ9InNldElucHV0RmllbGRWYWx1ZSgpIj4KKzxJTlBVVCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXQi
PgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmVlN2RjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRf
Y2hlY2tlci5jcHAKQEAgLTAsMCArMSw1MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGJyaWVmIGNvdmVycyBB
UEkgZnJvbSBld2tfdGV4dF9jaGVja2VyLmgKKyAqIEBmaWxlIHRlc3RfZXdrMl90ZXh0X2NoZWNr
ZXIuY3BwCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RV
dGlscy9FV0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5p
dFRlc3RFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNv
cmUuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVX
SzJVbml0VGVzdDsKKworZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVu
dDsKKworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHREb2N1bWVudFRhZyA9IDEyMzsKK3N0
YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkTWlzc3BlbGxlZFdvcmRbXSA9ICJhYSI7CitzdGF0aWMg
Y29uc3QgRXZhc19PYmplY3QqIGRlZmF1bHRWaWV3ID0gMDsKK3N0YXRpYyBib29sIGlzU2V0dGlu
Z0VuYWJsZWQgPSBmYWxzZTsKK3N0YXRpYyBFY29yZV9UaW1lciogdGltZW91dFRpbWVyID0gMDsK
K3N0YXRpYyBkb3VibGUgZGVmYXVsdFRpbWVvdXRJblNlY29uZHMgPSAwLjU7CisKKy8qKgorICog
U3RydWN0dXJlIGtlZXBzIGluZm9ybWF0aW9uIHdoaWNoIGNhbGxiYWNrcyB3ZXJlIGNhbGxlZC4K
KyAqIEl0cyB2YWx1ZXMgYXJlIHJlc2V0IGJlZm9yZSBlYWNoIHRlc3QuCisgKi8KK3N0YXRpYyBz
dHJ1Y3QgeworICAgIGJvb2wgc3BlbGxEb2N1bWVudFRhZyA6IDE7CisgICAgYm9vbCBzcGVsbERv
Y3VtZW50VGFnQ2xvc2UgOiAxOworICAgIGJvb2wgc3BlbGxpbmdDaGVjayA6IDE7CisgICAgYm9v
bCB3b3JkR3Vlc3NlcyA6IDE7CisgICAgYm9vbCB3b3JkTGVhcm4gOiAxOworICAgIGJvb2wgd29y
ZElnbm9yZSA6IDE7Cit9IGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzOworCitzdGF0aWMgdm9pZCBy
ZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCkKK3sKKyAgICBjYWxsYmFja3NFeGVjdXRpb25T
dGF0cy5zcGVsbERvY3VtZW50VGFnID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3Rh
dHMuc3BlbGxEb2N1bWVudFRhZ0Nsb3NlID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9u
U3RhdHMuc3BlbGxpbmdDaGVjayA9IGZhbHNlOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRz
LndvcmRHdWVzc2VzID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZExl
YXJuID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZElnbm9yZSA9IGZh
bHNlOworfQorCisvKioKKyAqIEhhbmRsZSB0aGUgdGltZW91dCwgaXQgbWF5IGhhcHBlbiBmb3Ig
dGhlIGFzeW5jaHJvbm91cyB0ZXN0cy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcmV0dXJu
IHRoZSBFQ09SRV9DQUxMQkFDS19DQU5DRUwgZmxhZyB0byBkZWxldGUgdGhlIHRpbWVyIGF1dG9t
YXRpY2FsbHkKKyAqLworc3RhdGljIEVpbmFfQm9vbCBvblRpbWVvdXQodm9pZCopCit7CisgICAg
ZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VM
OworfQorCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgdGVzdHMgd2hldGhlciB0aGUgY2xpZW50J3Mg
Y2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNo
YW5nZWQuCisgKgorICogVmVyaWZ5IHRoZSBuZXcgc2V0dGluZyB2YWx1ZSAocGFzc2VzIGluIHRo
ZSBAYSBmbGFnIHBhcmFtZXRlcikgaWYgaXQgZXF1YWxzIHRvIHRoZSBwcmV2aW91c2x5IHNldC4K
KyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcGFyYW0gZmxhZyB0aGUgbmV3IHNldHRpbmcgdmFs
dWUKKyAqLworc3RhdGljIHZvaWQgb25TZXR0aW5nQ2hhbmdlKEVpbmFfQm9vbCBmbGFnKQorewor
ICAgIEVYUEVDVF9FUShpc1NldHRpbmdFbmFibGVkLCBmbGFnKTsKKworICAgIGVjb3JlX3RpbWVy
X2RlbCh0aW1lb3V0VGltZXIpOworICAgIHRpbWVvdXRUaW1lciA9IDA7CisgICAgZWNvcmVfbWFp
bl9sb29wX3F1aXQoKTsKK30KKworLyoqCisgKiBSZXR1cm5zIHVuaXF1ZSB0YWcgKGFuIGlkZW50
aWZpZXIpLgorICoKKyAqIEl0IHdpbGwgYmUgdXNlZCBmb3Igb25TcGVsbGluZ0NoZWNrLCBvbldv
cmRHdWVzc2VzIGV0Yy4gdG8gbm90aWZ5CisgKiB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVjdCAo
YXNzb2NpYXRlZCB0byB0aGUgdGFnKSB0aGUgc3BlbGxpbmcgaXMgYmVpbmcgaW52b2tlZC4KKyAq
CisgKiBAcGFyYW0gZXdrVmlldyB0aGUgdmlldyBvYmplY3QgdG8gZ2V0IHVuaXF1ZSB0YWcKKyAq
CisgKiBAcmV0dXJuIHVuaXF1ZSB0YWcgZm9yIHRoZSBnaXZlbiBAYSBld2tWaWV3IG9iamVjdAor
ICovCitzdGF0aWMgdWludDY0X3Qgb25TcGVsbERvY3VtZW50VGFnKGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQoreworICAgIEVYUEVDVF9FUShkZWZhdWx0VmlldywgZXdrVmlldyk7CisgICAg
Y2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1bWVudFRhZyA9IHRydWU7CisKKyAgICBy
ZXR1cm4gZGVmYXVsdERvY3VtZW50VGFnOworfQorCisvKioKKyAqIFRoZSB2aWV3IHdoaWNoIGlz
IGFzc29jaWF0ZWQgdG8gdGhlIEBhIHRhZyBoYXMgYmVlbiBkZXN0cm95ZWQuCisgKgorICogQHBh
cmFtIHRhZyB0aGUgdGFnIHRvIGJlIGNsb3NlZAorICovCitzdGF0aWMgdm9pZCBvblNwZWxsRG9j
dW1lbnRUYWdDbG9zZSh1aW50NjRfdCB0YWcpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1
bWVudFRhZywgdGFnKTsKKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbERvY3VtZW50
VGFnQ2xvc2UgPSB0cnVlOworfQorCisvKioKKyAqIENoZWNrcyBzcGVsbGluZyBmb3IgdGhlIGdp
dmVuIEBhIHRleHQuCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUg
Y2xpZW50IG9uIHdoaWNoIG9iamVjdCB0aGUgc3BlbGxpbmcgaXMgYmVpbmcgcGVyZm9ybWVkCisg
KiBAcGFyYW0gdGV4dCB0aGUgdGV4dCBjb250YWluaW5nIHRoZSB3b3JkcyB0byBzcGVsbGNoZWNr
CisgKiBAcGFyYW0gbWlzc3BlbGxpbmdfbG9jYXRpb24gYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIG1pc3NwZWxsZWQgQGEgdGV4dCwgQGMgLTEgaWYgdGhlIEBhIHRleHQg
aXMgY29ycmVjdAorICogQHBhcmFtIG1pc3NwZWxsaW5nX2xlbmd0aCBhIHBvaW50ZXIgdG8gc3Rv
cmUgdGhlIGxlbmd0aCBvZiBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIDAgaWYgdGhlIEBhIHRleHQg
aXMgY29ycmVjdAorICovCitzdGF0aWMgdm9pZCBvblNwZWxsaW5nQ2hlY2sodWludDY0X3QgdGFn
LCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90
KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBBU1NFUlRfRVEoZGVmYXVsdERvY3VtZW50VGFn
LCB0YWcpOworICAgIEFTU0VSVF9TVFJFUShleHBlY3RlZE1pc3NwZWxsZWRXb3JkLCB0ZXh0KTsK
KworICAgIEFTU0VSVF9UUlVFKG1pc3NwZWxsaW5nTG9jYXRpb24pOworICAgIEFTU0VSVF9UUlVF
KG1pc3NwZWxsaW5nTGVuZ3RoKTsKKworICAgIC8vIFRoZSBjbGllbnQgaXMgYWJsZSB0byBzaG93
IHRoZSBtaXNzZWxsZWQgdGV4dCB0aHJvdWdoIGl0cyBsb2NhdGlvbiAodGhlIGJlZ2lubmluZyBv
ZiBtaXNzcGVsbGluZykKKyAgICAvLyBhbmQgbGVuZ3RoICh0aGUgZW5kIG9mIG1pc3NwZWxsaW5n
KS4KKyAgICAqbWlzc3BlbGxpbmdMb2NhdGlvbiA9IDA7CisgICAgKm1pc3NwZWxsaW5nTGVuZ3Ro
ID0gc3RybGVuKGV4cGVjdGVkTWlzc3BlbGxlZFdvcmQpOworCisgICAgY2FsbGJhY2tzRXhlY3V0
aW9uU3RhdHMuc3BlbGxpbmdDaGVjayA9IHRydWU7Cit9CisKKy8qKgorICogR2V0cyBhIGxpc3Qg
b2Ygc3VnZ2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVsbGVkIEBhIHdvcmQuCisgKgorICog
QHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVj
dCB0aGUgc3BlbGxpbmcgaXMgYmVpbmcgcGVyZm9ybWVkCisgKiBAcGFyYW0gd29yZCB0aGUgd29y
ZCB0byBnZXQgZ3Vlc3NlcworICogQHJldHVybiBhIGxpc3Qgb2YgZHluYW1pY2FsbHkgYWxsb2Nh
dGVkIHN0cmluZ3MgKGFzIGNoYXIqKSBhbmQKKyAqICAgICAgICAgY2FsbGVyIGlzIHJlc3BvbnNp
YmxlIGZvciBkZXN0cm95aW5nIHRoZW0uCisgKi8KK3N0YXRpYyBFaW5hX0xpc3QqIG9uV29yZEd1
ZXNzZXModWludDY0X3QgdGFnLCBjb25zdCBjaGFyKiB3b3JkKQoreworICAgIEVYUEVDVF9FUShk
ZWZhdWx0RG9jdW1lbnRUYWcsIHRhZyk7CisgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkTWlzc3Bl
bGxlZFdvcmQsIHdvcmQpOworCisgICAgRWluYV9MaXN0KiBzdWdnZXN0aW9uc0ZvcldvcmQgPSAw
OworICAgIC8vIEZJWE1FOiBGaWxsIHRoZSBFaW5hX0xpc3Qgd2l0aCBzdWdnZXN0aW9ucyBmb3Ig
dGhlIG1pc3NwZWxsZWQgd29yZC4KKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy53b3JkR3Vl
c3NlcyA9IHRydWU7CisKKyAgICByZXR1cm4gc3VnZ2VzdGlvbnNGb3JXb3JkOworfQorCisvKioK
KyAqIEFkZHMgdGhlIEBhIHdvcmQgdG8gdGhlIHNwZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4KKyAq
CisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBjbGllbnQgb24gd2hpY2gg
b2JqZWN0IHRoZSBzcGVsbGluZyBpcyBiZWluZyBwZXJmb3JtZWQKKyAqIEBwYXJhbSB3b3JkIHRo
ZSB3b3JkIHRvIGFkZAorICovCitzdGF0aWMgdm9pZCBvbldvcmRMZWFybih1aW50NjRfdCB0YWcs
IGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1bWVudFRhZywg
dGFnKTsKKyAgICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVkV29yZCwgd29yZCk7Cisg
ICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZExlYXJuID0gdHJ1ZTsKK30KKworLyoqCisg
KiBUZWxscyB0aGUgc3BlbGwgY2hlY2tlciB0byBpZ25vcmUgYSBnaXZlbiBAYSB3b3JkLgorICoK
KyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIGNsaWVudCBvbiB3aGljaCBv
YmplY3QgdGhlIHNwZWxsaW5nIGlzIGJlaW5nIHBlcmZvcm1lZAorICogQHBhcmFtIHdvcmQgdGhl
IHdvcmQgdG8gaWdub3JlCisgKi8KK3N0YXRpYyB2b2lkIG9uV29yZElnbm9yZSh1aW50NjRfdCB0
YWcsIGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1bWVudFRh
ZywgdGFnKTsKKyAgICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVkV29yZCwgd29yZCk7
CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZElnbm9yZSA9IHRydWU7Cit9CisKKy8q
KgorICogVGVzdCBzZXR0ZXIvZ2V0dGVyIGZvciB0aGUgY29udGlub3VzIHNwZWxsIGNoZWNraW5n
OgorICogIC0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9n
ZXQKKyAqICAtIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRf
c2V0CisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3NfY29udGludW91
c19zcGVsbF9jaGVja2luZ19lbmFibGVkKQoreworICAgIGV3a19zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworI2lmIEVOQUJMRShTUEVMTENIRUNL
KQorICAgIEVYUEVDVF9UUlVFKGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfZ2V0KCkpOworCisgICAgLy8gV2hlbiB0aGUgc3BlbGwgY2hlY2tpbmcgaGFzIGJl
ZW4gZW5hYmxlZCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgc2V0IChpZiB0aGUgdXNlcgorICAg
IC8vIGRpZG4ndCBzZXQgYW55KS4gVGhlIGxhbmd1YWdlcyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRo
ZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9h
ZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CisgICAgZWNvcmVfbWFp
bl9sb29wX2JlZ2luKCk7CisKKyAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1YWdlcyA9IGV3a19z
ZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9nZXQoKTsKKyAgICAvLyBO
byBkaWN0aW9uYXJ5IGlzIGF2YWlsYWJsZS9pbnN0YWxsZWQuCisgICAgaWYgKCFsb2FkZWRMYW5n
dWFnZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEVYUEVDVF9FUSgxLCBlaW5hX2xpc3RfY291
bnQobG9hZGVkTGFuZ3VhZ2VzKSk7CisKKyAgICB2b2lkKiBkYXRhOworICAgIEVJTkFfTElTVF9G
UkVFKGxvYWRlZExhbmd1YWdlcywgZGF0YSkKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpKTsKKyNlbHNlCisgICAgRVhQRUNUX0ZBTFNF
KGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOwor
I2VuZGlmCisKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFi
bGVkX3NldChmYWxzZSk7CisgICAgRVhQRUNUX0ZBTFNFKGV3a19zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOworfQorCisvKioKKyAqIFRlc3Qgd2hldGhl
ciB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIHNldHRpbmcg
aGFzIGJlZW4gY2hhbmdlZC4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0
aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQpCit7CisgICAgZXdr
X3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldChvblNldHRp
bmdDaGFuZ2UpOworCisgICAgaXNTZXR0aW5nRW5hYmxlZCA9IGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7CisgICAgaXNTZXR0aW5nRW5hYmxlZCA9
ICFpc1NldHRpbmdFbmFibGVkOworICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfc2V0KGlzU2V0dGluZ0VuYWJsZWQpOworCisgICAgdGltZW91dFRpbWVy
ID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDAp
OworCisgICAgLy8gU3RhcnQgcHJvY2Nlc2luZyBFY29yZSBldmVudHMsIHRoZSBub3RpZmljYXRp
b24gYWJvdXQgdGhlIGNoYW5nZSBvZiB0aGUgc3BlbGwKKyAgICAvLyBjaGVja2luZyBzZXR0aW5n
IGlzIGNhbGxlZCBvbiBpZGxlci4KKyAgICAvLyBXZSBjYW4ndCBjYWxsIGVjb3JlX21haW5fbG9v
cF9pdGVyYXRlIGJlY2F1c2UgaXQgZG9lc24ndCBwcm9jZXNzIHRoZSBpZGxlcnMuCisgICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBFWFBF
Q1RfRkFMU0UodGltZW91dFRpbWVyKTsKKyNlbHNlCisgICAgRVhQRUNUX1RSVUUodGltZW91dFRp
bWVyKTsKKyNlbmRpZgorCisgICAgLy8gVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQg
aWYgdGhlIHNldHRpbmcgb3B0aW9uIGlzIGFscmVhZHkgc2V0LgorICAgIGlzU2V0dGluZ0VuYWJs
ZWQgPSBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgp
OworICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0
KGlzU2V0dGluZ0VuYWJsZWQpOworCisgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRk
KGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOworICAgIGVjb3JlX21haW5f
bG9vcF9iZWdpbigpOworCisgICAgLy8gV2hlbiB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNh
YmxlZCB0aGUgY2FsbGJhY2sgd29uJ3QgYmUgY2FsbGVkIHRvby4KKyAgICBFWFBFQ1RfVFJVRSh0
aW1lb3V0VGltZXIpOworCisgICAgLy8gVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQg
aWYgdGhlIHVzZXIgaGFzIGludmFsaWRhdGVkIGl0LgorICAgIGV3a19zZXR0aW5nc19jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQoMCk7CisgICAgaXNTZXR0aW5nRW5hYmxl
ZCA9IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCk7
CisgICAgaXNTZXR0aW5nRW5hYmxlZCA9ICFpc1NldHRpbmdFbmFibGVkOworICAgIGV3a19zZXR0
aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KGlzU2V0dGluZ0VuYWJs
ZWQpOworCisgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0
SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwor
CisgICAgLy8gSWYgdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMgZGlzYWJsZWQsIHRoZSBjYWxsYmFj
ayBpcyBub3Qgc2V0LgorICAgIEVYUEVDVF9UUlVFKHRpbWVvdXRUaW1lcik7Cit9CisKKy8qKgor
ICogVGhpcyB1bml0IHRlc3Qgc2V0cyBhbGwgYXZhaWxhYmxlL2luc3RhbGxlZCBkaWN0aW9uYXJp
ZXMgYW5kIHZlcmlmaWllcyB0aGVtCisgKiBpZiB0aGV5IGFyZSBpbiB1c2UuCisgKiBBbGwgdGhl
IGRpY3Rpb25hcmllcyBmcm9tIHRoZSBsaXN0IGNhbiBiZSBzZXQgdG8gcGVyZm9ybSBzcGVsbGNo
ZWNraW5nLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlc19nZXQpCit7CisgICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5n
dWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAg
IC8vIE5vIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlL2luc3RhbGxlZCBvciB0aGUgU1BFTExDSEVD
SyBtYWNybyBpcyBkaXNhYmxlZC4KKyAgICBpZiAoIWF2YWlsYWJsZUxhbmd1YWdlcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gSGVscGVyIHRvIGNyZWF0ZSBvbmUgc3RyaW5nIHdpdGggY29t
bWEgc2VwYXJhdGVkIGxhbmd1YWdlcy4KKyAgICB2b2lkKiBhY3R1YWwgPSAwOworICAgIFdURjo6
U3RyaW5nQnVpbGRlciBsYW5ndWFnZXM7CisgICAgRWluYV9MaXN0KiBsaXN0SXRlcmF0b3IgPSAw
OworICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IGVpbmFfbGlzdF9jb3VudChhdmFpbGFibGVMYW5n
dWFnZXMpIC0gMTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSChh
dmFpbGFibGVMYW5ndWFnZXMsIGxpc3RJdGVyYXRvciwgYWN0dWFsKSB7CisgICAgICAgIGxhbmd1
YWdlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOworICAgICAgICAv
LyBBZGQgdGhlIGNvbW1hIGFmdGVyIGFsbCBidXQgdGhlIGxhc3QgbGFuZ3VhZ2UgSURzLgorICAg
ICAgICBpZiAoaSsrICE9IGxhc3RJbmRleCkKKyAgICAgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQo
JywnKTsKKyAgICB9CisKKyAgICAvLyBTZXQgYWxsIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisgICAg
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19lbmFibGVkX3NldChsYW5ndWFn
ZXMudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIExhbmd1YWdlcyBhcmUgYmVp
bmcgbG9hZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAgICB0aW1lb3V0VGltZXIg
PSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7
CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICAvLyBHZXQgdGhlIGxhbmd1YWdl
cyBpbiB1c2UuCisgICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfZ2V0KCk7CisgICAgQVNTRVJUX0VRKGVp
bmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpLCBlaW5hX2xpc3RfY291bnQoYXZhaWxhYmxl
TGFuZ3VhZ2VzKSk7CisKKyAgICBpID0gMDsKKyAgICB2b2lkKiBleHBlY3RlZCA9IDA7CisgICAg
Ly8gVmVyaWZ5IHdoZXRoZXIgdGhlIGxvYWRlZCBsYW5ndWFnZXMgbGlzdCBpcyBlcXVhbCB0byB0
aGUgYXZhaWxhYmxlIGxhbmd1YWdlcyBsaXN0LgorICAgIEVJTkFfTElTVF9GT1JFQUNIKGxvYWRl
ZExhbmd1YWdlcywgbGlzdEl0ZXJhdG9yLCBhY3R1YWwpIHsKKyAgICAgICAgZXhwZWN0ZWQgPSBl
aW5hX2xpc3RfbnRoKGF2YWlsYWJsZUxhbmd1YWdlcywgaSsrKTsKKyAgICAgICAgRVhQRUNUX1NU
UkVRKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihleHBlY3RlZCksIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihhY3R1YWwpKTsKKyAgICB9CisKKyAgICAvLyBEZWxldGUgdGhlIGxpc3RzLgorICAg
IEVJTkFfTElTVF9GUkVFKGF2YWlsYWJsZUxhbmd1YWdlcywgYWN0dWFsKQorICAgICAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWN0dWFsKSk7CisKKyAg
ICBFSU5BX0xJU1RfRlJFRShsb2FkZWRMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAgICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOworfQorCisv
KioKKyAqIEhlcmUgd2UgdGVzdCB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczoKKyAqICAtIHNldHRp
bmcgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UsCisgKiAgLSBpZiB0d28gYXJiaXRyYXJpbHkgc2VsZWN0
ZWQgZGljdGlvbmFyaWVzIGFyZSBzZXQgY29ycmVjdGx5LgorICovCitURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19lbmFibGVkKQor
eworICAgIC8vIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZS4KKyAgICBld2tfc2V0dGluZ3Nfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfc2V0KDApOworCisgICAgLy8gTGFuZ3VhZ2Vz
IGFyZSBiZWluZyBsb2FkZWQgb24gdGhlIGlkbGVyLCB3YWl0IGZvciB0aGVtLgorICAgIHRpbWVv
dXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1l
b3V0LCAwKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworICAgIEVpbmFfTGlzdCog
bG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19l
bmFibGVkX2dldCgpOworICAgIC8vIE5vIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlL2luc3RhbGxl
ZCBvciB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZC4KKyAgICBpZiAoIWxvYWRlZExh
bmd1YWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX0VRKDEsIGVpbmFfbGlzdF9j
b3VudChsb2FkZWRMYW5ndWFnZXMpKTsKKworICAgIC8vIERlbGV0ZSB0aGUgbGlzdC4KKyAgICB2
b2lkKiBhY3R1YWwgPSAwOworICAgIEVJTkFfTElTVF9GUkVFKGxvYWRlZExhbmd1YWdlcywgYWN0
dWFsKQorICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oYWN0dWFsKSk7CisKKyAgICAvLyBHZXQgdGhlIGZpcnN0IGFuZCBsYXN0IGxhbmd1YWdlIGZy
b20gaW5zdGFsbGVkIGRpY3Rpb25hcmllcy4KKyAgICBFaW5hX0xpc3QqIGF2YWlsYWJsZUxhbmd1
YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CisgICAg
dW5zaWduZWQgbnVtYmVyT2ZBdmFpbGFibGVMYW5ndWFnZXMgPSBlaW5hX2xpc3RfY291bnQoYXZh
aWxhYmxlTGFuZ3VhZ2VzKTsKKyAgICAvLyBXZSBhc3N1bWUgdGhhdCB1c2VyIGhhcyBpbnN0YWxs
ZWQgYXQgbGVzdCB0d28gZGljdGlvbmFyaWVzLgorICAgIGlmIChudW1iZXJPZkF2YWlsYWJsZUxh
bmd1YWdlcyA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNoYXIqIGZpcnN0RXhw
ZWN0ZWQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZWluYV9saXN0X250aChhdmFpbGFibGVM
YW5ndWFnZXMsIDApKTsKKyAgICBjb25zdCBjaGFyKiBsYXN0RXhwZWN0ZWQgPSBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oZWluYV9saXN0X2RhdGFfZ2V0KGVpbmFfbGlzdF9sYXN0KGF2YWlsYWJs
ZUxhbmd1YWdlcykpKTsKKworICAgIC8vIENhc2Ugc2Vuc2l0aXZpdHkgb2YgZGljdGlvbmFyaWVz
IGRvZXNuJ3QgYWZmZWN0IG9uIGxvYWRpbmcgdGhlIGRpY3Rpb25hcmllcywKKyAgICAvLyB0aGUg
RW5jaGFudCBsaWJyYXJ5IHdpbGwgJ25vcm1hbGl6ZScgdGhlbS4KKyAgICBXVEY6OlN0cmluZ0J1
aWxkZXIgbGFuZ3VhZ2VzOworICAgIGxhbmd1YWdlcy5hcHBlbmQoU3RyaW5nKGZpcnN0RXhwZWN0
ZWQpLnVwcGVyKCkpOworICAgIGxhbmd1YWdlcy5hcHBlbmQoJywnKTsKKyAgICBsYW5ndWFnZXMu
YXBwZW5kKFN0cmluZyhsYXN0RXhwZWN0ZWQpLmxvd2VyKCkpOworCisgICAgLy8gU2V0IGJvdGgg
bGFuZ3VhZ2VzICh0aGUgZmlyc3QgYW5kIHRoZSBsYXN0KSBmcm9tIHRoZSBsaXN0LgorICAgIGV3
a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZW5hYmxlZF9zZXQobGFuZ3VhZ2Vz
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90
aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CisgICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGlu
Z3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2VuYWJsZWRfZ2V0KCk7CisgICAgQVNTRVJUX0VR
KDIsIGVpbmFfbGlzdF9jb3VudChsb2FkZWRMYW5ndWFnZXMpKTsKKworICAgIEVYUEVDVF9TVFJF
UShmaXJzdEV4cGVjdGVkLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZWluYV9saXN0X250aChs
b2FkZWRMYW5ndWFnZXMsIDApKSk7CisgICAgRVhQRUNUX1NUUkVRKGxhc3RFeHBlY3RlZCwgc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlzdF9udGgobG9hZGVkTGFuZ3VhZ2VzLCAxKSkp
OworCisgICAgLy8gRGVsZXRlIHRoZSBsaXN0cy4KKyAgICBFSU5BX0xJU1RfRlJFRShhdmFpbGFi
bGVMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOworCisgICAgRUlOQV9MSVNUX0ZSRUUobG9hZGVk
TGFuZ3VhZ2VzLCBhY3R1YWwpCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhl
IGNsaWVudCdzIGNhbGxiYWNrcyBhcmVuJ3QgY2FsbGVkIChpZiBub3Qgc3BlY2lmaWVkKS4KKyAq
LworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXIpCit7CisgICAgcmVz
ZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOworICAgIGV3a19zZXR0aW5nc19jb250aW51b3Vz
X3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworCisgICAgQVNTRVJUX1RSVUUobG9h
ZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwi
KS5kYXRhKCkpKTsKKworICAgIC8vIElmIHVzZXIgZG9lc24ndCBzcGVjaWZ5IGNhbGxiYWNrIGZ1
bmN0aW9ucyByZXNwb25zaWJsZSBmb3Igc3BlbGxpbmcKKyAgICAvLyB0aGUgZGVmYXVsdCBXZWJL
aXQgaW1wbGVtZW50YXRpb24gKGJhc2VkIG9uIHRoZSBFbmNoYW50IGxpYnJhcnkpIHdpbGwgYmUg
dXNlZC4KKyAgICBBU1NFUlRfRkFMU0UoY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1
bWVudFRhZyk7CisgICAgQVNTRVJUX0ZBTFNFKGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxs
RG9jdW1lbnRUYWdDbG9zZSk7CisgICAgQVNTRVJUX0ZBTFNFKGNhbGxiYWNrc0V4ZWN1dGlvblN0
YXRzLnNwZWxsaW5nQ2hlY2spOworCisgICAgLy8gSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHZl
cmlmeSBvdGhlcnMgY2FsbGJhY2tzIChvbldvcmRHdWVzc2VzLAorICAgIC8vIG9uV29yZExlYXJu
LCBvbldvcmRJZ25vcmUpIGFzIHRoZXkgbmVlZCB0aGUgY29udGV4dCBtZW51IGZlYXR1cmUKKyAg
ICAvLyB3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIFdLMi1FRkwuCit9CisKKy8qKgorICog
VGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxsYmFja3MgKG9uU3BlbGxEb2N1bWVudFRhZywg
b25TcGVsbERvY3VtZW50VGFnQ2xvc2UpIGFyZSBjYWxsZWQuCisgKi8KK1RFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWcpCit7
CisgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOworICAgIGRlZmF1bHRWaWV3ID0g
d2ViVmlldygpOworICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KHRydWUpOworCisgICAgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2dldF9jYl9zZXQob25TcGVsbERvY3VtZW50VGFnKTsKKyAgICBld2tfdGV4dF9j
aGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfY2xvc2VfY2Jfc2V0KG9uU3BlbGxEb2N1
bWVudFRhZ0Nsb3NlKTsKKworICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGVudmlyb25tZW50
LT51cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdfdGVzdC5odG1sIikuZGF0YSgpKSk7CisKKyAgICAv
LyBDaGVjayB3aGV0aGVyIHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkLgorICAgIEFTU0VSVF9UUlVF
KGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsRG9jdW1lbnRUYWcpOworICAgIC8vIEl0J3Mg
bm90IHBvc3NpYmxlIHRvIGNoZWNrIHdoZXRoZXIgb25TcGVsbERvY3VtZW50VGFnQ2xvc2Ugd2Fz
IGNhbGxlZCBoZXJlLCBiZWNhdXNlCisgICAgLy8gaXQncyBpbnZva2VkIHdoZW4gV2ViUGFnZSBp
cyBiZWluZyBkZXN0cm95ZWQuCisgICAgLy8gSXQgc2hvdWxkIGJlIHZlcmlmaWVkIGZvciBleGFt
cGxlIHdoZW4gdmlldyBpcyBmcmVlZC4KK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNs
aWVudCdzIGNhbGxiYWNrIChvblNwZWxsaW5nQ2hlY2spIGlzIGNhbGxlZCB3aGVuCisgKiB0aGUg
d29yZCB0byBpbnB1dCBmaWVsZCB3YXMgcHV0LgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFz
ZSwgZXdrX3RleHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0KQoreworICAg
IHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKKyAgICBkZWZhdWx0VmlldyA9IHdlYlZp
ZXcoKTsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldCh0cnVlKTsKKworICAgIGV3a190ZXh0X2NoZWNrZXJfc3RyaW5nX3NwZWxsaW5nX2NoZWNr
X2NiX3NldChvblNwZWxsaW5nQ2hlY2spOworCisgICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMo
ZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRhKCkp
KTsKKworICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuCisgICAg
QVNTRVJUX1RSVUUoY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxpbmdDaGVjayk7Cit9CisK
Ky8qKgorICogVGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxsYmFjayAob25Xb3JkR3Vlc3Nl
cykgaXMgY2FsbGVkIHdoZW4KKyAqIHRoZSBjb250ZXh0IG1lbnUgd2FzIHNob3duIG9uIHRoZSBt
aXNzcGVsbGVkIHdvcmQuCisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9j
aGVja2VyX3dvcmRfZ3Vlc3Nlc19nZXRfY2Jfc2V0KQoreworICAgIHJlc2V0Q2FsbGJhY2tzRXhl
Y3V0aW9uU3RhdHMoKTsKKyAgICBkZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKKyAgICBld2tfc2V0
dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKworICAg
IGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9jYl9zZXQob25Xb3JkR3Vlc3Nlcyk7
CisKKyAgICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3Vy
Y2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIpLmRhdGEoKSkpOworCisgICAgLyogRklYTUU6CisgICAg
ICAgIDEpIEludm9rZSB0aGUgY29udGV4dCBtZW51IG9uIHRoZSBtaXNzcGVsbGVkIHdvcmQgKG5v
dCBpbXBsZW1lbnRlZCBmb3IgV0syKSwKKyAgICAgICAgICAgdGhlIHdvcmQgaGFzIHRvIGJlIHNl
bGVjdGVkIGZpcnN0LgorICAgICAgICAyKSBGaWxsIHRoZSBzdWdnZXN0aW9uIGxpc3QgaW4gdGhl
IG9uV29yZEd1ZXNzZXMgY2FsbGJhY2suCisgICAgICAgIDMpIENvbXBhcmUgY29udGV4dCBtZW51
IHN1Z2dlc3Rpb25zIHRvIHRoZSBzdWdnZXN0aW9uIGxpc3QuCisgICAgICAgIDQpIENoZWNrIHdo
ZXRoZXIgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuICovICAgIAorfQorCisvKioKKyAqIFRlc3Qg
d2hldGhlciB0aGUgY2xpZW50J3MgY2FsbGJhY2sgKG9uV29yZExlYXJuKSBpcyBjYWxsZWQgd2hl
bgorICogdGhlIGNvbnRleHQgbWVudSBvcHRpb24gIkxlYXJuIHNwZWxsaW5nIiB3YXMgY2hvb3Nl
bi4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfd29yZF9s
ZWFybl9jYl9zZXQpCit7CisgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOworICAg
IGRlZmF1bHRWaWV3ID0gd2ViVmlldygpOworICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworCisgICAgZXdrX3RleHRfY2hlY2tlcl93
b3JkX2xlYXJuX2NiX3NldChvbldvcmRMZWFybik7CisKKyAgICBBU1NFUlRfVFJVRShsb2FkVXJs
U3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIpLmRh
dGEoKSkpOworCisgICAgLyogRklYTUU6CisgICAgICAgIDEpIEludm9rZSB0aGUgY29udGV4dCBt
ZW51IG9uIHRoZSBtaXNzcGVsbGVkIHdvcmQgKG5vdCBpbXBsZW1lbnRlZCBmb3IgV0syKSwKKyAg
ICAgICAgICAgVGhlIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVkIGZpcnN0LgorICAgICAgICAyKSBD
aGVjayB3aGV0aGVyIHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkLiAqLworICAgIAorfQorCisvKioK
KyAqIFRlc3Qgd2hldGhlciB0aGUgY2xpZW50J3MgY2FsbGJhY2sgKG9uV29yZElnbm9yZSkgaXMg
Y2FsbGVkIHdoZW4KKyAqIHRoZSBjb250ZXh0IG1lbnUgb3B0aW9uICJJZ25vcmUgc3BlbGxpbmci
IHdhcyBjaG9vc2VuLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hl
Y2tlcl93b3JkX2lnbm9yZV9jYl9zZXQpCit7CisgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25T
dGF0cygpOworICAgIGRlZmF1bHRWaWV3ID0gd2ViVmlldygpOworICAgIGV3a19zZXR0aW5nc19j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworCisgICAgZXdrX3Rl
eHRfY2hlY2tlcl93b3JkX2lnbm9yZV9jYl9zZXQob25Xb3JkSWdub3JlKTsKKworICAgIEFTU0VS
VF9UUlVFKGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdf
dGVzdC5odG1sIikuZGF0YSgpKSk7CisKKyAgICAvKiBGSVhNRToKKyAgICAgICAgMSkgSW52b2tl
IHRoZSBjb250ZXh0IG1lbnUgb24gdGhlIG1pc3NwZWxsZWQgd29yZCAobm90IGltcGxlbWVudGVk
IGZvciBXSzIpLAorICAgICAgICAgICBUaGUgd29yZCBoYXMgdG8gYmUgc2VsZWN0ZWQgZmlyc3Qu
CisgICAgICAgIDIpIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuICovCisg
ICAgCit9Cg==
</data>
<flag name="commit-queue"
          id="182009"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168947</attachid>
            <date>2012-10-16 08:04:34 -0700</date>
            <delta_ts>2012-10-17 03:48:26 -0700</delta_ts>
            <desc>adjust to latest changes from bug 91854</desc>
            <filename>spelling-unit_test.patch</filename>
            <type>text/plain</type>
            <size>22214</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1NDQxMmVhLi5iYzEyMWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTItMTAtMTYgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBBZGQgdW5pdCB0ZXN0cyBmb3IgU3BlbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTU2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSB1
bml0IHRlc3RzIHdoaWNoIGNvdmVycyBBUEkgZnJvbSBld2tfdGV4dF9jaGVja2VyLmgKKyAgICAg
ICAgYW5kIHRleHQgY2hlY2tlciBzZXR0aW5ncyBmcm9tIGV3a19zZXR0aW5ncy5oCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChyZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKToKKyAgICAgICAgKG9uVGltZW91dCk6
CisgICAgICAgIChvblNldHRpbmdDaGFuZ2UpOgorICAgICAgICAob25TcGVsbERvY3VtZW50VGFn
KToKKyAgICAgICAgKG9uU3BlbGxEb2N1bWVudFRhZ0Nsb3NlKToKKyAgICAgICAgKG9uU3BlbGxp
bmdDaGVjayk6CisgICAgICAgIChvbldvcmRHdWVzc2VzKToKKyAgICAgICAgKG9uV29yZExlYXJu
KToKKyAgICAgICAgKG9uV29yZElnbm9yZSk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTEw
LTE1ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPiwgTWlj
aGFsIFJvaiA8bS5yb2pAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgSW1wbGVtZW50YXRpb24gb2Yg
c3BlbGxjaGVja2luZyBmZWF0dXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBkMmQ1
MmM1Li5iMTM4ZTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMzM5LDYgKzMzOSw3
IEBAIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX3JlZnB0cl9ldmFz
X29iamVjdAogICAgIHRlc3RfZXdrMl9pbnRlbnRzCiAgICAgdGVzdF9ld2syX3NldHRpbmdzCisg
ICAgdGVzdF9ld2syX3RleHRfY2hlY2tlcgogICAgIHRlc3RfZXdrMl92aWV3CiApCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy9z
cGVsbGluZ190ZXN0Lmh0bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJmOTM4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvc3BlbGxpbmdfdGVzdC5odG1sCkBAIC0wLDAg
KzEsMjMgQEAKKzwhLS0KKyAgICBUaGUgcGFnZSBjb250YWlucyB0aGUgaW5wdXQgZmllbGQgZWxl
bWVudCB3aGljaCBpcyBmaWxsZWQKKyAgICB3aXRoIHRoZSBtaXNzcGVsbGVkIHdvcmQgdG8gcGVy
Zm9ybSBzcGVsbGluZy4KKy0tPgorPEhUTUw+Cis8SEVBRD4KKyAgICA8VElUTEU+VGVzdGluZyBX
ZWIgUGFnZSBmb3IgU3BlbGxpbmc8L1RJVExFPgorICAgIDxTQ1JJUFQ+CisgICAgICAgIGZ1bmN0
aW9uIHNldElucHV0RmllbGRWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBp
bnB1dCBmaWVsZCBoYXMgdG8gYmUgZm9jdXNlZCBiZWZvcmUgdHlwaW5nIHRvIGl0LgorICAgICAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucHV0IikuZm9jdXMoKTsKKworICAgICAg
ICAgICAgLy8gJ1NwYWNlJyBub3RpZmllcyBXZWJLaXQgdGhhdCB3b3JkIGhhcyBiZWVuIGluc2Vy
dGVkLgorICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucHV0IikudmFsdWUg
PSAiYWEgIjsKKyAgICAgICAgfQorICAgIDwvU0NSSVBUPgorPC9IRUFEPgorCis8Qk9EWSBvbmxv
YWQ9InNldElucHV0RmllbGRWYWx1ZSgpIj4KKzxJTlBVVCB0eXBlPSJ0ZXh0IiBpZD0iaW5wdXQi
PgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfdGV4dF9jaGVja2VyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTcxMzIxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRf
Y2hlY2tlci5jcHAKQEAgLTAsMCArMSw1MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGJyaWVmIGNvdmVycyBB
UEkgZnJvbSBld2tfdGV4dF9jaGVja2VyLmgKKyAqIEBmaWxlIHRlc3RfZXdrMl90ZXh0X2NoZWNr
ZXIuY3BwCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RV
dGlscy9FV0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5p
dFRlc3RFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNv
cmUuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVX
SzJVbml0VGVzdDsKKworZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVu
dDsKKworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHREb2N1bWVudFRhZyA9IDEyMzsKK3N0
YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkTWlzc3BlbGxlZFdvcmRbXSA9ICJhYSI7CitzdGF0aWMg
Y29uc3QgRXZhc19PYmplY3QqIGRlZmF1bHRWaWV3ID0gMDsKK3N0YXRpYyBib29sIGlzU2V0dGlu
Z0VuYWJsZWQgPSBmYWxzZTsKK3N0YXRpYyBFY29yZV9UaW1lciogdGltZW91dFRpbWVyID0gMDsK
K3N0YXRpYyBkb3VibGUgZGVmYXVsdFRpbWVvdXRJblNlY29uZHMgPSAwLjU7CisKKy8qKgorICog
U3RydWN0dXJlIGtlZXBzIGluZm9ybWF0aW9uIHdoaWNoIGNhbGxiYWNrcyB3ZXJlIGNhbGxlZC4K
KyAqIEl0cyB2YWx1ZXMgYXJlIHJlc2V0IGJlZm9yZSBlYWNoIHRlc3QuCisgKi8KK3N0YXRpYyBz
dHJ1Y3QgeworICAgIGJvb2wgc3BlbGxEb2N1bWVudFRhZyA6IDE7CisgICAgYm9vbCBzcGVsbERv
Y3VtZW50VGFnQ2xvc2UgOiAxOworICAgIGJvb2wgc3BlbGxpbmdDaGVjayA6IDE7CisgICAgYm9v
bCB3b3JkR3Vlc3NlcyA6IDE7CisgICAgYm9vbCB3b3JkTGVhcm4gOiAxOworICAgIGJvb2wgd29y
ZElnbm9yZSA6IDE7Cit9IGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzOworCitzdGF0aWMgdm9pZCBy
ZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCkKK3sKKyAgICBjYWxsYmFja3NFeGVjdXRpb25T
dGF0cy5zcGVsbERvY3VtZW50VGFnID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3Rh
dHMuc3BlbGxEb2N1bWVudFRhZ0Nsb3NlID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9u
U3RhdHMuc3BlbGxpbmdDaGVjayA9IGZhbHNlOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRz
LndvcmRHdWVzc2VzID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZExl
YXJuID0gZmFsc2U7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZElnbm9yZSA9IGZh
bHNlOworfQorCisvKioKKyAqIEhhbmRsZSB0aGUgdGltZW91dCwgaXQgbWF5IGhhcHBlbiBmb3Ig
dGhlIGFzeW5jaHJvbm91cyB0ZXN0cy4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcmV0dXJu
IHRoZSBFQ09SRV9DQUxMQkFDS19DQU5DRUwgZmxhZyB0byBkZWxldGUgdGhlIHRpbWVyIGF1dG9t
YXRpY2FsbHkKKyAqLworc3RhdGljIEVpbmFfQm9vbCBvblRpbWVvdXQodm9pZCopCit7CisgICAg
ZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VM
OworfQorCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgdGVzdHMgd2hldGhlciB0aGUgY2xpZW50J3Mg
Y2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNwZWxsIGNoZWNraW5nIHNldHRpbmcgd2FzIGNo
YW5nZWQuCisgKgorICogQGludGVybmFsCisgKgorICogVmVyaWZ5IHRoZSBuZXcgc2V0dGluZyB2
YWx1ZSAocGFzc2VzIGluIHRoZSBAYSBmbGFnIHBhcmFtZXRlcikgaWYgaXQgZXF1YWxzIHRvIHRo
ZSBwcmV2aW91c2x5IHNldC4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBAcGFyYW0gZmxhZyB0
aGUgbmV3IHNldHRpbmcgdmFsdWUKKyAqLworc3RhdGljIHZvaWQgb25TZXR0aW5nQ2hhbmdlKEVp
bmFfQm9vbCBmbGFnKQoreworICAgIEVYUEVDVF9FUShpc1NldHRpbmdFbmFibGVkLCBmbGFnKTsK
KworICAgIGVjb3JlX3RpbWVyX2RlbCh0aW1lb3V0VGltZXIpOworICAgIHRpbWVvdXRUaW1lciA9
IDA7CisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKK30KKworLyoqCisgKiBSZXR1cm5zIHVu
aXF1ZSB0YWcgKGFuIGlkZW50aWZpZXIpLgorICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIEl0IHdp
bGwgYmUgdXNlZCBmb3Igb25TcGVsbGluZ0NoZWNrLCBvbldvcmRHdWVzc2VzIGV0Yy4gdG8gbm90
aWZ5CisgKiB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVjdCAoYXNzb2NpYXRlZCB0byB0aGUgdGFn
KSB0aGUgc3BlbGxpbmcgaXMgYmVpbmcgaW52b2tlZC4KKyAqCisgKiBAcGFyYW0gZXdrVmlldyB0
aGUgdmlldyBvYmplY3QgdG8gZ2V0IHVuaXF1ZSB0YWcKKyAqCisgKiBAcmV0dXJuIHVuaXF1ZSB0
YWcgZm9yIHRoZSBnaXZlbiBAYSBld2tWaWV3IG9iamVjdAorICovCitzdGF0aWMgdWludDY0X3Qg
b25TcGVsbERvY3VtZW50VGFnKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEVY
UEVDVF9FUShkZWZhdWx0VmlldywgZXdrVmlldyk7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3Rh
dHMuc3BlbGxEb2N1bWVudFRhZyA9IHRydWU7CisKKyAgICByZXR1cm4gZGVmYXVsdERvY3VtZW50
VGFnOworfQorCisvKioKKyAqIFRoZSB2aWV3IHdoaWNoIGlzIGFzc29jaWF0ZWQgdG8gdGhlIEBh
IHRhZyBoYXMgYmVlbiBkZXN0cm95ZWQuCisgKgorICogQGludGVybmFsCisgKgorICogQHBhcmFt
IHRhZyB0aGUgdGFnIHRvIGJlIGNsb3NlZAorICovCitzdGF0aWMgdm9pZCBvblNwZWxsRG9jdW1l
bnRUYWdDbG9zZSh1aW50NjRfdCB0YWcpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1bWVu
dFRhZywgdGFnKTsKKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbERvY3VtZW50VGFn
Q2xvc2UgPSB0cnVlOworfQorCisvKioKKyAqIENoZWNrcyBzcGVsbGluZyBmb3IgdGhlIGdpdmVu
IEBhIHRleHQuCisgKgorICogQGludGVybmFsCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFn
IHRvIG5vdGlmeSB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVjdCB0aGUgc3BlbGxpbmcgaXMgYmVp
bmcgcGVyZm9ybWVkCisgKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCBjb250YWluaW5nIHRoZSB3b3Jk
cyB0byBzcGVsbGNoZWNrCisgKiBAcGFyYW0gbWlzc3BlbGxpbmdfbG9jYXRpb24gYSBwb2ludGVy
IHRvIHN0b3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1pc3NwZWxsZWQgQGEgdGV4dCwgQGMgLTEg
aWYgdGhlIEBhIHRleHQgaXMgY29ycmVjdAorICogQHBhcmFtIG1pc3NwZWxsaW5nX2xlbmd0aCBh
IHBvaW50ZXIgdG8gc3RvcmUgdGhlIGxlbmd0aCBvZiBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIDAg
aWYgdGhlIEBhIHRleHQgaXMgY29ycmVjdAorICovCitzdGF0aWMgdm9pZCBvblNwZWxsaW5nQ2hl
Y2sodWludDY0X3QgdGFnLCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBBU1NFUlRfRVEoZGVm
YXVsdERvY3VtZW50VGFnLCB0YWcpOworICAgIEFTU0VSVF9TVFJFUShleHBlY3RlZE1pc3NwZWxs
ZWRXb3JkLCB0ZXh0KTsKKworICAgIEFTU0VSVF9UUlVFKG1pc3NwZWxsaW5nTG9jYXRpb24pOwor
ICAgIEFTU0VSVF9UUlVFKG1pc3NwZWxsaW5nTGVuZ3RoKTsKKworICAgIC8vIFRoZSBjbGllbnQg
aXMgYWJsZSB0byBzaG93IHRoZSBtaXNzZWxsZWQgdGV4dCB0aHJvdWdoIGl0cyBsb2NhdGlvbiAo
dGhlIGJlZ2lubmluZyBvZiBtaXNzcGVsbGluZykKKyAgICAvLyBhbmQgbGVuZ3RoICh0aGUgZW5k
IG9mIG1pc3NwZWxsaW5nKS4KKyAgICAqbWlzc3BlbGxpbmdMb2NhdGlvbiA9IDA7CisgICAgKm1p
c3NwZWxsaW5nTGVuZ3RoID0gc3RybGVuKGV4cGVjdGVkTWlzc3BlbGxlZFdvcmQpOworCisgICAg
Y2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxpbmdDaGVjayA9IHRydWU7Cit9CisKKy8qKgor
ICogR2V0cyBhIGxpc3Qgb2Ygc3VnZ2VzdGVkIHNwZWxsaW5ncyBmb3IgYSBtaXNzcGVsbGVkIEBh
IHdvcmQuCisgKgorICogQGludGVybmFsCisgKgorICogQHBhcmFtIHRhZyB1bmlxdWUgdGFnIHRv
IG5vdGlmeSB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVjdCB0aGUgc3BlbGxpbmcgaXMgYmVpbmcg
cGVyZm9ybWVkCisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0byBnZXQgZ3Vlc3NlcworICogQHJl
dHVybiBhIGxpc3Qgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmluZ3MgKGFzIGNoYXIqKSBh
bmQKKyAqICAgICAgICAgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZXN0cm95aW5nIHRoZW0u
CisgKi8KK3N0YXRpYyBFaW5hX0xpc3QqIG9uV29yZEd1ZXNzZXModWludDY0X3QgdGFnLCBjb25z
dCBjaGFyKiB3b3JkKQoreworICAgIEVYUEVDVF9FUShkZWZhdWx0RG9jdW1lbnRUYWcsIHRhZyk7
CisgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkTWlzc3BlbGxlZFdvcmQsIHdvcmQpOworCisgICAg
RWluYV9MaXN0KiBzdWdnZXN0aW9uc0ZvcldvcmQgPSAwOworICAgIC8vIEZJWE1FOiBGaWxsIHRo
ZSBFaW5hX0xpc3Qgd2l0aCBzdWdnZXN0aW9ucyBmb3IgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAg
ICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy53b3JkR3Vlc3NlcyA9IHRydWU7CisKKyAgICByZXR1
cm4gc3VnZ2VzdGlvbnNGb3JXb3JkOworfQorCisvKioKKyAqIEFkZHMgdGhlIEBhIHdvcmQgdG8g
dGhlIHNwZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBA
cGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBjbGllbnQgb24gd2hpY2ggb2JqZWN0
IHRoZSBzcGVsbGluZyBpcyBiZWluZyBwZXJmb3JtZWQKKyAqIEBwYXJhbSB3b3JkIHRoZSB3b3Jk
IHRvIGFkZAorICovCitzdGF0aWMgdm9pZCBvbldvcmRMZWFybih1aW50NjRfdCB0YWcsIGNvbnN0
IGNoYXIqIHdvcmQpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1bHREb2N1bWVudFRhZywgdGFnKTsK
KyAgICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVkV29yZCwgd29yZCk7CisgICAgY2Fs
bGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZExlYXJuID0gdHJ1ZTsKK30KKworLyoqCisgKiBUZWxs
cyB0aGUgc3BlbGwgY2hlY2tlciB0byBpZ25vcmUgYSBnaXZlbiBAYSB3b3JkLgorICoKKyAqIEBp
bnRlcm5hbAorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBub3RpZnkgdGhlIGNsaWVu
dCBvbiB3aGljaCBvYmplY3QgdGhlIHNwZWxsaW5nIGlzIGJlaW5nIHBlcmZvcm1lZAorICogQHBh
cmFtIHdvcmQgdGhlIHdvcmQgdG8gaWdub3JlCisgKi8KK3N0YXRpYyB2b2lkIG9uV29yZElnbm9y
ZSh1aW50NjRfdCB0YWcsIGNvbnN0IGNoYXIqIHdvcmQpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1
bHREb2N1bWVudFRhZywgdGFnKTsKKyAgICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVk
V29yZCwgd29yZCk7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZElnbm9yZSA9IHRy
dWU7Cit9CisKKy8qKgorICogVGVzdCBzZXR0ZXIvZ2V0dGVyIGZvciB0aGUgY29udGlub3VzIHNw
ZWxsIGNoZWNraW5nOgorICogIC0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tp
bmdfZW5hYmxlZF9nZXQKKyAqICAtIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWRfc2V0CisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfc2V0dGlu
Z3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkKQoreworICAgIGV3a19zZXR0aW5n
c19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworI2lmIEVOQUJM
RShTUEVMTENIRUNLKQorICAgIEVYUEVDVF9UUlVFKGV3a19zZXR0aW5nc19jb250aW51b3VzX3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0KCkpOworCisgICAgLy8gV2hlbiB0aGUgc3BlbGwgY2hl
Y2tpbmcgaGFzIGJlZW4gZW5hYmxlZCwgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgc2V0IChpZiB0
aGUgdXNlcgorICAgIC8vIGRpZG4ndCBzZXQgYW55KS4gVGhlIGxhbmd1YWdlcyBhcmUgYmVpbmcg
bG9hZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAgICB0aW1lb3V0VGltZXIgPSBl
Y29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7Cisg
ICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1
YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CisgICAg
Ly8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5zdGFsbGVkLgorICAgIGlmICghbG9hZGVk
TGFuZ3VhZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBFWFBFQ1RfRVEoMSwgZWluYV9saXN0
X2NvdW50KGxvYWRlZExhbmd1YWdlcykpOworCisgICAgdm9pZCogZGF0YTsKKyAgICBFSU5BX0xJ
U1RfRlJFRShsb2FkZWRMYW5ndWFnZXMsIGRhdGEpCisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSk7CisjZWxzZQorICAgIEVYUEVDVF9G
QUxTRShld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgp
KTsKKyNlbmRpZgorCisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZF9zZXQoZmFsc2UpOworICAgIEVYUEVDVF9GQUxTRShld2tfc2V0dGluZ3NfY29udGlu
dW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpKTsKK30KKworLyoqCisgKiBUZXN0IHdo
ZXRoZXIgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0
aW5nIGhhcyBiZWVuIGNoYW5nZWQuCisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KQoreworICAg
IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2NoYW5nZV9jYl9zZXQob25T
ZXR0aW5nQ2hhbmdlKTsKKworICAgIGlzU2V0dGluZ0VuYWJsZWQgPSBld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dldCgpOworICAgIGlzU2V0dGluZ0VuYWJs
ZWQgPSAhaXNTZXR0aW5nRW5hYmxlZDsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdFbmFibGVkKTsKKworICAgIHRpbWVvdXRU
aW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1lb3V0
LCAwKTsKKworICAgIC8vIFN0YXJ0IHByb2NjZXNpbmcgRWNvcmUgZXZlbnRzLCB0aGUgbm90aWZp
Y2F0aW9uIGFib3V0IHRoZSBjaGFuZ2Ugb2YgdGhlIHNwZWxsCisgICAgLy8gY2hlY2tpbmcgc2V0
dGluZyBpcyBjYWxsZWQgb24gaWRsZXIuCisgICAgLy8gV2UgY2FuJ3QgY2FsbCBlY29yZV9tYWlu
X2xvb3BfaXRlcmF0ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgcHJvY2VzcyB0aGUgaWRsZXJzLgorICAg
IGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAg
RVhQRUNUX0ZBTFNFKHRpbWVvdXRUaW1lcik7CisjZWxzZQorICAgIEVYUEVDVF9UUlVFKHRpbWVv
dXRUaW1lcik7CisjZW5kaWYKKworICAgIC8vIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2Fs
bGVkIGlmIHRoZSBzZXR0aW5nIG9wdGlvbiBpcyBhbHJlYWR5IHNldC4KKyAgICBpc1NldHRpbmdF
bmFibGVkID0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9n
ZXQoKTsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldChpc1NldHRpbmdFbmFibGVkKTsKKworICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVy
X2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsKKyAgICBlY29yZV9t
YWluX2xvb3BfYmVnaW4oKTsKKworICAgIC8vIFdoZW4gdGhlIFNQRUxMQ0hFQ0sgbWFjcm8gaXMg
ZGlzYWJsZWQgdGhlIGNhbGxiYWNrIHdvbid0IGJlIGNhbGxlZCB0b28uCisgICAgRVhQRUNUX1RS
VUUodGltZW91dFRpbWVyKTsKKworICAgIC8vIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2Fs
bGVkIGlmIHRoZSB1c2VyIGhhcyBpbnZhbGlkYXRlZCBpdC4KKyAgICBld2tfc2V0dGluZ3NfY29u
dGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KDApOworICAgIGlzU2V0dGluZ0Vu
YWJsZWQgPSBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX2dl
dCgpOworICAgIGlzU2V0dGluZ0VuYWJsZWQgPSAhaXNTZXR0aW5nRW5hYmxlZDsKKyAgICBld2tf
c2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChpc1NldHRpbmdF
bmFibGVkKTsKKworICAgIHRpbWVvdXRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGlt
ZW91dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4o
KTsKKworICAgIC8vIElmIHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLCB0aGUgY2Fs
bGJhY2sgaXMgbm90IHNldC4KKyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0VGltZXIpOworfQorCisv
KioKKyAqIFRoaXMgdW5pdCB0ZXN0IHNldHMgYWxsIGF2YWlsYWJsZS9pbnN0YWxsZWQgZGljdGlv
bmFyaWVzIGFuZCB2ZXJpZmllcyB0aGVtCisgKiBpZiB0aGV5IGFyZSBpbiB1c2UuCisgKiBBbGwg
dGhlIGRpY3Rpb25hcmllcyBmcm9tIHRoZSBsaXN0IGNhbiBiZSBzZXQgdG8gcGVyZm9ybSBzcGVs
bGNoZWNraW5nLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdzX3Nw
ZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KQoreworICAgIEVpbmFfTGlzdCog
YXZhaWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2F2YWlsYWJs
ZV9sYW5ndWFnZXNfZ2V0KCk7CisgICAgLy8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5z
dGFsbGVkIG9yIHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRpc2FibGVkLgorICAgIGlmICghYXZh
aWxhYmxlTGFuZ3VhZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBIZWxwZXIgdG8gY3Jl
YXRlIG9uZSBzdHJpbmcgd2l0aCBjb21tYSBzZXBhcmF0ZWQgbGFuZ3VhZ2VzLgorICAgIHZvaWQq
IGFjdHVhbCA9IDA7CisgICAgV1RGOjpTdHJpbmdCdWlsZGVyIGxhbmd1YWdlczsKKyAgICBFaW5h
X0xpc3QqIGxpc3RJdGVyYXRvciA9IDA7CisgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gZWluYV9s
aXN0X2NvdW50KGF2YWlsYWJsZUxhbmd1YWdlcykgLSAxOworICAgIHVuc2lnbmVkIGkgPSAwOwor
ICAgIEVJTkFfTElTVF9GT1JFQUNIKGF2YWlsYWJsZUxhbmd1YWdlcywgbGlzdEl0ZXJhdG9yLCBh
Y3R1YWwpIHsKKyAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oYWN0dWFsKSk7CisgICAgICAgIC8vIEFkZCB0aGUgY29tbWEgYWZ0ZXIgYWxsIGJ1dCB0aGUg
bGFzdCBsYW5ndWFnZSBJRHMuCisgICAgICAgIGlmIChpKysgIT0gbGFzdEluZGV4KQorICAgICAg
ICAgICAgbGFuZ3VhZ2VzLmFwcGVuZCgnLCcpOworICAgIH0KKworICAgIC8vIFNldCBhbGwgYXZh
aWxhYmxlIGxhbmd1YWdlcy4KKyAgICBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzX3NldChsYW5ndWFnZXMudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIExh
bmd1YWdlcyBhcmUgYmVpbmcgbG9hZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAg
ICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMs
IG9uVGltZW91dCwgMCk7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICAvLyBH
ZXQgdGhlIGxhbmd1YWdlcyBpbiB1c2UuCisgICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFnZXMg
PSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEFTU0VS
VF9FUShlaW5hX2xpc3RfY291bnQobG9hZGVkTGFuZ3VhZ2VzKSwgZWluYV9saXN0X2NvdW50KGF2
YWlsYWJsZUxhbmd1YWdlcykpOworCisgICAgaSA9IDA7CisgICAgdm9pZCogZXhwZWN0ZWQgPSAw
OworICAgIC8vIFZlcmlmeSB3aGV0aGVyIHRoZSBsb2FkZWQgbGFuZ3VhZ2VzIGxpc3QgaXMgZXF1
YWwgdG8gdGhlIGF2YWlsYWJsZSBsYW5ndWFnZXMgbGlzdC4KKyAgICBFSU5BX0xJU1RfRk9SRUFD
SChsb2FkZWRMYW5ndWFnZXMsIGxpc3RJdGVyYXRvciwgYWN0dWFsKSB7CisgICAgICAgIGV4cGVj
dGVkID0gZWluYV9saXN0X250aChhdmFpbGFibGVMYW5ndWFnZXMsIGkrKyk7CisgICAgICAgIEVY
UEVDVF9TVFJFUShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZXhwZWN0ZWQpLCBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oYWN0dWFsKSk7CisgICAgfQorCisgICAgLy8gRGVsZXRlIHRoZSBsaXN0
cy4KKyAgICBFSU5BX0xJU1RfRlJFRShhdmFpbGFibGVMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAg
ICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkp
OworCisgICAgRUlOQV9MSVNUX0ZSRUUobG9hZGVkTGFuZ3VhZ2VzLCBhY3R1YWwpCisgICAgICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsK
K30KKworLyoqCisgKiBIZXJlIHdlIHRlc3QgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6CisgKiAg
LSBzZXR0aW5nIHRoZSBkZWZhdWx0IGxhbmd1YWdlLAorICogIC0gaWYgdHdvIGFyYml0cmFyaWx5
IHNlbGVjdGVkIGRpY3Rpb25hcmllcyBhcmUgc2V0IGNvcnJlY3RseS4KKyAqLworVEVTVF9GKEVX
SzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMpCit7
CisgICAgLy8gU2V0IHRoZSBkZWZhdWx0IGxhbmd1YWdlLgorICAgIGV3a19zZXR0aW5nc19zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KDApOworCisgICAgLy8gTGFuZ3VhZ2VzIGFyZSBiZWlu
ZyBsb2FkZWQgb24gdGhlIGlkbGVyLCB3YWl0IGZvciB0aGVtLgorICAgIHRpbWVvdXRUaW1lciA9
IGVjb3JlX3RpbWVyX2FkZChkZWZhdWx0VGltZW91dEluU2Vjb25kcywgb25UaW1lb3V0LCAwKTsK
KyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworICAgIEVpbmFfTGlzdCogbG9hZGVkTGFu
Z3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKKyAg
ICAvLyBObyBkaWN0aW9uYXJ5IGlzIGF2YWlsYWJsZS9pbnN0YWxsZWQgb3IgdGhlIFNQRUxMQ0hF
Q0sgbWFjcm8gaXMgZGlzYWJsZWQuCisgICAgaWYgKCFsb2FkZWRMYW5ndWFnZXMpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVF9FUSgxLCBlaW5hX2xpc3RfY291bnQobG9hZGVkTGFuZ3Vh
Z2VzKSk7CisKKyAgICAvLyBEZWxldGUgdGhlIGxpc3QuCisgICAgdm9pZCogYWN0dWFsID0gMDsK
KyAgICBFSU5BX0xJU1RfRlJFRShsb2FkZWRMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAgICAgZWlu
YV9zdHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkpOworCisg
ICAgLy8gR2V0IHRoZSBmaXJzdCBhbmQgbGFzdCBsYW5ndWFnZSBmcm9tIGluc3RhbGxlZCBkaWN0
aW9uYXJpZXMuCisgICAgRWluYV9MaXN0KiBhdmFpbGFibGVMYW5ndWFnZXMgPSBld2tfc2V0dGlu
Z3Nfc3BlbGxfY2hlY2tpbmdfYXZhaWxhYmxlX2xhbmd1YWdlc19nZXQoKTsKKyAgICB1bnNpZ25l
ZCBudW1iZXJPZkF2YWlsYWJsZUxhbmd1YWdlcyA9IGVpbmFfbGlzdF9jb3VudChhdmFpbGFibGVM
YW5ndWFnZXMpOworICAgIC8vIFdlIGFzc3VtZSB0aGF0IHVzZXIgaGFzIGluc3RhbGxlZCBhdCBs
ZXN0IHR3byBkaWN0aW9uYXJpZXMuCisgICAgaWYgKG51bWJlck9mQXZhaWxhYmxlTGFuZ3VhZ2Vz
IDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgY2hhciogZmlyc3RFeHBlY3RlZCA9
IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihlaW5hX2xpc3RfbnRoKGF2YWlsYWJsZUxhbmd1YWdl
cywgMCkpOworICAgIGNvbnN0IGNoYXIqIGxhc3RFeHBlY3RlZCA9IHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihlaW5hX2xpc3RfZGF0YV9nZXQoZWluYV9saXN0X2xhc3QoYXZhaWxhYmxlTGFuZ3Vh
Z2VzKSkpOworCisgICAgLy8gQ2FzZSBzZW5zaXRpdml0eSBvZiBkaWN0aW9uYXJpZXMgZG9lc24n
dCBhZmZlY3Qgb24gbG9hZGluZyB0aGUgZGljdGlvbmFyaWVzLAorICAgIC8vIHRoZSBFbmNoYW50
IGxpYnJhcnkgd2lsbCAnbm9ybWFsaXplJyB0aGVtLgorICAgIFdURjo6U3RyaW5nQnVpbGRlciBs
YW5ndWFnZXM7CisgICAgbGFuZ3VhZ2VzLmFwcGVuZChTdHJpbmcoZmlyc3RFeHBlY3RlZCkudXBw
ZXIoKSk7CisgICAgbGFuZ3VhZ2VzLmFwcGVuZCgnLCcpOworICAgIGxhbmd1YWdlcy5hcHBlbmQo
U3RyaW5nKGxhc3RFeHBlY3RlZCkubG93ZXIoKSk7CisKKyAgICAvLyBTZXQgYm90aCBsYW5ndWFn
ZXMgKHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QpIGZyb20gdGhlIGxpc3QuCisgICAgZXdrX3NldHRp
bmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisKKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVs
dFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CisgICAgZWNvcmVfbWFpbl9sb29wX2Jl
Z2luKCk7CisKKyAgICBsb2FkZWRMYW5ndWFnZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIEFTU0VSVF9FUSgyLCBlaW5hX2xpc3RfY291bnQobG9h
ZGVkTGFuZ3VhZ2VzKSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoZmlyc3RFeHBlY3RlZCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGVpbmFfbGlzdF9udGgobG9hZGVkTGFuZ3VhZ2VzLCAwKSkpOwor
ICAgIEVYUEVDVF9TVFJFUShsYXN0RXhwZWN0ZWQsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihl
aW5hX2xpc3RfbnRoKGxvYWRlZExhbmd1YWdlcywgMSkpKTsKKworICAgIC8vIERlbGV0ZSB0aGUg
bGlzdHMuCisgICAgRUlOQV9MSVNUX0ZSRUUoYXZhaWxhYmxlTGFuZ3VhZ2VzLCBhY3R1YWwpCisg
ICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhY3R1
YWwpKTsKKworICAgIEVJTkFfTElTVF9GUkVFKGxvYWRlZExhbmd1YWdlcywgYWN0dWFsKQorICAg
ICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWN0dWFs
KSk7Cit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxsYmFja3MgYXJl
bid0IGNhbGxlZCAoaWYgbm90IHNwZWNpZmllZCkuCisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RC
YXNlLCBld2tfdGV4dF9jaGVja2VyKQoreworICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3Rh
dHMoKTsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldCh0cnVlKTsKKworICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT51
cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdfdGVzdC5odG1sIikuZGF0YSgpKSk7CisKKyAgICAvLyBJ
ZiB1c2VyIGRvZXNuJ3Qgc3BlY2lmeSBjYWxsYmFjayBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9y
IHNwZWxsaW5nCisgICAgLy8gdGhlIGRlZmF1bHQgV2ViS2l0IGltcGxlbWVudGF0aW9uIChiYXNl
ZCBvbiB0aGUgRW5jaGFudCBsaWJyYXJ5KSB3aWxsIGJlIHVzZWQuCisgICAgQVNTRVJUX0ZBTFNF
KGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsRG9jdW1lbnRUYWcpOworICAgIEFTU0VSVF9G
QUxTRShjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbERvY3VtZW50VGFnQ2xvc2UpOworICAg
IEFTU0VSVF9GQUxTRShjYWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbGluZ0NoZWNrKTsKKwor
ICAgIC8vIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB2ZXJpZnkgb3RoZXJzIGNhbGxiYWNrcyAo
b25Xb3JkR3Vlc3NlcywKKyAgICAvLyBvbldvcmRMZWFybiwgb25Xb3JkSWdub3JlKSBhcyB0aGV5
IG5lZWQgdGhlIGNvbnRleHQgbWVudSBmZWF0dXJlCisgICAgLy8gd2hpY2ggaXMgbm90IGltcGxl
bWVudGVkIGZvciBXSzItRUZMLgorfQorCisvKioKKyAqIFRlc3Qgd2hldGhlciB0aGUgY2xpZW50
J3MgY2FsbGJhY2tzIChvblNwZWxsRG9jdW1lbnRUYWcsIG9uU3BlbGxEb2N1bWVudFRhZ0Nsb3Nl
KSBhcmUgY2FsbGVkLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hl
Y2tlcl91bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnKQoreworICAgIHJlc2V0Q2FsbGJhY2tzRXhl
Y3V0aW9uU3RhdHMoKTsKKyAgICBkZWZhdWx0VmlldyA9IHdlYlZpZXcoKTsKKyAgICBld2tfc2V0
dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKworICAg
IGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19nZXRfY2Jfc2V0KG9u
U3BlbGxEb2N1bWVudFRhZyk7CisgICAgZXdrX3RleHRfY2hlY2tlcl91bmlxdWVfc3BlbGxfZG9j
dW1lbnRfdGFnX2Nsb3NlX2NiX3NldChvblNwZWxsRG9jdW1lbnRUYWdDbG9zZSk7CisKKyAgICBB
U1NFUlRfVFJVRShsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInNwZWxs
aW5nX3Rlc3QuaHRtbCIpLmRhdGEoKSkpOworCisgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgY2Fs
bGJhY2sgd2FzIGNhbGxlZC4KKyAgICBBU1NFUlRfVFJVRShjYWxsYmFja3NFeGVjdXRpb25TdGF0
cy5zcGVsbERvY3VtZW50VGFnKTsKKyAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjaGVjayB3
aGV0aGVyIG9uU3BlbGxEb2N1bWVudFRhZ0Nsb3NlIHdhcyBjYWxsZWQgaGVyZSwgYmVjYXVzZQor
ICAgIC8vIGl0J3MgaW52b2tlZCB3aGVuIFdlYlBhZ2UgaXMgYmVpbmcgZGVzdHJveWVkLgorICAg
IC8vIEl0IHNob3VsZCBiZSB2ZXJpZmllZCBmb3IgZXhhbXBsZSB3aGVuIHZpZXcgaXMgZnJlZWQu
Cit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxsYmFjayAob25TcGVs
bGluZ0NoZWNrKSBpcyBjYWxsZWQgd2hlbgorICogdGhlIHdvcmQgdG8gaW5wdXQgZmllbGQgd2Fz
IHB1dC4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfc3Ry
aW5nX3NwZWxsaW5nX2NoZWNrX2NiX3NldCkKK3sKKyAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlv
blN0YXRzKCk7CisgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7CisgICAgZXdrX3NldHRpbmdz
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisKKyAgICBld2tf
dGV4dF9jaGVja2VyX3N0cmluZ19zcGVsbGluZ19jaGVja19jYl9zZXQob25TcGVsbGluZ0NoZWNr
KTsKKworICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JSZXNv
dXJjZSgic3BlbGxpbmdfdGVzdC5odG1sIikuZGF0YSgpKSk7CisKKyAgICAvLyBDaGVjayB3aGV0
aGVyIHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkLgorICAgIEFTU0VSVF9UUlVFKGNhbGxiYWNrc0V4
ZWN1dGlvblN0YXRzLnNwZWxsaW5nQ2hlY2spOworfQorCisvKioKKyAqIFRlc3Qgd2hldGhlciB0
aGUgY2xpZW50J3MgY2FsbGJhY2sgKG9uV29yZEd1ZXNzZXMpIGlzIGNhbGxlZCB3aGVuCisgKiB0
aGUgY29udGV4dCBtZW51IHdhcyBzaG93biBvbiB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICovCitU
RVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1ZXNzZXNfZ2V0
X2NiX3NldCkKK3sKKyAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CisgICAgZGVm
YXVsdFZpZXcgPSB3ZWJWaWV3KCk7CisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisKKyAgICBld2tfdGV4dF9jaGVja2VyX3dvcmRf
Z3Vlc3Nlc19nZXRfY2Jfc2V0KG9uV29yZEd1ZXNzZXMpOworCisgICAgQVNTRVJUX1RSVUUobG9h
ZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwi
KS5kYXRhKCkpKTsKKworICAgIC8qIEZJWE1FOgorICAgICAgICAxKSBJbnZva2UgdGhlIGNvbnRl
eHQgbWVudSBvbiB0aGUgbWlzc3BlbGxlZCB3b3JkIChub3QgaW1wbGVtZW50ZWQgZm9yIFdLMiks
CisgICAgICAgICAgIHRoZSB3b3JkIGhhcyB0byBiZSBzZWxlY3RlZCBmaXJzdC4KKyAgICAgICAg
MikgRmlsbCB0aGUgc3VnZ2VzdGlvbiBsaXN0IGluIHRoZSBvbldvcmRHdWVzc2VzIGNhbGxiYWNr
LgorICAgICAgICAzKSBDb21wYXJlIGNvbnRleHQgbWVudSBzdWdnZXN0aW9ucyB0byB0aGUgc3Vn
Z2VzdGlvbiBsaXN0LgorICAgICAgICA0KSBDaGVjayB3aGV0aGVyIHRoZSBjYWxsYmFjayB3YXMg
Y2FsbGVkLiAqLyAgICAKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNsaWVudCdzIGNh
bGxiYWNrIChvbldvcmRMZWFybikgaXMgY2FsbGVkIHdoZW4KKyAqIHRoZSBjb250ZXh0IG1lbnUg
b3B0aW9uICJMZWFybiBzcGVsbGluZyIgd2FzIGNob29zZW4uCisgKi8KK1RFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KQoreworICAgIHJl
c2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKKyAgICBkZWZhdWx0VmlldyA9IHdlYlZpZXco
KTsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3Nl
dCh0cnVlKTsKKworICAgIGV3a190ZXh0X2NoZWNrZXJfd29yZF9sZWFybl9jYl9zZXQob25Xb3Jk
TGVhcm4pOworCisgICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZv
clJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRhKCkpKTsKKworICAgIC8qIEZJWE1F
OgorICAgICAgICAxKSBJbnZva2UgdGhlIGNvbnRleHQgbWVudSBvbiB0aGUgbWlzc3BlbGxlZCB3
b3JkIChub3QgaW1wbGVtZW50ZWQgZm9yIFdLMiksCisgICAgICAgICAgIHRoZSB3b3JkIGhhcyB0
byBiZSBzZWxlY3RlZCBmaXJzdC4KKyAgICAgICAgMikgQ2hlY2sgd2hldGhlciB0aGUgY2FsbGJh
Y2sgd2FzIGNhbGxlZC4gKi8KKyAgICAKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNs
aWVudCdzIGNhbGxiYWNrIChvbldvcmRJZ25vcmUpIGlzIGNhbGxlZCB3aGVuCisgKiB0aGUgY29u
dGV4dCBtZW51IG9wdGlvbiAiSWdub3JlIHNwZWxsaW5nIiB3YXMgY2hvb3Nlbi4KKyAqLworVEVT
VF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfd29yZF9pZ25vcmVfY2Jfc2V0
KQoreworICAgIHJlc2V0Q2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMoKTsKKyAgICBkZWZhdWx0Vmll
dyA9IHdlYlZpZXcoKTsKKyAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldCh0cnVlKTsKKworICAgIGV3a190ZXh0X2NoZWNrZXJfd29yZF9pZ25vcmVf
Y2Jfc2V0KG9uV29yZElnbm9yZSk7CisKKyAgICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhlbnZp
cm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIpLmRhdGEoKSkpOwor
CisgICAgLyogRklYTUU6CisgICAgICAgIDEpIEludm9rZSB0aGUgY29udGV4dCBtZW51IG9uIHRo
ZSBtaXNzcGVsbGVkIHdvcmQgKG5vdCBpbXBsZW1lbnRlZCBmb3IgV0syKSwKKyAgICAgICAgICAg
dGhlIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVkIGZpcnN0LgorICAgICAgICAyKSBDaGVjayB3aGV0
aGVyIHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkLiAqLworICAgIAorfQo=
</data>
<flag name="review"
          id="182069"
          type_id="1"
          status="+"
          setter="gyuyoung.kim"
    />
    <flag name="commit-queue"
          id="182071"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169149</attachid>
            <date>2012-10-17 03:48:26 -0700</date>
            <delta_ts>2012-10-17 05:06:48 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>spelling-unit_test.patch</filename>
            <type>text/plain</type>
            <size>22200</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1MDM0ODMxLi5kM2ZlODA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTItMTAtMTcgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBBZGQgdW5pdCB0ZXN0cyBmb3IgU3BlbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTU2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgR3l1eW91bmcgS2ltLgorCisgICAgICAgIEFkZCB0aGUgdW5p
dCB0ZXN0cyB3aGljaCBjb3ZlcnMgQVBJIGZyb20gZXdrX3RleHRfY2hlY2tlci5oCisgICAgICAg
IGFuZCB0ZXh0IGNoZWNrZXIgc2V0dGluZ3MgZnJvbSBld2tfc2V0dGluZ3MuaAorCisgICAgICAg
ICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
cmVzb3VyY2VzL3NwZWxsaW5nX3Rlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAg
ICAocmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cyk6CisgICAgICAgIChvblRpbWVvdXQpOgor
ICAgICAgICAob25TZXR0aW5nQ2hhbmdlKToKKyAgICAgICAgKG9uU3BlbGxEb2N1bWVudFRhZyk6
CisgICAgICAgIChvblNwZWxsRG9jdW1lbnRUYWdDbG9zZSk6CisgICAgICAgIChvblNwZWxsaW5n
Q2hlY2spOgorICAgICAgICAob25Xb3JkR3Vlc3Nlcyk6CisgICAgICAgIChvbldvcmRMZWFybik6
CisgICAgICAgIChvbldvcmRJZ25vcmUpOgorICAgICAgICAoVEVTVF9GKToKKwogMjAxMi0xMC0x
NyAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4sIE1pY2hh
bCBSb2ogPG0ucm9qQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHNw
ZWxsY2hlY2tpbmcgZmVhdHVyZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZDYwM2M1
OS4uNmRmNWQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UK
KysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTMzOSw2ICszMzksNyBA
QCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3RfZXdrMl9yZWZwdHJfZXZhc19v
YmplY3QKICAgICB0ZXN0X2V3azJfaW50ZW50cwogICAgIHRlc3RfZXdrMl9zZXR0aW5ncworICAg
IHRlc3RfZXdrMl90ZXh0X2NoZWNrZXIKICAgICB0ZXN0X2V3azJfdmlldwogKQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvc3Bl
bGxpbmdfdGVzdC5odG1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
cmVzb3VyY2VzL3NwZWxsaW5nX3Rlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iZjkzODIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL3NwZWxsaW5nX3Rlc3QuaHRtbApAQCAtMCwwICsx
LDIzIEBACis8IS0tCisgICAgVGhlIHBhZ2UgY29udGFpbnMgdGhlIGlucHV0IGZpZWxkIGVsZW1l
bnQgd2hpY2ggaXMgZmlsbGVkCisgICAgd2l0aCB0aGUgbWlzc3BlbGxlZCB3b3JkIHRvIHBlcmZv
cm0gc3BlbGxpbmcuCistLT4KKzxIVE1MPgorPEhFQUQ+CisgICAgPFRJVExFPlRlc3RpbmcgV2Vi
IFBhZ2UgZm9yIFNwZWxsaW5nPC9USVRMRT4KKyAgICA8U0NSSVBUPgorICAgICAgICBmdW5jdGlv
biBzZXRJbnB1dEZpZWxkVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgaW5w
dXQgZmllbGQgaGFzIHRvIGJlIGZvY3VzZWQgYmVmb3JlIHR5cGluZyB0byBpdC4KKyAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dCIpLmZvY3VzKCk7CisKKyAgICAgICAg
ICAgIC8vICdTcGFjZScgbm90aWZpZXMgV2ViS2l0IHRoYXQgd29yZCBoYXMgYmVlbiBpbnNlcnRl
ZC4KKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dCIpLnZhbHVlID0g
ImFhICI7CisgICAgICAgIH0KKyAgICA8L1NDUklQVD4KKzwvSEVBRD4KKworPEJPRFkgb25sb2Fk
PSJzZXRJbnB1dEZpZWxkVmFsdWUoKSI+Cis8SU5QVVQgdHlwZT0idGV4dCIgaWQ9ImlucHV0Ij4K
KzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0X2NoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX3RleHRfY2hlY2tlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjZGU1YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl90ZXh0X2No
ZWNrZXIuY3BwCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBicmllZiBjb3ZlcnMgQVBJ
IGZyb20gZXdrX3RleHRfY2hlY2tlci5oCisgKiBAZmlsZSB0ZXN0X2V3azJfdGV4dF9jaGVja2Vy
LmNwcAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRp
bHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRU
ZXN0RW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5oPgorI2luY2x1ZGUgPEVjb3Jl
Lmg+CisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0sy
VW5pdFRlc3Q7CisKK2V4dGVybiBFV0syVW5pdFRlc3RFbnZpcm9ubWVudCogZW52aXJvbm1lbnQ7
CisKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0RG9jdW1lbnRUYWcgPSAxMjM7CitzdGF0
aWMgY29uc3QgY2hhciBleHBlY3RlZE1pc3NwZWxsZWRXb3JkW10gPSAiYWEiOworc3RhdGljIGNv
bnN0IEV2YXNfT2JqZWN0KiBkZWZhdWx0VmlldyA9IDA7CitzdGF0aWMgYm9vbCBpc1NldHRpbmdF
bmFibGVkID0gZmFsc2U7CitzdGF0aWMgRWNvcmVfVGltZXIqIHRpbWVvdXRUaW1lciA9IDA7Citz
dGF0aWMgZG91YmxlIGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzID0gMC41OworCisvKioKKyAqIFN0
cnVjdHVyZSBrZWVwcyBpbmZvcm1hdGlvbiB3aGljaCBjYWxsYmFja3Mgd2VyZSBjYWxsZWQuCisg
KiBJdHMgdmFsdWVzIGFyZSByZXNldCBiZWZvcmUgZWFjaCB0ZXN0LgorICovCitzdGF0aWMgc3Ry
dWN0IHsKKyAgICBib29sIHNwZWxsRG9jdW1lbnRUYWcgOiAxOworICAgIGJvb2wgc3BlbGxEb2N1
bWVudFRhZ0Nsb3NlIDogMTsKKyAgICBib29sIHNwZWxsaW5nQ2hlY2sgOiAxOworICAgIGJvb2wg
d29yZEd1ZXNzZXMgOiAxOworICAgIGJvb2wgd29yZExlYXJuIDogMTsKKyAgICBib29sIHdvcmRJ
Z25vcmUgOiAxOworfSBjYWxsYmFja3NFeGVjdXRpb25TdGF0czsKKworc3RhdGljIHZvaWQgcmVz
ZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpCit7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3Rh
dHMuc3BlbGxEb2N1bWVudFRhZyA9IGZhbHNlOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRz
LnNwZWxsRG9jdW1lbnRUYWdDbG9zZSA9IGZhbHNlOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0
YXRzLnNwZWxsaW5nQ2hlY2sgPSBmYWxzZTsKKyAgICBjYWxsYmFja3NFeGVjdXRpb25TdGF0cy53
b3JkR3Vlc3NlcyA9IGZhbHNlOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLndvcmRMZWFy
biA9IGZhbHNlOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLndvcmRJZ25vcmUgPSBmYWxz
ZTsKK30KKworLyoqCisgKiBIYW5kbGUgdGhlIHRpbWVvdXQsIGl0IG1heSBoYXBwZW4gZm9yIHRo
ZSBhc3luY2hyb25vdXMgdGVzdHMuCisgKgorICogQGludGVybmFsCisgKgorICogQHJldHVybiB0
aGUgRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMIGZsYWcgdG8gZGVsZXRlIHRoZSB0aW1lciBhdXRvbWF0
aWNhbGx5CisgKi8KK3N0YXRpYyBFaW5hX0Jvb2wgb25UaW1lb3V0KHZvaWQqKQoreworICAgIGVj
b3JlX21haW5fbG9vcF9xdWl0KCk7CisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsK
K30KKworLyoqCisgKiBUaGlzIGNhbGxiYWNrIHRlc3RzIHdoZXRoZXIgdGhlIGNsaWVudCdzIGNh
bGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzcGVsbCBjaGVja2luZyBzZXR0aW5nIHdhcyBjaGFu
Z2VkLgorICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIFZlcmlmeSB0aGUgbmV3IHNldHRpbmcgdmFs
dWUgKHBhc3NlcyBpbiB0aGUgQGEgZmxhZyBwYXJhbWV0ZXIpIGlmIGl0IGVxdWFscyB0byB0aGUg
cHJldmlvdXNseSBzZXQuCisgKgorICogQGludGVybmFsCisgKgorICogQHBhcmFtIGZsYWcgdGhl
IG5ldyBzZXR0aW5nIHZhbHVlCisgKi8KK3N0YXRpYyB2b2lkIG9uU2V0dGluZ0NoYW5nZShFaW5h
X0Jvb2wgZmxhZykKK3sKKyAgICBFWFBFQ1RfRVEoaXNTZXR0aW5nRW5hYmxlZCwgZmxhZyk7CisK
KyAgICBlY29yZV90aW1lcl9kZWwodGltZW91dFRpbWVyKTsKKyAgICB0aW1lb3V0VGltZXIgPSAw
OworICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7Cit9CisKKy8qKgorICogUmV0dXJucyB1bmlx
dWUgdGFnIChhbiBpZGVudGlmaWVyKS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqCisgKiBJdCB3aWxs
IGJlIHVzZWQgZm9yIG9uU3BlbGxpbmdDaGVjaywgb25Xb3JkR3Vlc3NlcyBldGMuIHRvIG5vdGlm
eQorICogdGhlIGNsaWVudCBvbiB3aGljaCBvYmplY3QgKGFzc29jaWF0ZWQgdG8gdGhlIHRhZykg
dGhlIHNwZWxsaW5nIGlzIGJlaW5nIGludm9rZWQuCisgKgorICogQHBhcmFtIGV3a1ZpZXcgdGhl
IHZpZXcgb2JqZWN0IHRvIGdldCB1bmlxdWUgdGFnCisgKgorICogQHJldHVybiB1bmlxdWUgdGFn
IGZvciB0aGUgZ2l2ZW4gQGEgZXdrVmlldyBvYmplY3QKKyAqLworc3RhdGljIHVpbnQ2NF90IG9u
U3BlbGxEb2N1bWVudFRhZyhjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBFWFBF
Q1RfRVEoZGVmYXVsdFZpZXcsIGV3a1ZpZXcpOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRz
LnNwZWxsRG9jdW1lbnRUYWcgPSB0cnVlOworCisgICAgcmV0dXJuIGRlZmF1bHREb2N1bWVudFRh
ZzsKK30KKworLyoqCisgKiBUaGUgdmlldyB3aGljaCBpcyBhc3NvY2lhdGVkIHRvIHRoZSBAYSB0
YWcgaGFzIGJlZW4gZGVzdHJveWVkLgorICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIEBwYXJhbSB0
YWcgdGhlIHRhZyB0byBiZSBjbG9zZWQKKyAqLworc3RhdGljIHZvaWQgb25TcGVsbERvY3VtZW50
VGFnQ2xvc2UodWludDY0X3QgdGFnKQoreworICAgIEFTU0VSVF9FUShkZWZhdWx0RG9jdW1lbnRU
YWcsIHRhZyk7CisgICAgY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1bWVudFRhZ0Ns
b3NlID0gdHJ1ZTsKK30KKworLyoqCisgKiBDaGVja3Mgc3BlbGxpbmcgZm9yIHRoZSBnaXZlbiBA
YSB0ZXh0LgorICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0
byBub3RpZnkgdGhlIGNsaWVudCBvbiB3aGljaCBvYmplY3QgdGhlIHNwZWxsaW5nIGlzIGJlaW5n
IHBlcmZvcm1lZAorICogQHBhcmFtIHRleHQgdGhlIHRleHQgY29udGFpbmluZyB0aGUgd29yZHMg
dG8gc3BlbGxjaGVjaworICogQHBhcmFtIG1pc3NwZWxsaW5nX2xvY2F0aW9uIGEgcG9pbnRlciB0
byBzdG9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtaXNzcGVsbGVkIEBhIHRleHQsIEBjIC0xIGlm
IHRoZSBAYSB0ZXh0IGlzIGNvcnJlY3QKKyAqIEBwYXJhbSBtaXNzcGVsbGluZ19sZW5ndGggYSBw
b2ludGVyIHRvIHN0b3JlIHRoZSBsZW5ndGggb2YgbWlzc3BlbGxlZCBAYSB0ZXh0LCBAYyAwIGlm
IHRoZSBAYSB0ZXh0IGlzIGNvcnJlY3QKKyAqLworc3RhdGljIHZvaWQgb25TcGVsbGluZ0NoZWNr
KHVpbnQ2NF90IHRhZywgY29uc3QgY2hhciogdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgpCit7CisgICAgQVNTRVJUX0VRKGRlZmF1
bHREb2N1bWVudFRhZywgdGFnKTsKKyAgICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRNaXNzcGVsbGVk
V29yZCwgdGV4dCk7CisKKyAgICBBU1NFUlRfVFJVRShtaXNzcGVsbGluZ0xvY2F0aW9uKTsKKyAg
ICBBU1NFUlRfVFJVRShtaXNzcGVsbGluZ0xlbmd0aCk7CisKKyAgICAvLyBUaGUgY2xpZW50IGlz
IGFibGUgdG8gc2hvdyB0aGUgbWlzc2VsbGVkIHRleHQgdGhyb3VnaCBpdHMgbG9jYXRpb24gKHRo
ZSBiZWdpbm5pbmcgb2YgbWlzc3BlbGxpbmcpCisgICAgLy8gYW5kIGxlbmd0aCAodGhlIGVuZCBv
ZiBtaXNzcGVsbGluZykuCisgICAgKm1pc3NwZWxsaW5nTG9jYXRpb24gPSAwOworICAgICptaXNz
cGVsbGluZ0xlbmd0aCA9IHN0cmxlbihleHBlY3RlZE1pc3NwZWxsZWRXb3JkKTsKKworICAgIGNh
bGxiYWNrc0V4ZWN1dGlvblN0YXRzLnNwZWxsaW5nQ2hlY2sgPSB0cnVlOworfQorCisvKioKKyAq
IEdldHMgYSBsaXN0IG9mIHN1Z2dlc3RlZCBzcGVsbGluZ3MgZm9yIGEgbWlzc3BlbGxlZCBAYSB3
b3JkLgorICoKKyAqIEBpbnRlcm5hbAorICoKKyAqIEBwYXJhbSB0YWcgdW5pcXVlIHRhZyB0byBu
b3RpZnkgdGhlIGNsaWVudCBvbiB3aGljaCBvYmplY3QgdGhlIHNwZWxsaW5nIGlzIGJlaW5nIHBl
cmZvcm1lZAorICogQHBhcmFtIHdvcmQgdGhlIHdvcmQgdG8gZ2V0IGd1ZXNzZXMKKyAqIEByZXR1
cm4gYSBsaXN0IG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmdzIChhcyBjaGFyKikgYW5k
CisgKiAgICAgICAgIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVzdHJveWluZyB0aGVtLgor
ICovCitzdGF0aWMgRWluYV9MaXN0KiBvbldvcmRHdWVzc2VzKHVpbnQ2NF90IHRhZywgY29uc3Qg
Y2hhciogd29yZCkKK3sKKyAgICBFWFBFQ1RfRVEoZGVmYXVsdERvY3VtZW50VGFnLCB0YWcpOwor
ICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZE1pc3NwZWxsZWRXb3JkLCB3b3JkKTsKKworICAgIEVp
bmFfTGlzdCogc3VnZ2VzdGlvbnNGb3JXb3JkID0gMDsKKyAgICAvLyBGSVhNRTogRmlsbCB0aGUg
RWluYV9MaXN0IHdpdGggc3VnZ2VzdGlvbnMgZm9yIHRoZSBtaXNzcGVsbGVkIHdvcmQuCisgICAg
Y2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMud29yZEd1ZXNzZXMgPSB0cnVlOworCisgICAgcmV0dXJu
IHN1Z2dlc3Rpb25zRm9yV29yZDsKK30KKworLyoqCisgKiBBZGRzIHRoZSBAYSB3b3JkIHRvIHRo
ZSBzcGVsbCBjaGVja2VyIGRpY3Rpb25hcnkuCisgKgorICogQGludGVybmFsCisgKgorICogQHBh
cmFtIHRhZyB1bmlxdWUgdGFnIHRvIG5vdGlmeSB0aGUgY2xpZW50IG9uIHdoaWNoIG9iamVjdCB0
aGUgc3BlbGxpbmcgaXMgYmVpbmcgcGVyZm9ybWVkCisgKiBAcGFyYW0gd29yZCB0aGUgd29yZCB0
byBhZGQKKyAqLworc3RhdGljIHZvaWQgb25Xb3JkTGVhcm4odWludDY0X3QgdGFnLCBjb25zdCBj
aGFyKiB3b3JkKQoreworICAgIEFTU0VSVF9FUShkZWZhdWx0RG9jdW1lbnRUYWcsIHRhZyk7Cisg
ICAgQVNTRVJUX1NUUkVRKGV4cGVjdGVkTWlzc3BlbGxlZFdvcmQsIHdvcmQpOworICAgIGNhbGxi
YWNrc0V4ZWN1dGlvblN0YXRzLndvcmRMZWFybiA9IHRydWU7Cit9CisKKy8qKgorICogVGVsbHMg
dGhlIHNwZWxsIGNoZWNrZXIgdG8gaWdub3JlIGEgZ2l2ZW4gQGEgd29yZC4KKyAqCisgKiBAaW50
ZXJuYWwKKyAqCisgKiBAcGFyYW0gdGFnIHVuaXF1ZSB0YWcgdG8gbm90aWZ5IHRoZSBjbGllbnQg
b24gd2hpY2ggb2JqZWN0IHRoZSBzcGVsbGluZyBpcyBiZWluZyBwZXJmb3JtZWQKKyAqIEBwYXJh
bSB3b3JkIHRoZSB3b3JkIHRvIGlnbm9yZQorICovCitzdGF0aWMgdm9pZCBvbldvcmRJZ25vcmUo
dWludDY0X3QgdGFnLCBjb25zdCBjaGFyKiB3b3JkKQoreworICAgIEFTU0VSVF9FUShkZWZhdWx0
RG9jdW1lbnRUYWcsIHRhZyk7CisgICAgQVNTRVJUX1NUUkVRKGV4cGVjdGVkTWlzc3BlbGxlZFdv
cmQsIHdvcmQpOworICAgIGNhbGxiYWNrc0V4ZWN1dGlvblN0YXRzLndvcmRJZ25vcmUgPSB0cnVl
OworfQorCisvKioKKyAqIFRlc3Qgc2V0dGVyL2dldHRlciBmb3IgdGhlIGNvbnRpbm91cyBzcGVs
bCBjaGVja2luZzoKKyAqICAtIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5n
X2VuYWJsZWRfZ2V0CisgKiAgLSBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2lu
Z19lbmFibGVkX3NldAorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3NldHRpbmdz
X2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCkKK3sKKyAgICBld2tfc2V0dGluZ3Nf
Y29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldCh0cnVlKTsKKyNpZiBFTkFCTEUo
U1BFTExDSEVDSykKKyAgICBFWFBFQ1RfVFJVRShld2tfc2V0dGluZ3NfY29udGludW91c19zcGVs
bF9jaGVja2luZ19lbmFibGVkX2dldCgpKTsKKworICAgIC8vIFdoZW4gdGhlIHNwZWxsIGNoZWNr
aW5nIGhhcyBiZWVuIGVuYWJsZWQsIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHNldCAoaWYgdGhl
IHVzZXIKKyAgICAvLyBkaWRuJ3Qgc2V0IGFueSkuIFRoZSBsYW5ndWFnZXMgYXJlIGJlaW5nIGxv
YWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQgZm9yIHRoZW0uCisgICAgdGltZW91dFRpbWVyID0gZWNv
cmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOworICAg
IGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgRWluYV9MaXN0KiBsb2FkZWRMYW5ndWFn
ZXMgPSBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzX2dldCgpOworICAgIC8v
IE5vIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlL2luc3RhbGxlZC4KKyAgICBpZiAoIWxvYWRlZExh
bmd1YWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgRVhQRUNUX0VRKDEsIGVpbmFfbGlzdF9j
b3VudChsb2FkZWRMYW5ndWFnZXMpKTsKKworICAgIHZvaWQqIGRhdGE7CisgICAgRUlOQV9MSVNU
X0ZSRUUobG9hZGVkTGFuZ3VhZ2VzLCBkYXRhKQorICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSkpOworI2Vsc2UKKyAgICBFWFBFQ1RfRkFM
U0UoZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKSk7
CisjZW5kaWYKKworICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWRfc2V0KGZhbHNlKTsKKyAgICBFWFBFQ1RfRkFMU0UoZXdrX3NldHRpbmdzX2NvbnRpbnVv
dXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKSk7Cit9CisKKy8qKgorICogVGVzdCB3aGV0
aGVyIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgc3BlbGwgY2hlY2tpbmcgc2V0dGlu
ZyBoYXMgYmVlbiBjaGFuZ2VkLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX3Nl
dHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCkKK3sKKyAgICBl
d2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19jaGFuZ2VfY2Jfc2V0KG9uU2V0
dGluZ0NoYW5nZSk7CisKKyAgICBpc1NldHRpbmdFbmFibGVkID0gZXdrX3NldHRpbmdzX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKKyAgICBpc1NldHRpbmdFbmFibGVk
ID0gIWlzU2V0dGluZ0VuYWJsZWQ7CisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxf
Y2hlY2tpbmdfZW5hYmxlZF9zZXQoaXNTZXR0aW5nRW5hYmxlZCk7CisKKyAgICB0aW1lb3V0VGlt
ZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwg
MCk7CisKKyAgICAvLyBTdGFydCBwcm9jY2VzaW5nIEVjb3JlIGV2ZW50cywgdGhlIG5vdGlmaWNh
dGlvbiBhYm91dCB0aGUgY2hhbmdlIG9mIHRoZSBzcGVsbAorICAgIC8vIGNoZWNraW5nIHNldHRp
bmcgaXMgY2FsbGVkIG9uIGlkbGVyLgorICAgIC8vIFdlIGNhbid0IGNhbGwgZWNvcmVfbWFpbl9s
b29wX2l0ZXJhdGUgYmVjYXVzZSBpdCBkb2Vzbid0IHByb2Nlc3MgdGhlIGlkbGVycy4KKyAgICBl
Y29yZV9tYWluX2xvb3BfYmVnaW4oKTsKKworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIEVY
UEVDVF9GQUxTRSh0aW1lb3V0VGltZXIpOworI2Vsc2UKKyAgICBFWFBFQ1RfVFJVRSh0aW1lb3V0
VGltZXIpOworI2VuZGlmCisKKyAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxl
ZCBpZiB0aGUgc2V0dGluZyBvcHRpb24gaXMgYWxyZWFkeSBzZXQuCisgICAgaXNTZXR0aW5nRW5h
YmxlZCA9IGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfZ2V0
KCk7CisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9z
ZXQoaXNTZXR0aW5nRW5hYmxlZCk7CisKKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9h
ZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CisgICAgZWNvcmVfbWFp
bl9sb29wX2JlZ2luKCk7CisKKyAgICAvLyBXaGVuIHRoZSBTUEVMTENIRUNLIG1hY3JvIGlzIGRp
c2FibGVkIHRoZSBjYWxsYmFjayB3b24ndCBiZSBjYWxsZWQgdG9vLgorICAgIEVYUEVDVF9UUlVF
KHRpbWVvdXRUaW1lcik7CisKKyAgICAvLyBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxl
ZCBpZiB0aGUgdXNlciBoYXMgaW52YWxpZGF0ZWQgaXQuCisgICAgZXdrX3NldHRpbmdzX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfY2hhbmdlX2NiX3NldCgwKTsKKyAgICBpc1NldHRpbmdFbmFi
bGVkID0gZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQo
KTsKKyAgICBpc1NldHRpbmdFbmFibGVkID0gIWlzU2V0dGluZ0VuYWJsZWQ7CisgICAgZXdrX3Nl
dHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQoaXNTZXR0aW5nRW5h
YmxlZCk7CisKKyAgICB0aW1lb3V0VGltZXIgPSBlY29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVv
dXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7
CisKKyAgICAvLyBJZiB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZCwgdGhlIGNhbGxi
YWNrIGlzIG5vdCBzZXQuCisgICAgRVhQRUNUX1RSVUUodGltZW91dFRpbWVyKTsKK30KKworLyoq
CisgKiBUaGlzIHVuaXQgdGVzdCBzZXRzIGFsbCBhdmFpbGFibGUvaW5zdGFsbGVkIGRpY3Rpb25h
cmllcyBhbmQgdmVyaWZpZXMgdGhlbQorICogaWYgdGhleSBhcmUgaW4gdXNlLgorICogQWxsIHRo
ZSBkaWN0aW9uYXJpZXMgZnJvbSB0aGUgbGlzdCBjYW4gYmUgc2V0IHRvIHBlcmZvcm0gc3BlbGxj
aGVja2luZy4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19zZXR0aW5nc19zcGVs
bF9jaGVja2luZ19hdmFpbGFibGVfbGFuZ3VhZ2VzX2dldCkKK3sKKyAgICBFaW5hX0xpc3QqIGF2
YWlsYWJsZUxhbmd1YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19hdmFpbGFibGVf
bGFuZ3VhZ2VzX2dldCgpOworICAgIC8vIE5vIGRpY3Rpb25hcnkgaXMgYXZhaWxhYmxlL2luc3Rh
bGxlZCBvciB0aGUgU1BFTExDSEVDSyBtYWNybyBpcyBkaXNhYmxlZC4KKyAgICBpZiAoIWF2YWls
YWJsZUxhbmd1YWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSGVscGVyIHRvIGNyZWF0
ZSBvbmUgc3RyaW5nIHdpdGggY29tbWEgc2VwYXJhdGVkIGxhbmd1YWdlcy4KKyAgICB2b2lkKiBh
Y3R1YWwgPSAwOworICAgIFdURjo6U3RyaW5nQnVpbGRlciBsYW5ndWFnZXM7CisgICAgRWluYV9M
aXN0KiBsaXN0SXRlcmF0b3IgPSAwOworICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IGVpbmFfbGlz
dF9jb3VudChhdmFpbGFibGVMYW5ndWFnZXMpIC0gMTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAg
ICBFSU5BX0xJU1RfRk9SRUFDSChhdmFpbGFibGVMYW5ndWFnZXMsIGxpc3RJdGVyYXRvciwgYWN0
dWFsKSB7CisgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGFjdHVhbCkpOworICAgICAgICAvLyBBZGQgdGhlIGNvbW1hIGFmdGVyIGFsbCBidXQgdGhlIGxh
c3QgbGFuZ3VhZ2UgSURzLgorICAgICAgICBpZiAoaSsrICE9IGxhc3RJbmRleCkKKyAgICAgICAg
ICAgIGxhbmd1YWdlcy5hcHBlbmQoJywnKTsKKyAgICB9CisKKyAgICAvLyBTZXQgYWxsIGF2YWls
YWJsZSBsYW5ndWFnZXMuCisgICAgZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
c19zZXQobGFuZ3VhZ2VzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBMYW5n
dWFnZXMgYXJlIGJlaW5nIGxvYWRlZCBvbiB0aGUgaWRsZXIsIHdhaXQgZm9yIHRoZW0uCisgICAg
dGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRUaW1lb3V0SW5TZWNvbmRzLCBv
blRpbWVvdXQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgLy8gR2V0
IHRoZSBsYW5ndWFnZXMgaW4gdXNlLgorICAgIEVpbmFfTGlzdCogbG9hZGVkTGFuZ3VhZ2VzID0g
ZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlc19nZXQoKTsKKyAgICBBU1NFUlRf
RVEoZWluYV9saXN0X2NvdW50KGxvYWRlZExhbmd1YWdlcyksIGVpbmFfbGlzdF9jb3VudChhdmFp
bGFibGVMYW5ndWFnZXMpKTsKKworICAgIGkgPSAwOworICAgIHZvaWQqIGV4cGVjdGVkID0gMDsK
KyAgICAvLyBWZXJpZnkgd2hldGhlciB0aGUgbG9hZGVkIGxhbmd1YWdlcyBsaXN0IGlzIGVxdWFs
IHRvIHRoZSBhdmFpbGFibGUgbGFuZ3VhZ2VzIGxpc3QuCisgICAgRUlOQV9MSVNUX0ZPUkVBQ0go
bG9hZGVkTGFuZ3VhZ2VzLCBsaXN0SXRlcmF0b3IsIGFjdHVhbCkgeworICAgICAgICBleHBlY3Rl
ZCA9IGVpbmFfbGlzdF9udGgoYXZhaWxhYmxlTGFuZ3VhZ2VzLCBpKyspOworICAgICAgICBFWFBF
Q1RfU1RSRVEoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KGFjdHVhbCkpOworICAgIH0KKworICAgIC8vIERlbGV0ZSB0aGUgbGlzdHMu
CisgICAgRUlOQV9MSVNUX0ZSRUUoYXZhaWxhYmxlTGFuZ3VhZ2VzLCBhY3R1YWwpCisgICAgICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsK
KworICAgIEVJTkFfTElTVF9GUkVFKGxvYWRlZExhbmd1YWdlcywgYWN0dWFsKQorICAgICAgICBl
aW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWN0dWFsKSk7Cit9
CisKKy8qKgorICogSGVyZSB3ZSB0ZXN0IHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOgorICogIC0g
c2V0dGluZyB0aGUgZGVmYXVsdCBsYW5ndWFnZSwKKyAqICAtIGlmIHR3byBhcmJpdHJhcmlseSBz
ZWxlY3RlZCBkaWN0aW9uYXJpZXMgYXJlIHNldCBjb3JyZWN0bHkuCisgKi8KK1RFU1RfRihFV0sy
VW5pdFRlc3RCYXNlLCBld2tfc2V0dGluZ3Nfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKQorewor
ICAgIC8vIFNldCB0aGUgZGVmYXVsdCBsYW5ndWFnZS4KKyAgICBld2tfc2V0dGluZ3Nfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzX3NldCgwKTsKKworICAgIC8vIExhbmd1YWdlcyBhcmUgYmVpbmcg
bG9hZGVkIG9uIHRoZSBpZGxlciwgd2FpdCBmb3IgdGhlbS4KKyAgICB0aW1lb3V0VGltZXIgPSBl
Y29yZV90aW1lcl9hZGQoZGVmYXVsdFRpbWVvdXRJblNlY29uZHMsIG9uVGltZW91dCwgMCk7Cisg
ICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7CisKKyAgICBFaW5hX0xpc3QqIGxvYWRlZExhbmd1
YWdlcyA9IGV3a19zZXR0aW5nc19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfZ2V0KCk7CisgICAg
Ly8gTm8gZGljdGlvbmFyeSBpcyBhdmFpbGFibGUvaW5zdGFsbGVkIG9yIHRoZSBTUEVMTENIRUNL
IG1hY3JvIGlzIGRpc2FibGVkLgorICAgIGlmICghbG9hZGVkTGFuZ3VhZ2VzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlRfRVEoMSwgZWluYV9saXN0X2NvdW50KGxvYWRlZExhbmd1YWdl
cykpOworCisgICAgLy8gRGVsZXRlIHRoZSBsaXN0LgorICAgIHZvaWQqIGFjdHVhbCA9IDA7Cisg
ICAgRUlOQV9MSVNUX0ZSRUUobG9hZGVkTGFuZ3VhZ2VzLCBhY3R1YWwpCisgICAgICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhY3R1YWwpKTsKKworICAg
IC8vIEdldCB0aGUgZmlyc3QgYW5kIGxhc3QgbGFuZ3VhZ2UgZnJvbSBpbnN0YWxsZWQgZGljdGlv
bmFyaWVzLgorICAgIEVpbmFfTGlzdCogYXZhaWxhYmxlTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdz
X3NwZWxsX2NoZWNraW5nX2F2YWlsYWJsZV9sYW5ndWFnZXNfZ2V0KCk7CisgICAgdW5zaWduZWQg
bnVtYmVyT2ZBdmFpbGFibGVMYW5ndWFnZXMgPSBlaW5hX2xpc3RfY291bnQoYXZhaWxhYmxlTGFu
Z3VhZ2VzKTsKKyAgICAvLyBXZSBhc3N1bWUgdGhhdCB1c2VyIGhhcyBpbnN0YWxsZWQgYXQgbGVz
dCB0d28gZGljdGlvbmFyaWVzLgorICAgIGlmIChudW1iZXJPZkF2YWlsYWJsZUxhbmd1YWdlcyA8
IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNoYXIqIGZpcnN0RXhwZWN0ZWQgPSBz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZWluYV9saXN0X250aChhdmFpbGFibGVMYW5ndWFnZXMs
IDApKTsKKyAgICBjb25zdCBjaGFyKiBsYXN0RXhwZWN0ZWQgPSBzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oZWluYV9saXN0X2RhdGFfZ2V0KGVpbmFfbGlzdF9sYXN0KGF2YWlsYWJsZUxhbmd1YWdl
cykpKTsKKworICAgIC8vIENhc2Ugc2Vuc2l0aXZpdHkgb2YgZGljdGlvbmFyaWVzIGRvZXNuJ3Qg
YWZmZWN0IG9uIGxvYWRpbmcgdGhlIGRpY3Rpb25hcmllcywKKyAgICAvLyB0aGUgRW5jaGFudCBs
aWJyYXJ5IHdpbGwgJ25vcm1hbGl6ZScgdGhlbS4KKyAgICBXVEY6OlN0cmluZ0J1aWxkZXIgbGFu
Z3VhZ2VzOworICAgIGxhbmd1YWdlcy5hcHBlbmQoU3RyaW5nKGZpcnN0RXhwZWN0ZWQpLnVwcGVy
KCkpOworICAgIGxhbmd1YWdlcy5hcHBlbmQoJywnKTsKKyAgICBsYW5ndWFnZXMuYXBwZW5kKFN0
cmluZyhsYXN0RXhwZWN0ZWQpLmxvd2VyKCkpOworCisgICAgLy8gU2V0IGJvdGggbGFuZ3VhZ2Vz
ICh0aGUgZmlyc3QgYW5kIHRoZSBsYXN0KSBmcm9tIHRoZSBsaXN0LgorICAgIGV3a19zZXR0aW5n
c19zcGVsbF9jaGVja2luZ19sYW5ndWFnZXNfc2V0KGxhbmd1YWdlcy50b1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworCisgICAgdGltZW91dFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGRlZmF1bHRU
aW1lb3V0SW5TZWNvbmRzLCBvblRpbWVvdXQsIDApOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdp
bigpOworCisgICAgbG9hZGVkTGFuZ3VhZ2VzID0gZXdrX3NldHRpbmdzX3NwZWxsX2NoZWNraW5n
X2xhbmd1YWdlc19nZXQoKTsKKyAgICBBU1NFUlRfRVEoMiwgZWluYV9saXN0X2NvdW50KGxvYWRl
ZExhbmd1YWdlcykpOworCisgICAgRVhQRUNUX1NUUkVRKGZpcnN0RXhwZWN0ZWQsIHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihlaW5hX2xpc3RfbnRoKGxvYWRlZExhbmd1YWdlcywgMCkpKTsKKyAg
ICBFWFBFQ1RfU1RSRVEobGFzdEV4cGVjdGVkLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZWlu
YV9saXN0X250aChsb2FkZWRMYW5ndWFnZXMsIDEpKSk7CisKKyAgICAvLyBEZWxldGUgdGhlIGxp
c3RzLgorICAgIEVJTkFfTElTVF9GUkVFKGF2YWlsYWJsZUxhbmd1YWdlcywgYWN0dWFsKQorICAg
ICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYWN0dWFs
KSk7CisKKyAgICBFSU5BX0xJU1RfRlJFRShsb2FkZWRMYW5ndWFnZXMsIGFjdHVhbCkKKyAgICAg
ICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGFjdHVhbCkp
OworfQorCisvKioKKyAqIFRlc3Qgd2hldGhlciB0aGUgY2xpZW50J3MgY2FsbGJhY2tzIGFyZW4n
dCBjYWxsZWQgKGlmIG5vdCBzcGVjaWZpZWQpLgorICovCitURVNUX0YoRVdLMlVuaXRUZXN0QmFz
ZSwgZXdrX3RleHRfY2hlY2tlcikKK3sKKyAgICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRz
KCk7CisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9z
ZXQodHJ1ZSk7CisKKyAgICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJs
Rm9yUmVzb3VyY2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIpLmRhdGEoKSkpOworCisgICAgLy8gSWYg
dXNlciBkb2Vzbid0IHNwZWNpZnkgY2FsbGJhY2sgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBz
cGVsbGluZworICAgIC8vIHRoZSBkZWZhdWx0IFdlYktpdCBpbXBsZW1lbnRhdGlvbiAoYmFzZWQg
b24gdGhlIEVuY2hhbnQgbGlicmFyeSkgd2lsbCBiZSB1c2VkLgorICAgIEFTU0VSVF9GQUxTRShj
YWxsYmFja3NFeGVjdXRpb25TdGF0cy5zcGVsbERvY3VtZW50VGFnKTsKKyAgICBBU1NFUlRfRkFM
U0UoY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxEb2N1bWVudFRhZ0Nsb3NlKTsKKyAgICBB
U1NFUlRfRkFMU0UoY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMuc3BlbGxpbmdDaGVjayk7CisKKyAg
ICAvLyBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gdmVyaWZ5IG90aGVycyBjYWxsYmFja3MgKG9u
V29yZEd1ZXNzZXMsCisgICAgLy8gb25Xb3JkTGVhcm4sIG9uV29yZElnbm9yZSkgYXMgdGhleSBu
ZWVkIHRoZSBjb250ZXh0IG1lbnUgZmVhdHVyZQorICAgIC8vIHdoaWNoIGlzIG5vdCBpbXBsZW1l
bnRlZCBmb3IgV0syLUVGTC4KK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhlIGNsaWVudCdz
IGNhbGxiYWNrcyAob25TcGVsbERvY3VtZW50VGFnLCBvblNwZWxsRG9jdW1lbnRUYWdDbG9zZSkg
YXJlIGNhbGxlZC4KKyAqLworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNr
ZXJfdW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZykKK3sKKyAgICByZXNldENhbGxiYWNrc0V4ZWN1
dGlvblN0YXRzKCk7CisgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7CisgICAgZXdrX3NldHRp
bmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQodHJ1ZSk7CisKKyAgICBl
d2tfdGV4dF9jaGVja2VyX3VuaXF1ZV9zcGVsbF9kb2N1bWVudF90YWdfZ2V0X2NiX3NldChvblNw
ZWxsRG9jdW1lbnRUYWcpOworICAgIGV3a190ZXh0X2NoZWNrZXJfdW5pcXVlX3NwZWxsX2RvY3Vt
ZW50X3RhZ19jbG9zZV9jYl9zZXQob25TcGVsbERvY3VtZW50VGFnQ2xvc2UpOworCisgICAgQVNT
RVJUX1RSVUUobG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJzcGVsbGlu
Z190ZXN0Lmh0bWwiKS5kYXRhKCkpKTsKKworICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxi
YWNrIHdhcyBjYWxsZWQuCisgICAgQVNTRVJUX1RSVUUoY2FsbGJhY2tzRXhlY3V0aW9uU3RhdHMu
c3BlbGxEb2N1bWVudFRhZyk7CisgICAgLy8gSXQncyBub3QgcG9zc2libGUgdG8gY2hlY2sgd2hl
dGhlciBvblNwZWxsRG9jdW1lbnRUYWdDbG9zZSB3YXMgY2FsbGVkIGhlcmUsIGJlY2F1c2UKKyAg
ICAvLyBpdCdzIGludm9rZWQgd2hlbiBXZWJQYWdlIGlzIGJlaW5nIGRlc3Ryb3llZC4KKyAgICAv
LyBJdCBzaG91bGQgYmUgdmVyaWZpZWQgZm9yIGV4YW1wbGUgd2hlbiB2aWV3IGlzIGZyZWVkLgor
fQorCisvKioKKyAqIFRlc3Qgd2hldGhlciB0aGUgY2xpZW50J3MgY2FsbGJhY2sgKG9uU3BlbGxp
bmdDaGVjaykgaXMgY2FsbGVkIHdoZW4KKyAqIHRoZSB3b3JkIHRvIGlucHV0IGZpZWxkIHdhcyBw
dXQuCisgKi8KK1RFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3N0cmlu
Z19zcGVsbGluZ19jaGVja19jYl9zZXQpCit7CisgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25T
dGF0cygpOworICAgIGRlZmF1bHRWaWV3ID0gd2ViVmlldygpOworICAgIGV3a19zZXR0aW5nc19j
b250aW51b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworCisgICAgZXdrX3Rl
eHRfY2hlY2tlcl9zdHJpbmdfc3BlbGxpbmdfY2hlY2tfY2Jfc2V0KG9uU3BlbGxpbmdDaGVjayk7
CisKKyAgICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3Vy
Y2UoInNwZWxsaW5nX3Rlc3QuaHRtbCIpLmRhdGEoKSkpOworCisgICAgLy8gQ2hlY2sgd2hldGhl
ciB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC4KKyAgICBBU1NFUlRfVFJVRShjYWxsYmFja3NFeGVj
dXRpb25TdGF0cy5zcGVsbGluZ0NoZWNrKTsKK30KKworLyoqCisgKiBUZXN0IHdoZXRoZXIgdGhl
IGNsaWVudCdzIGNhbGxiYWNrIChvbldvcmRHdWVzc2VzKSBpcyBjYWxsZWQgd2hlbgorICogdGhl
IGNvbnRleHQgbWVudSB3YXMgc2hvd24gb24gdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAqLworVEVT
VF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a190ZXh0X2NoZWNrZXJfd29yZF9ndWVzc2VzX2dldF9j
Yl9zZXQpCit7CisgICAgcmVzZXRDYWxsYmFja3NFeGVjdXRpb25TdGF0cygpOworICAgIGRlZmF1
bHRWaWV3ID0gd2ViVmlldygpOworICAgIGV3a19zZXR0aW5nc19jb250aW51b3VzX3NwZWxsX2No
ZWNraW5nX2VuYWJsZWRfc2V0KHRydWUpOworCisgICAgZXdrX3RleHRfY2hlY2tlcl93b3JkX2d1
ZXNzZXNfZ2V0X2NiX3NldChvbldvcmRHdWVzc2VzKTsKKworICAgIEFTU0VSVF9UUlVFKGxvYWRV
cmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgic3BlbGxpbmdfdGVzdC5odG1sIiku
ZGF0YSgpKSk7CisKKyAgICAvKiBGSVhNRToKKyAgICAgICAgMSkgSW52b2tlIHRoZSBjb250ZXh0
IG1lbnUgb24gdGhlIG1pc3NwZWxsZWQgd29yZCAobm90IGltcGxlbWVudGVkIGZvciBXSzIpLAor
ICAgICAgICAgICB0aGUgd29yZCBoYXMgdG8gYmUgc2VsZWN0ZWQgZmlyc3QuCisgICAgICAgIDIp
IEZpbGwgdGhlIHN1Z2dlc3Rpb24gbGlzdCBpbiB0aGUgb25Xb3JkR3Vlc3NlcyBjYWxsYmFjay4K
KyAgICAgICAgMykgQ29tcGFyZSBjb250ZXh0IG1lbnUgc3VnZ2VzdGlvbnMgdG8gdGhlIHN1Z2dl
c3Rpb24gbGlzdC4KKyAgICAgICAgNCkgQ2hlY2sgd2hldGhlciB0aGUgY2FsbGJhY2sgd2FzIGNh
bGxlZC4gKi8gICAgCit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBjYWxs
YmFjayAob25Xb3JkTGVhcm4pIGlzIGNhbGxlZCB3aGVuCisgKiB0aGUgY29udGV4dCBtZW51IG9w
dGlvbiAiTGVhcm4gc3BlbGxpbmciIHdhcyBjaG9vc2VuLgorICovCitURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX3RleHRfY2hlY2tlcl93b3JkX2xlYXJuX2NiX3NldCkKK3sKKyAgICByZXNl
dENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CisgICAgZGVmYXVsdFZpZXcgPSB3ZWJWaWV3KCk7
CisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9zZXQo
dHJ1ZSk7CisKKyAgICBld2tfdGV4dF9jaGVja2VyX3dvcmRfbGVhcm5fY2Jfc2V0KG9uV29yZExl
YXJuKTsKKworICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT51cmxGb3JS
ZXNvdXJjZSgic3BlbGxpbmdfdGVzdC5odG1sIikuZGF0YSgpKSk7CisKKyAgICAvKiBGSVhNRToK
KyAgICAgICAgMSkgSW52b2tlIHRoZSBjb250ZXh0IG1lbnUgb24gdGhlIG1pc3NwZWxsZWQgd29y
ZCAobm90IGltcGxlbWVudGVkIGZvciBXSzIpLAorICAgICAgICAgICB0aGUgd29yZCBoYXMgdG8g
YmUgc2VsZWN0ZWQgZmlyc3QuCisgICAgICAgIDIpIENoZWNrIHdoZXRoZXIgdGhlIGNhbGxiYWNr
IHdhcyBjYWxsZWQuICovCit9CisKKy8qKgorICogVGVzdCB3aGV0aGVyIHRoZSBjbGllbnQncyBj
YWxsYmFjayAob25Xb3JkSWdub3JlKSBpcyBjYWxsZWQgd2hlbgorICogdGhlIGNvbnRleHQgbWVu
dSBvcHRpb24gIklnbm9yZSBzcGVsbGluZyIgd2FzIGNob29zZW4uCisgKi8KK1RFU1RfRihFV0sy
VW5pdFRlc3RCYXNlLCBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldCkKK3sKKyAg
ICByZXNldENhbGxiYWNrc0V4ZWN1dGlvblN0YXRzKCk7CisgICAgZGVmYXVsdFZpZXcgPSB3ZWJW
aWV3KCk7CisgICAgZXdrX3NldHRpbmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZF9zZXQodHJ1ZSk7CisKKyAgICBld2tfdGV4dF9jaGVja2VyX3dvcmRfaWdub3JlX2NiX3NldChv
bldvcmRJZ25vcmUpOworCisgICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMoZW52aXJvbm1lbnQt
PnVybEZvclJlc291cmNlKCJzcGVsbGluZ190ZXN0Lmh0bWwiKS5kYXRhKCkpKTsKKworICAgIC8q
IEZJWE1FOgorICAgICAgICAxKSBJbnZva2UgdGhlIGNvbnRleHQgbWVudSBvbiB0aGUgbWlzc3Bl
bGxlZCB3b3JkIChub3QgaW1wbGVtZW50ZWQgZm9yIFdLMiksCisgICAgICAgICAgIHRoZSB3b3Jk
IGhhcyB0byBiZSBzZWxlY3RlZCBmaXJzdC4KKyAgICAgICAgMikgQ2hlY2sgd2hldGhlciB0aGUg
Y2FsbGJhY2sgd2FzIGNhbGxlZC4gKi8KK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>