<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugzilla.mozilla.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="20260825.1"
          urlbase="https://bugzilla.mozilla.org/"
          
          maintainer="bmo-mods@mozilla.com"
>

    <bug>
          <bug_id>639391</bug_id>
          
          <filed_via>unknown</filed_via>
          <creation_ts>2011-03-06 15:45:08 -0800</creation_ts>
          <short_desc>Make nsMediaDecoder::GetBuffered() implementations threadsafe</short_desc>
          <delta_ts>2011-05-02 22:58:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>Components</classification>
          <product>Core</product>
          <component>Audio/Video</component>
          <version>Trunk</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_type>defect</bug_type>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>--</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>mozilla5</target_milestone>
          <dependson>610267</dependson>
    
    <dependson>629705</dependson>
    
    <dependson>645773</dependson>
    
    <dependson>654371</dependson>
          <blocked>628665</blocked>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</reporter>
          <assigned_to name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</assigned_to>
          <cc>emanuel.hoogeveen</cc>
    
    <cc>kinetik</cc>
    
    <cc>matjk7</cc>
    
    <cc>roc</cc>
    
    <cc>u279076</cc>
          
          <cf_tracking_e10s>---</cf_tracking_e10s>
          <cf_blocking_webextensions>---</cf_blocking_webextensions>
          <cf_tracking_p11>---</cf_tracking_p11>
          <cf_firefox_messaging_system>---</cf_firefox_messaging_system>
          <cf_root_cause>---</cf_root_cause>
          <cf_backlog>---</cf_backlog>
          <cf_tracking_win>---</cf_tracking_win>
          <cf_bmo_component_move>---</cf_bmo_component_move>
          <cf_geckoview>---</cf_geckoview>
          <cf_data_science_product_support_area>---</cf_data_science_product_support_area>
          <cf_platform_rel>---</cf_platform_rel>
          <cf_tracking_firefox5>---</cf_tracking_firefox5>
          <cf_status_firefox5>---</cf_status_firefox5>
          <cf_tracking_firefox6>---</cf_tracking_firefox6>
          <cf_status_firefox6>---</cf_status_firefox6>
          <cf_tracking_firefox7>---</cf_tracking_firefox7>
          <cf_status_firefox7>---</cf_status_firefox7>
          <cf_tracking_firefox8>---</cf_tracking_firefox8>
          <cf_status_firefox8>---</cf_status_firefox8>
          <cf_tracking_firefox9>---</cf_tracking_firefox9>
          <cf_a11y_review_project_flag>---</cf_a11y_review_project_flag>
          <cf_status_firefox9>---</cf_status_firefox9>
          <cf_tracking_firefox10>---</cf_tracking_firefox10>
          <cf_status_firefox10>---</cf_status_firefox10>
          <cf_tracking_firefox11>---</cf_tracking_firefox11>
          <cf_status_firefox11>---</cf_status_firefox11>
          <cf_tracking_firefox12>---</cf_tracking_firefox12>
          <cf_status_firefox12>---</cf_status_firefox12>
          <cf_tracking_firefox13>---</cf_tracking_firefox13>
          <cf_status_firefox13>---</cf_status_firefox13>
          <cf_tracking_firefox14>---</cf_tracking_firefox14>
          <cf_status_firefox14>---</cf_status_firefox14>
          <cf_accessibility_severity>---</cf_accessibility_severity>
          <cf_tracking_firefox15>---</cf_tracking_firefox15>
          <cf_status_firefox15>---</cf_status_firefox15>
          <cf_tracking_firefox16>---</cf_tracking_firefox16>
          <cf_status_firefox16>---</cf_status_firefox16>
          <cf_tracking_firefox17>---</cf_tracking_firefox17>
          <cf_status_firefox17>---</cf_status_firefox17>
          <cf_tracking_firefox18>---</cf_tracking_firefox18>
          <cf_status_firefox18>---</cf_status_firefox18>
          <cf_tracking_firefox19>---</cf_tracking_firefox19>
          <cf_status_firefox19>---</cf_status_firefox19>
          <cf_install_update_workflow>---</cf_install_update_workflow>
          <cf_tracking_firefox20>---</cf_tracking_firefox20>
          <cf_status_firefox20>---</cf_status_firefox20>
          <cf_tracking_firefox21>---</cf_tracking_firefox21>
          <cf_status_firefox21>---</cf_status_firefox21>
          <cf_tracking_firefox22>---</cf_tracking_firefox22>
          <cf_status_firefox22>---</cf_status_firefox22>
          <cf_tracking_firefox23>---</cf_tracking_firefox23>
          <cf_status_firefox23>---</cf_status_firefox23>
          <cf_tracking_firefox24>---</cf_tracking_firefox24>
          <cf_performance_impact>---</cf_performance_impact>
          <cf_status_firefox24>---</cf_status_firefox24>
          <cf_tracking_firefox25>---</cf_tracking_firefox25>
          <cf_status_firefox25>---</cf_status_firefox25>
          <cf_tracking_firefox26>---</cf_tracking_firefox26>
          <cf_status_firefox26>---</cf_status_firefox26>
          <cf_tracking_firefox27>---</cf_tracking_firefox27>
          <cf_status_firefox27>---</cf_status_firefox27>
          <cf_tracking_firefox28>---</cf_tracking_firefox28>
          <cf_status_firefox28>---</cf_status_firefox28>
          <cf_tracking_firefox29>---</cf_tracking_firefox29>
          <cf_size_estimate>---</cf_size_estimate>
          <cf_status_firefox29>---</cf_status_firefox29>
          <cf_tracking_firefox30>---</cf_tracking_firefox30>
          <cf_status_firefox30>---</cf_status_firefox30>
          <cf_tracking_firefox31>---</cf_tracking_firefox31>
          <cf_status_firefox31>---</cf_status_firefox31>
          <cf_tracking_firefox32>---</cf_tracking_firefox32>
          <cf_status_firefox32>---</cf_status_firefox32>
          <cf_tracking_firefox33>---</cf_tracking_firefox33>
          <cf_status_firefox33>---</cf_status_firefox33>
          <cf_tracking_firefox34>---</cf_tracking_firefox34>
          <cf_webcompat_priority>---</cf_webcompat_priority>
          <cf_status_firefox34>---</cf_status_firefox34>
          <cf_tracking_firefox35>---</cf_tracking_firefox35>
          <cf_status_firefox35>---</cf_status_firefox35>
          <cf_tracking_firefox36>---</cf_tracking_firefox36>
          <cf_status_firefox36>---</cf_status_firefox36>
          <cf_tracking_firefox37>---</cf_tracking_firefox37>
          <cf_status_firefox37>---</cf_status_firefox37>
          <cf_tracking_firefox38>---</cf_tracking_firefox38>
          <cf_status_firefox38>---</cf_status_firefox38>
          <cf_tracking_firefox38_0_5>---</cf_tracking_firefox38_0_5>
          <cf_tracking_firefox39>---</cf_tracking_firefox39>
          <cf_webcompat_score>---</cf_webcompat_score>
          <cf_status_firefox38_0_5>---</cf_status_firefox38_0_5>
          <cf_status_firefox39>---</cf_status_firefox39>
          <cf_tracking_firefox40>---</cf_tracking_firefox40>
          <cf_status_firefox40>---</cf_status_firefox40>
          <cf_tracking_firefox41>---</cf_tracking_firefox41>
          <cf_status_firefox41>---</cf_status_firefox41>
          <cf_tracking_firefox42>---</cf_tracking_firefox42>
          <cf_status_firefox42>---</cf_status_firefox42>
          <cf_tracking_firefox43>---</cf_tracking_firefox43>
          <cf_status_firefox43>---</cf_status_firefox43>
          <cf_tracking_firefox44>---</cf_tracking_firefox44>
          <cf_status_firefox44>---</cf_status_firefox44>
          <cf_tracking_firefox45>---</cf_tracking_firefox45>
          <cf_status_firefox45>---</cf_status_firefox45>
          <cf_tracking_firefox46>---</cf_tracking_firefox46>
          <cf_status_firefox46>---</cf_status_firefox46>
          <cf_tracking_firefox47>---</cf_tracking_firefox47>
          <cf_status_firefox47>---</cf_status_firefox47>
          <cf_tracking_firefox48>---</cf_tracking_firefox48>
          <cf_status_firefox48>---</cf_status_firefox48>
          <cf_tracking_firefox49>---</cf_tracking_firefox49>
          <cf_status_firefox49>---</cf_status_firefox49>
          <cf_tracking_esr10>---</cf_tracking_esr10>
          <cf_status_esr10>---</cf_status_esr10>
          <cf_tracking_firefox_esr17>---</cf_tracking_firefox_esr17>
          <cf_status_firefox_esr17>---</cf_status_firefox_esr17>
          <cf_tracking_firefox_esr24>---</cf_tracking_firefox_esr24>
          <cf_status_firefox_esr24>---</cf_status_firefox_esr24>
          <cf_tracking_firefox_esr31>---</cf_tracking_firefox_esr31>
          <cf_status_firefox_esr31>---</cf_status_firefox_esr31>
          <cf_tracking_firefox_esr38>---</cf_tracking_firefox_esr38>
          <cf_status_firefox_esr38>---</cf_status_firefox_esr38>
          <cf_tracking_firefox_esr45>---</cf_tracking_firefox_esr45>
          <cf_status_firefox_esr45>---</cf_status_firefox_esr45>
          <cf_tracking_b2g18>---</cf_tracking_b2g18>
          <cf_status_b2g18>---</cf_status_b2g18>
          <cf_status_b2g30>---</cf_status_b2g30>
          <cf_status_b2g18_1_0_0>---</cf_status_b2g18_1_0_0>
          <cf_status_b2g18_1_0_1>---</cf_status_b2g18_1_0_1>
          <cf_status_b2g_1_1_hd>---</cf_status_b2g_1_1_hd>
          <cf_tracking_b2g_v1_2>---</cf_tracking_b2g_v1_2>
          <cf_status_b2g_1_2>---</cf_status_b2g_1_2>
          <cf_tracking_b2g_v1_3>---</cf_tracking_b2g_v1_3>
          <cf_status_b2g_1_3>---</cf_status_b2g_1_3>
          <cf_status_b2g_1_3t>---</cf_status_b2g_1_3t>
          <cf_blocking_20>---</cf_blocking_20>
          <cf_status_b2g_1_4>---</cf_status_b2g_1_4>
          <cf_status_20>---</cf_status_20>
          <cf_status_b2g_2_0>---</cf_status_b2g_2_0>
          <cf_status_b2g_2_0m>---</cf_status_b2g_2_0m>
          <cf_status_b2g_2_1>---</cf_status_b2g_2_1>
          <cf_status_b2g_2_1_s>---</cf_status_b2g_2_1_s>
          <cf_status_b2g_2_2>---</cf_status_b2g_2_2>
          <cf_status_b2g_2_5>---</cf_status_b2g_2_5>
          <cf_status_b2g_2_6>---</cf_status_b2g_2_6>
          <cf_status_b2g_2_2r>---</cf_status_b2g_2_2r>
          <cf_blocking_192>---</cf_blocking_192>
          <cf_status_192>---</cf_status_192>
          <cf_blocking_191>---</cf_blocking_191>
          <cf_tracking_fxios>---</cf_tracking_fxios>
          <cf_tracking_nss>---</cf_tracking_nss>
          <cf_status_nss>---</cf_status_nss>
          <cf_tracking_firefox_relnote>---</cf_tracking_firefox_relnote>
          <cf_status_b2g_master>---</cf_status_b2g_master>
          <cf_blocking_fx>---</cf_blocking_fx>
          <cf_tracking_thunderbird_relnote>---</cf_tracking_thunderbird_relnote>
          <cf_status_191>---</cf_status_191>
          <cf_tracking_relnote_b2g>---</cf_tracking_relnote_b2g>
          <cf_status_conduit_push>---</cf_status_conduit_push>
          <cf_tracking_conduit_push>---</cf_tracking_conduit_push>
          <cf_tracking_firefox_sumo>---</cf_tracking_firefox_sumo>
          <cf_status_bmo_push>---</cf_status_bmo_push>
          <cf_tracking_bmo_push>---</cf_tracking_bmo_push>
          <cf_blocking_fennec10>---</cf_blocking_fennec10>
          <cf_blocking_fennec>---</cf_blocking_fennec>
          <cf_blocking_thunderbird33>---</cf_blocking_thunderbird33>
          <cf_status_thunderbird33>---</cf_status_thunderbird33>
          <cf_blocking_thunderbird32>---</cf_blocking_thunderbird32>
          <cf_status_thunderbird32>---</cf_status_thunderbird32>
          <cf_blocking_thunderbird31>---</cf_blocking_thunderbird31>
          <cf_status_thunderbird31>---</cf_status_thunderbird31>
          <cf_blocking_thunderbird30>---</cf_blocking_thunderbird30>
          <cf_status_thunderbird30>---</cf_status_thunderbird30>
          <cf_tracking_thunderbird6>---</cf_tracking_thunderbird6>
          <cf_status_thunderbird6>---</cf_status_thunderbird6>
          <cf_tracking_thunderbird7>---</cf_tracking_thunderbird7>
          <cf_status_thunderbird7>---</cf_status_thunderbird7>
          <cf_tracking_thunderbird8>---</cf_tracking_thunderbird8>
          <cf_status_thunderbird8>---</cf_status_thunderbird8>
          <cf_tracking_thunderbird9>---</cf_tracking_thunderbird9>
          <cf_status_thunderbird9>---</cf_status_thunderbird9>
          <cf_tracking_thunderbird10>---</cf_tracking_thunderbird10>
          <cf_status_thunderbird10>---</cf_status_thunderbird10>
          <cf_tracking_thunderbird11>---</cf_tracking_thunderbird11>
          <cf_status_thunderbird11>---</cf_status_thunderbird11>
          <cf_tracking_thunderbird12>---</cf_tracking_thunderbird12>
          <cf_status_thunderbird12>---</cf_status_thunderbird12>
          <cf_tracking_thunderbird13>---</cf_tracking_thunderbird13>
          <cf_status_thunderbird13>---</cf_status_thunderbird13>
          <cf_tracking_thunderbird14>---</cf_tracking_thunderbird14>
          <cf_status_thunderbird14>---</cf_status_thunderbird14>
          <cf_tracking_thunderbird15>---</cf_tracking_thunderbird15>
          <cf_status_thunderbird15>---</cf_status_thunderbird15>
          <cf_tracking_thunderbird16>---</cf_tracking_thunderbird16>
          <cf_status_thunderbird16>---</cf_status_thunderbird16>
          <cf_tracking_thunderbird17>---</cf_tracking_thunderbird17>
          <cf_status_thunderbird17>---</cf_status_thunderbird17>
          <cf_tracking_thunderbird18>---</cf_tracking_thunderbird18>
          <cf_status_thunderbird18>---</cf_status_thunderbird18>
          <cf_tracking_thunderbird19>---</cf_tracking_thunderbird19>
          <cf_status_thunderbird19>---</cf_status_thunderbird19>
          <cf_tracking_thunderbird20>---</cf_tracking_thunderbird20>
          <cf_status_thunderbird20>---</cf_status_thunderbird20>
          <cf_tracking_thunderbird21>---</cf_tracking_thunderbird21>
          <cf_status_thunderbird21>---</cf_status_thunderbird21>
          <cf_tracking_thunderbird22>---</cf_tracking_thunderbird22>
          <cf_status_thunderbird22>---</cf_status_thunderbird22>
          <cf_tracking_thunderbird23>---</cf_tracking_thunderbird23>
          <cf_status_thunderbird23>---</cf_status_thunderbird23>
          <cf_tracking_thunderbird24>---</cf_tracking_thunderbird24>
          <cf_status_thunderbird24>---</cf_status_thunderbird24>
          <cf_tracking_thunderbird25>---</cf_tracking_thunderbird25>
          <cf_status_thunderbird25>---</cf_status_thunderbird25>
          <cf_tracking_thunderbird26>---</cf_tracking_thunderbird26>
          <cf_status_thunderbird26>---</cf_status_thunderbird26>
          <cf_tracking_thunderbird27>---</cf_tracking_thunderbird27>
          <cf_status_thunderbird27>---</cf_status_thunderbird27>
          <cf_tracking_thunderbird28>---</cf_tracking_thunderbird28>
          <cf_status_thunderbird28>---</cf_status_thunderbird28>
          <cf_tracking_thunderbird29>---</cf_tracking_thunderbird29>
          <cf_status_thunderbird29>---</cf_status_thunderbird29>
          <cf_tracking_thunderbird_30>---</cf_tracking_thunderbird_30>
          <cf_status_thunderbird_30>---</cf_status_thunderbird_30>
          <cf_tracking_thunderbird_31>---</cf_tracking_thunderbird_31>
          <cf_status_thunderbird_31>---</cf_status_thunderbird_31>
          <cf_tracking_thunderbird_32>---</cf_tracking_thunderbird_32>
          <cf_status_thunderbird_32>---</cf_status_thunderbird_32>
          <cf_tracking_thunderbird_esr10>---</cf_tracking_thunderbird_esr10>
          <cf_status_thunderbird_esr10>---</cf_status_thunderbird_esr10>
          <cf_tracking_thunderbird_esr17>---</cf_tracking_thunderbird_esr17>
          <cf_status_thunderbird_esr17>---</cf_status_thunderbird_esr17>
          <cf_tracking_thunderbird_33>---</cf_tracking_thunderbird_33>
          <cf_status_thunderbird_33>---</cf_status_thunderbird_33>
          <cf_tracking_thunderbird_34>---</cf_tracking_thunderbird_34>
          <cf_status_thunderbird_34>---</cf_status_thunderbird_34>
          <cf_tracking_thunderbird_35>---</cf_tracking_thunderbird_35>
          <cf_status_thunderbird_35>---</cf_status_thunderbird_35>
          <cf_tracking_thunderbird_36>---</cf_tracking_thunderbird_36>
          <cf_status_thunderbird_36>---</cf_status_thunderbird_36>
          <cf_tracking_thunderbird_37>---</cf_tracking_thunderbird_37>
          <cf_status_thunderbird_37>---</cf_status_thunderbird_37>
          <cf_tracking_thunderbird_38>---</cf_tracking_thunderbird_38>
          <cf_status_thunderbird_38>---</cf_status_thunderbird_38>
          <cf_tracking_thunderbird_39>---</cf_tracking_thunderbird_39>
          <cf_status_thunderbird_39>---</cf_status_thunderbird_39>
          <cf_tracking_thunderbird_40>---</cf_tracking_thunderbird_40>
          <cf_status_thunderbird_40>---</cf_status_thunderbird_40>
          <cf_tracking_thunderbird_41>---</cf_tracking_thunderbird_41>
          <cf_blocking_seamonkey21>---</cf_blocking_seamonkey21>
          <cf_status_thunderbird_41>---</cf_status_thunderbird_41>
          <cf_status_seamonkey21>---</cf_status_seamonkey21>
          <cf_tracking_seamonkey22>---</cf_tracking_seamonkey22>
          <cf_tracking_thunderbird_42>---</cf_tracking_thunderbird_42>
          <cf_status_thunderbird_42>---</cf_status_thunderbird_42>
          <cf_status_seamonkey22>---</cf_status_seamonkey22>
          <cf_tracking_seamonkey23>---</cf_tracking_seamonkey23>
          <cf_tracking_thunderbird_43>---</cf_tracking_thunderbird_43>
          <cf_status_thunderbird_43>---</cf_status_thunderbird_43>
          <cf_status_seamonkey23>---</cf_status_seamonkey23>
          <cf_tracking_thunderbird_44>---</cf_tracking_thunderbird_44>
          <cf_tracking_seamonkey24>---</cf_tracking_seamonkey24>
          <cf_status_seamonkey24>---</cf_status_seamonkey24>
          <cf_status_thunderbird_44>---</cf_status_thunderbird_44>
          <cf_tracking_seamonkey25>---</cf_tracking_seamonkey25>
          <cf_status_seamonkey25>---</cf_status_seamonkey25>
          <cf_tracking_seamonkey26>---</cf_tracking_seamonkey26>
          <cf_status_seamonkey26>---</cf_status_seamonkey26>
          <cf_tracking_seamonkey27>---</cf_tracking_seamonkey27>
          <cf_status_seamonkey27>---</cf_status_seamonkey27>
          <cf_tracking_seamonkey28>---</cf_tracking_seamonkey28>
          <cf_status_seamonkey28>---</cf_status_seamonkey28>
          <cf_tracking_seamonkey29>---</cf_tracking_seamonkey29>
          <cf_status_seamonkey29>---</cf_status_seamonkey29>
          <cf_tracking_seamonkey210>---</cf_tracking_seamonkey210>
          <cf_status_seamonkey210>---</cf_status_seamonkey210>
          <cf_tracking_seamonkey211>---</cf_tracking_seamonkey211>
          <cf_status_seamonkey211>---</cf_status_seamonkey211>
          <cf_tracking_seamonkey212>---</cf_tracking_seamonkey212>
          <cf_status_seamonkey212>---</cf_status_seamonkey212>
          <cf_tracking_seamonkey213>---</cf_tracking_seamonkey213>
          <cf_status_seamonkey213>---</cf_status_seamonkey213>
          <cf_tracking_seamonkey214>---</cf_tracking_seamonkey214>
          <cf_status_seamonkey214>---</cf_status_seamonkey214>
          <cf_tracking_seamonkey215>---</cf_tracking_seamonkey215>
          <cf_status_seamonkey215>---</cf_status_seamonkey215>
          <cf_tracking_seamonkey216>---</cf_tracking_seamonkey216>
          <cf_status_seamonkey216>---</cf_status_seamonkey216>
          <cf_tracking_seamonkey217>---</cf_tracking_seamonkey217>
          <cf_status_seamonkey217>---</cf_status_seamonkey217>
          <cf_tracking_seamonkey218>---</cf_tracking_seamonkey218>
          <cf_status_seamonkey218>---</cf_status_seamonkey218>
          <cf_tracking_seamonkey219>---</cf_tracking_seamonkey219>
          <cf_status_seamonkey219>---</cf_status_seamonkey219>
          <cf_tracking_seamonkey220>---</cf_tracking_seamonkey220>
          <cf_status_seamonkey220>---</cf_status_seamonkey220>
          <cf_tracking_seamonkey221>---</cf_tracking_seamonkey221>
          <cf_status_seamonkey221>---</cf_status_seamonkey221>
          <cf_tracking_seamonkey222>---</cf_tracking_seamonkey222>
          <cf_status_seamonkey222>---</cf_status_seamonkey222>
          <cf_tracking_seamonkey223>---</cf_tracking_seamonkey223>
          <cf_status_seamonkey223>---</cf_status_seamonkey223>
          <cf_tracking_seamonkey224>---</cf_tracking_seamonkey224>
          <cf_tracking_thunderbird_45>---</cf_tracking_thunderbird_45>
          <cf_status_thunderbird_45>---</cf_status_thunderbird_45>
          <cf_tracking_thunderbird_46>---</cf_tracking_thunderbird_46>
          <cf_status_thunderbird_46>---</cf_status_thunderbird_46>
          <cf_status_seamonkey224>---</cf_status_seamonkey224>
          <cf_tracking_thunderbird_47>---</cf_tracking_thunderbird_47>
          <cf_status_thunderbird_47>---</cf_status_thunderbird_47>
          <cf_tracking_thunderbird_48>---</cf_tracking_thunderbird_48>
          <cf_tracking_seamonkey225>---</cf_tracking_seamonkey225>
          <cf_status_thunderbird_48>---</cf_status_thunderbird_48>
          <cf_tracking_thunderbird_49>---</cf_tracking_thunderbird_49>
          <cf_status_thunderbird_49>---</cf_status_thunderbird_49>
          <cf_tracking_thunderbird_50>---</cf_tracking_thunderbird_50>
          <cf_status_thunderbird_50>---</cf_status_thunderbird_50>
          <cf_status_seamonkey225>---</cf_status_seamonkey225>
          <cf_status_seamonkey226>---</cf_status_seamonkey226>
          <cf_tracking_seamonkey226>---</cf_tracking_seamonkey226>
          <cf_status_seamonkey227>---</cf_status_seamonkey227>
          <cf_tracking_seamonkey227>---</cf_tracking_seamonkey227>
          <cf_status_seamonkey228>---</cf_status_seamonkey228>
          <cf_tracking_seamonkey228>---</cf_tracking_seamonkey228>
          <cf_status_seamonkey229>---</cf_status_seamonkey229>
          <cf_colo_site>---</cf_colo_site>
          <cf_tracking_seamonkey229>---</cf_tracking_seamonkey229>
          <cf_tracking_thunderbird_esr24>---</cf_tracking_thunderbird_esr24>
          <cf_status_thunderbird_esr24>---</cf_status_thunderbird_esr24>
          <cf_tracking_thunderbird_esr31>---</cf_tracking_thunderbird_esr31>
          <cf_status_thunderbird_esr31>---</cf_status_thunderbird_esr31>
          <cf_tracking_thunderbird_esr38>---</cf_tracking_thunderbird_esr38>
          <cf_status_seamonkey230>---</cf_status_seamonkey230>
          <cf_status_thunderbird_esr38>---</cf_status_thunderbird_esr38>
          <cf_tracking_thunderbird_esr45>---</cf_tracking_thunderbird_esr45>
          <cf_status_thunderbird_esr45>---</cf_status_thunderbird_esr45>
          <cf_tracking_thunderbird_esr52>---</cf_tracking_thunderbird_esr52>
          <cf_status_thunderbird_esr52>---</cf_status_thunderbird_esr52>
          <cf_tracking_seamonkey230>---</cf_tracking_seamonkey230>
          <cf_office>---</cf_office>
          <cf_tracking_thunderbird_esr60>---</cf_tracking_thunderbird_esr60>
          <cf_status_thunderbird_esr60>---</cf_status_thunderbird_esr60>
          <cf_status_seamonkey231>---</cf_status_seamonkey231>
          <cf_tracking_thunderbird_esr68>---</cf_tracking_thunderbird_esr68>
          <cf_status_thunderbird_esr68>---</cf_status_thunderbird_esr68>
          <cf_tracking_seamonkey231>---</cf_tracking_seamonkey231>
          <cf_status_seamonkey232>---</cf_status_seamonkey232>
          <cf_tracking_thunderbird_esr78>---</cf_tracking_thunderbird_esr78>
          <cf_status_thunderbird_esr78>---</cf_status_thunderbird_esr78>
          <cf_tracking_seamonkey232>---</cf_tracking_seamonkey232>
          <cf_tracking_thunderbird_51>---</cf_tracking_thunderbird_51>
          <cf_status_thunderbird_51>---</cf_status_thunderbird_51>
          <cf_tracking_thunderbird_52>---</cf_tracking_thunderbird_52>
          <cf_status_thunderbird_52>---</cf_status_thunderbird_52>
          <cf_tracking_thunderbird_esr91>---</cf_tracking_thunderbird_esr91>
          <cf_tracking_thunderbird_53>---</cf_tracking_thunderbird_53>
          <cf_status_thunderbird_esr91>---</cf_status_thunderbird_esr91>
          <cf_tracking_seamonkey233>---</cf_tracking_seamonkey233>
          <cf_status_thunderbird_53>---</cf_status_thunderbird_53>
          <cf_tracking_thunderbird_54>---</cf_tracking_thunderbird_54>
          <cf_status_thunderbird_54>---</cf_status_thunderbird_54>
          <cf_tracking_thunderbird_esr102>---</cf_tracking_thunderbird_esr102>
          <cf_tracking_thunderbird_55>---</cf_tracking_thunderbird_55>
          <cf_status_thunderbird_esr102>---</cf_status_thunderbird_esr102>
          <cf_status_thunderbird_55>---</cf_status_thunderbird_55>
          <cf_status_seamonkey233>---</cf_status_seamonkey233>
          <cf_tracking_thunderbird_56>---</cf_tracking_thunderbird_56>
          <cf_status_thunderbird_56>---</cf_status_thunderbird_56>
          <cf_tracking_thunderbird_57>---</cf_tracking_thunderbird_57>
          <cf_tracking_seamonkey234>---</cf_tracking_seamonkey234>
          <cf_status_thunderbird_57>---</cf_status_thunderbird_57>
          <cf_tracking_thunderbird_58>---</cf_tracking_thunderbird_58>
          <cf_status_thunderbird_58>---</cf_status_thunderbird_58>
          <cf_status_seamonkey234>---</cf_status_seamonkey234>
          <cf_tracking_thunderbird_59>---</cf_tracking_thunderbird_59>
          <cf_status_thunderbird_59>---</cf_status_thunderbird_59>
          <cf_tracking_seamonkey235>---</cf_tracking_seamonkey235>
          <cf_tracking_thunderbird_60>---</cf_tracking_thunderbird_60>
          <cf_status_thunderbird_60>---</cf_status_thunderbird_60>
          <cf_status_seamonkey235>---</cf_status_seamonkey235>
          <cf_tracking_thunderbird_61>---</cf_tracking_thunderbird_61>
          <cf_status_thunderbird_61>---</cf_status_thunderbird_61>
          <cf_tracking_seamonkey236>---</cf_tracking_seamonkey236>
          <cf_tracking_thunderbird_62>---</cf_tracking_thunderbird_62>
          <cf_status_thunderbird_62>---</cf_status_thunderbird_62>
          <cf_status_seamonkey236>---</cf_status_seamonkey236>
          <cf_tracking_thunderbird_63>---</cf_tracking_thunderbird_63>
          <cf_status_thunderbird_63>---</cf_status_thunderbird_63>
          <cf_tracking_thunderbird_64>---</cf_tracking_thunderbird_64>
          <cf_tracking_seamonkey237>---</cf_tracking_seamonkey237>
          <cf_status_thunderbird_64>---</cf_status_thunderbird_64>
          <cf_tracking_thunderbird_65>---</cf_tracking_thunderbird_65>
          <cf_status_thunderbird_65>---</cf_status_thunderbird_65>
          <cf_status_seamonkey237>---</cf_status_seamonkey237>
          <cf_tracking_thunderbird_66>---</cf_tracking_thunderbird_66>
          <cf_status_thunderbird_66>---</cf_status_thunderbird_66>
          <cf_tracking_thunderbird_67>---</cf_tracking_thunderbird_67>
          <cf_status_thunderbird_67>---</cf_status_thunderbird_67>
          <cf_tracking_seamonkey238>---</cf_tracking_seamonkey238>
          <cf_tracking_thunderbird_68>---</cf_tracking_thunderbird_68>
          <cf_status_thunderbird_68>---</cf_status_thunderbird_68>
          <cf_status_seamonkey238>---</cf_status_seamonkey238>
          <cf_status_thunderbird_69>---</cf_status_thunderbird_69>
          <cf_tracking_seamonkey239>---</cf_tracking_seamonkey239>
          <cf_tracking_thunderbird_69>---</cf_tracking_thunderbird_69>
          <cf_status_seamonkey239>---</cf_status_seamonkey239>
          <cf_status_thunderbird_70>---</cf_status_thunderbird_70>
          <cf_crash_signature></cf_crash_signature>
          <cf_tracking_seamonkey240>---</cf_tracking_seamonkey240>
          <cf_tracking_thunderbird_70>---</cf_tracking_thunderbird_70>
          
          <cf_status_thunderbird_71>---</cf_status_thunderbird_71>
          <cf_status_seamonkey240>---</cf_status_seamonkey240>
          <cf_tracking_thunderbird_71>---</cf_tracking_thunderbird_71>
          <cf_tracking_seamonkey241>---</cf_tracking_seamonkey241>
          <cf_status_seamonkey241>---</cf_status_seamonkey241>
          <cf_status_thunderbird_72>---</cf_status_thunderbird_72>
          <cf_tracking_seamonkey242>---</cf_tracking_seamonkey242>
          <cf_tracking_thunderbird_72>---</cf_tracking_thunderbird_72>
          <cf_status_seamonkey242>---</cf_status_seamonkey242>
          <cf_status_thunderbird_73>---</cf_status_thunderbird_73>
          <cf_tracking_seamonkey243>---</cf_tracking_seamonkey243>
          <cf_tracking_thunderbird_73>---</cf_tracking_thunderbird_73>
          <cf_status_seamonkey243>---</cf_status_seamonkey243>
          <cf_status_thunderbird_74>---</cf_status_thunderbird_74>
          <cf_tracking_seamonkey244>---</cf_tracking_seamonkey244>
          <cf_tracking_thunderbird_74>---</cf_tracking_thunderbird_74>
          <cf_status_thunderbird_75>---</cf_status_thunderbird_75>
          <cf_status_seamonkey244>---</cf_status_seamonkey244>
          <cf_status_thunderbird_76>---</cf_status_thunderbird_76>
          <cf_tracking_thunderbird_75>---</cf_tracking_thunderbird_75>
          <cf_status_thunderbird_77>---</cf_status_thunderbird_77>
          <cf_tracking_seamonkey245>---</cf_tracking_seamonkey245>
          <cf_tracking_thunderbird_76>---</cf_tracking_thunderbird_76>
          <cf_status_seamonkey245>---</cf_status_seamonkey245>
          <cf_tracking_thunderbird_77>---</cf_tracking_thunderbird_77>
          <cf_status_thunderbird_78>---</cf_status_thunderbird_78>
          <cf_status_thunderbird_79>---</cf_status_thunderbird_79>
          <cf_tracking_thunderbird_78>---</cf_tracking_thunderbird_78>
          <cf_tracking_seamonkey246>---</cf_tracking_seamonkey246>
          <cf_tracking_thunderbird_79>---</cf_tracking_thunderbird_79>
          <cf_status_seamonkey246>---</cf_status_seamonkey246>
          <cf_status_thunderbird_80>---</cf_status_thunderbird_80>
          <cf_tracking_thunderbird_80>---</cf_tracking_thunderbird_80>
          <cf_status_thunderbird_81>---</cf_status_thunderbird_81>
          <cf_tracking_seamonkey247>---</cf_tracking_seamonkey247>
          <cf_tracking_thunderbird_81>---</cf_tracking_thunderbird_81>
          <cf_status_seamonkey247>---</cf_status_seamonkey247>
          <cf_status_thunderbird_82>---</cf_status_thunderbird_82>
          <cf_tracking_thunderbird_82>---</cf_tracking_thunderbird_82>
          <cf_tracking_seamonkey248>---</cf_tracking_seamonkey248>
          <cf_status_thunderbird_83>---</cf_status_thunderbird_83>
          <cf_tracking_thunderbird_83>---</cf_tracking_thunderbird_83>
          <cf_status_thunderbird_84>---</cf_status_thunderbird_84>
          <cf_status_seamonkey248>---</cf_status_seamonkey248>
          <cf_tracking_thunderbird_84>---</cf_tracking_thunderbird_84>
          <cf_status_thunderbird_85>---</cf_status_thunderbird_85>
          <cf_tracking_thunderbird_85>---</cf_tracking_thunderbird_85>
          <cf_status_thunderbird_86>---</cf_status_thunderbird_86>
          <cf_blocking_kilimanjaro>---</cf_blocking_kilimanjaro>
          <cf_tracking_thunderbird_86>---</cf_tracking_thunderbird_86>
          <cf_status_thunderbird_87>---</cf_status_thunderbird_87>
          <cf_blocking_b2g>---</cf_blocking_b2g>
          <cf_tracking_seamonkey249>---</cf_tracking_seamonkey249>
          <cf_tracking_thunderbird_87>---</cf_tracking_thunderbird_87>
          <cf_blocking_basecamp>---</cf_blocking_basecamp>
          <cf_status_thunderbird_88>---</cf_status_thunderbird_88>
          <cf_status_seamonkey249>---</cf_status_seamonkey249>
          <cf_tracking_thunderbird_88>---</cf_tracking_thunderbird_88>
          <cf_status_thunderbird_89>---</cf_status_thunderbird_89>
          <cf_feature_b2g>---</cf_feature_b2g>
          <cf_tracking_seamonkey250>---</cf_tracking_seamonkey250>
          <cf_tracking_thunderbird_89>---</cf_tracking_thunderbird_89>
          <cf_tracking_b2g>---</cf_tracking_b2g>
          <cf_ux_b2g>---</cf_ux_b2g>
          <cf_status_thunderbird_90>---</cf_status_thunderbird_90>
          <cf_status_seamonkey250>---</cf_status_seamonkey250>
          <cf_tracking_thunderbird_90>---</cf_tracking_thunderbird_90>
          <cf_b2g_ota_blocker>---</cf_b2g_ota_blocker>
          <cf_status_thunderbird_91>---</cf_status_thunderbird_91>
          <cf_tracking_seamonkey251>---</cf_tracking_seamonkey251>
          <cf_tracking_thunderbird_91>---</cf_tracking_thunderbird_91>
          <cf_status_seamonkey251>---</cf_status_seamonkey251>
          <cf_status_thunderbird_92>---</cf_status_thunderbird_92>
          <cf_tracking_thunderbird_92>---</cf_tracking_thunderbird_92>
          <cf_status_thunderbird_93>---</cf_status_thunderbird_93>
          <cf_tracking_seamonkey252>---</cf_tracking_seamonkey252>
          <cf_tracking_thunderbird_93>---</cf_tracking_thunderbird_93>
          <cf_status_seamonkey252>---</cf_status_seamonkey252>
          <cf_status_thunderbird_94>---</cf_status_thunderbird_94>
          <cf_tracking_thunderbird_94>---</cf_tracking_thunderbird_94>
          <cf_status_seamonkey253>---</cf_status_seamonkey253>
          <cf_status_thunderbird_95>---</cf_status_thunderbird_95>
          <cf_tracking_thunderbird_95>---</cf_tracking_thunderbird_95>
          <cf_tracking_seamonkey253>---</cf_tracking_seamonkey253>
          <cf_status_thunderbird_96>---</cf_status_thunderbird_96>
          <cf_tracking_seamonkey254>---</cf_tracking_seamonkey254>
          <cf_tracking_thunderbird_96>---</cf_tracking_thunderbird_96>
          <cf_status_seamonkey254>---</cf_status_seamonkey254>
          <cf_status_thunderbird_97>---</cf_status_thunderbird_97>
          <cf_tracking_thunderbird_97>---</cf_tracking_thunderbird_97>
          <cf_status_thunderbird_98>---</cf_status_thunderbird_98>
          <cf_tracking_seamonkey255>---</cf_tracking_seamonkey255>
          <cf_tracking_thunderbird_98>---</cf_tracking_thunderbird_98>
          <cf_status_seamonkey255>---</cf_status_seamonkey255>
          <cf_status_thunderbird_99>---</cf_status_thunderbird_99>
          <cf_tracking_thunderbird_99>---</cf_tracking_thunderbird_99>
          <cf_status_seamonkey256>---</cf_status_seamonkey256>
          <cf_status_thunderbird_100>---</cf_status_thunderbird_100>
          <cf_tracking_thunderbird_100>---</cf_tracking_thunderbird_100>
          <cf_status_thunderbird_101>---</cf_status_thunderbird_101>
          <cf_tracking_seamonkey256>---</cf_tracking_seamonkey256>
          <cf_status_seamonkey257esr>---</cf_status_seamonkey257esr>
          <cf_tracking_thunderbird_101>---</cf_tracking_thunderbird_101>
          <cf_tracking_seamonkey257esr>---</cf_tracking_seamonkey257esr>
          <cf_status_thunderbird_102>---</cf_status_thunderbird_102>
          <cf_tracking_thunderbird_102>---</cf_tracking_thunderbird_102>
          <cf_status_thunderbird_103>---</cf_status_thunderbird_103>
          <cf_status_seamonkey258>---</cf_status_seamonkey258>
          <cf_tracking_thunderbird_103>---</cf_tracking_thunderbird_103>
          <cf_status_thunderbird_104>---</cf_status_thunderbird_104>
          <cf_tracking_seamonkey258>---</cf_tracking_seamonkey258>
          <cf_tracking_thunderbird_104>---</cf_tracking_thunderbird_104>
          <cf_status_thunderbird_105>---</cf_status_thunderbird_105>
          <cf_status_seamonkey259>---</cf_status_seamonkey259>
          <cf_tracking_thunderbird_105>---</cf_tracking_thunderbird_105>
          <cf_status_thunderbird_106>---</cf_status_thunderbird_106>
          <cf_tracking_seamonkey259>---</cf_tracking_seamonkey259>
          <cf_tracking_thunderbird_esr115>---</cf_tracking_thunderbird_esr115>
          <cf_status_fxios_v1_0>---</cf_status_fxios_v1_0>
          <cf_status_thunderbird_esr115>---</cf_status_thunderbird_esr115>
          <cf_tracking_thunderbird_106>---</cf_tracking_thunderbird_106>
          <cf_status_fxios_v1_0_5>---</cf_status_fxios_v1_0_5>
          <cf_status_fxios_v1_1>---</cf_status_fxios_v1_1>
          <cf_status_fxios_v2_0>---</cf_status_fxios_v2_0>
          <cf_status_fxios_v3_0>---</cf_status_fxios_v3_0>
          <cf_status_fxios_v4_0>---</cf_status_fxios_v4_0>
          <cf_status_thunderbird_107>---</cf_status_thunderbird_107>
          <cf_tracking_thunderbird_esr128>---</cf_tracking_thunderbird_esr128>
          <cf_status_seamonkey260>---</cf_status_seamonkey260>
          <cf_tracking_thunderbird_107>---</cf_tracking_thunderbird_107>
          <cf_status_thunderbird_esr128>---</cf_status_thunderbird_esr128>
          <cf_status_fxios_v5_0>---</cf_status_fxios_v5_0>
          <cf_status_thunderbird_108>---</cf_status_thunderbird_108>
          <cf_tracking_seamonkey260>---</cf_tracking_seamonkey260>
          <cf_tracking_thunderbird_esr140>---</cf_tracking_thunderbird_esr140>
          <cf_tracking_thunderbird_108>---</cf_tracking_thunderbird_108>
          <cf_status_thunderbird_esr140>---</cf_status_thunderbird_esr140>
          <cf_status_fxios_v5_1>---</cf_status_fxios_v5_1>
          <cf_status_fxios_v5_2>---</cf_status_fxios_v5_2>
          <cf_status_fxios_v5_3>---</cf_status_fxios_v5_3>
          <cf_tracking_thunderbird_esr153>---</cf_tracking_thunderbird_esr153>
          <cf_status_fxios_v6_0>---</cf_status_fxios_v6_0>
          <cf_status_thunderbird_109>---</cf_status_thunderbird_109>
          <cf_status_thunderbird_esr153>---</cf_status_thunderbird_esr153>
          <cf_tracking_thunderbird_109>---</cf_tracking_thunderbird_109>
          <cf_status_fxios_v6_1>---</cf_status_fxios_v6_1>
          <cf_status_fxios_v7_0>---</cf_status_fxios_v7_0>
          <cf_status_thunderbird_110>---</cf_status_thunderbird_110>
          <cf_tracking_thunderbird_110>---</cf_tracking_thunderbird_110>
          <cf_status_fxios_v7_1>---</cf_status_fxios_v7_1>
          <cf_status_fxios_v7_2>---</cf_status_fxios_v7_2>
          <cf_status_thunderbird_111>---</cf_status_thunderbird_111>
          <cf_status_fxios_v7_3>---</cf_status_fxios_v7_3>
          <cf_tracking_thunderbird_111>---</cf_tracking_thunderbird_111>
          <cf_status_thunderbird_112>---</cf_status_thunderbird_112>
          <cf_tracking_thunderbird_112>---</cf_tracking_thunderbird_112>
          <cf_status_fxios_v7_4>---</cf_status_fxios_v7_4>
          <cf_status_fxios_v7_5>---</cf_status_fxios_v7_5>
          <cf_status_fxios_v7_6>---</cf_status_fxios_v7_6>
          <cf_status_thunderbird_113>---</cf_status_thunderbird_113>
          <cf_tracking_thunderbird_113>---</cf_tracking_thunderbird_113>
          <cf_tracking_seamonkey263>---</cf_tracking_seamonkey263>
          <cf_status_thunderbird_114>---</cf_status_thunderbird_114>
          <cf_tracking_thunderbird_114>---</cf_tracking_thunderbird_114>
          <cf_status_thunderbird_115>---</cf_status_thunderbird_115>
          <cf_status_seamonkey263>---</cf_status_seamonkey263>
          <cf_tracking_thunderbird_115>---</cf_tracking_thunderbird_115>
          
          <cf_status_thunderbird_116>---</cf_status_thunderbird_116>
          <cf_tracking_thunderbird_116>---</cf_tracking_thunderbird_116>
          <cf_status_thunderbird_117>---</cf_status_thunderbird_117>
          <cf_tracking_thunderbird_117>---</cf_tracking_thunderbird_117>
          <cf_status_thunderbird_118>---</cf_status_thunderbird_118>
          <cf_tracking_thunderbird_118>---</cf_tracking_thunderbird_118>
          <cf_status_thunderbird_119>---</cf_status_thunderbird_119>
          <cf_tracking_thunderbird_119>---</cf_tracking_thunderbird_119>
          <cf_status_thunderbird_120>---</cf_status_thunderbird_120>
          <cf_tracking_thunderbird_120>---</cf_tracking_thunderbird_120>
          <cf_status_thunderbird_121>---</cf_status_thunderbird_121>
          <cf_tracking_thunderbird_121>---</cf_tracking_thunderbird_121>
          <cf_status_thunderbird_122>---</cf_status_thunderbird_122>
          <cf_tracking_thunderbird_122>---</cf_tracking_thunderbird_122>
          <cf_status_thunderbird_123>---</cf_status_thunderbird_123>
          <cf_tracking_thunderbird_123>---</cf_tracking_thunderbird_123>
          <cf_status_thunderbird_124>---</cf_status_thunderbird_124>
          <cf_tracking_thunderbird_124>---</cf_tracking_thunderbird_124>
          <cf_status_thunderbird_125>---</cf_status_thunderbird_125>
          <cf_tracking_thunderbird_125>---</cf_tracking_thunderbird_125>
          <cf_status_thunderbird_126>---</cf_status_thunderbird_126>
          <cf_tracking_thunderbird_126>---</cf_tracking_thunderbird_126>
          <cf_status_thunderbird_127>---</cf_status_thunderbird_127>
          <cf_tracking_thunderbird_127>---</cf_tracking_thunderbird_127>
          <cf_status_thunderbird_128>---</cf_status_thunderbird_128>
          <cf_tracking_thunderbird_128>---</cf_tracking_thunderbird_128>
          <cf_status_thunderbird_129>---</cf_status_thunderbird_129>
          <cf_tracking_thunderbird_129>---</cf_tracking_thunderbird_129>
          <cf_status_thunderbird_130>---</cf_status_thunderbird_130>
          <cf_tracking_thunderbird_130>---</cf_tracking_thunderbird_130>
          <cf_status_thunderbird_131>---</cf_status_thunderbird_131>
          <cf_tracking_thunderbird_131>---</cf_tracking_thunderbird_131>
          <cf_status_thunderbird_132>---</cf_status_thunderbird_132>
          <cf_tracking_thunderbird_132>---</cf_tracking_thunderbird_132>
          <cf_status_thunderbird_133>---</cf_status_thunderbird_133>
          <cf_tracking_thunderbird_133>---</cf_tracking_thunderbird_133>
          <cf_status_thunderbird_134>---</cf_status_thunderbird_134>
          <cf_tracking_thunderbird_134>---</cf_tracking_thunderbird_134>
          <cf_status_thunderbird_135>---</cf_status_thunderbird_135>
          <cf_tracking_thunderbird_135>---</cf_tracking_thunderbird_135>
          <cf_last_resolved>2011-03-23 22:46:45</cf_last_resolved>
          <cf_status_thunderbird_136>---</cf_status_thunderbird_136>
          <cf_tracking_thunderbird_136>---</cf_tracking_thunderbird_136>
          <cf_status_thunderbird_137>---</cf_status_thunderbird_137>
          <cf_tracking_thunderbird_137>---</cf_tracking_thunderbird_137>
          <cf_status_thunderbird_138>---</cf_status_thunderbird_138>
          <cf_tracking_thunderbird_138>---</cf_tracking_thunderbird_138>
          <cf_status_thunderbird_139>---</cf_status_thunderbird_139>
          <cf_tracking_thunderbird_139>---</cf_tracking_thunderbird_139>
          <cf_status_thunderbird_140>---</cf_status_thunderbird_140>
          <cf_tracking_thunderbird_140>---</cf_tracking_thunderbird_140>
          <cf_status_thunderbird_141>---</cf_status_thunderbird_141>
          <cf_tracking_thunderbird_141>---</cf_tracking_thunderbird_141>
          <cf_status_thunderbird_142>---</cf_status_thunderbird_142>
          <cf_tracking_thunderbird_142>---</cf_tracking_thunderbird_142>
          <cf_status_thunderbird_143>---</cf_status_thunderbird_143>
          <cf_tracking_thunderbird_143>---</cf_tracking_thunderbird_143>
          <cf_status_thunderbird_144>---</cf_status_thunderbird_144>
          <cf_tracking_thunderbird_144>---</cf_tracking_thunderbird_144>
          <cf_status_thunderbird_145>---</cf_status_thunderbird_145>
          <cf_tracking_thunderbird_145>---</cf_tracking_thunderbird_145>
          <cf_status_thunderbird_146>---</cf_status_thunderbird_146>
          <cf_tracking_thunderbird_146>---</cf_tracking_thunderbird_146>
          <cf_status_thunderbird_147>---</cf_status_thunderbird_147>
          <cf_tracking_thunderbird_147>---</cf_tracking_thunderbird_147>
          <cf_status_thunderbird_148>---</cf_status_thunderbird_148>
          <cf_tracking_thunderbird_148>---</cf_tracking_thunderbird_148>
          <cf_status_thunderbird_149>---</cf_status_thunderbird_149>
          <cf_tracking_thunderbird_149>---</cf_tracking_thunderbird_149>
          <cf_status_thunderbird_150>---</cf_status_thunderbird_150>
          <cf_tracking_thunderbird_150>---</cf_tracking_thunderbird_150>
          <cf_status_thunderbird_151>---</cf_status_thunderbird_151>
          <cf_tracking_thunderbird_151>---</cf_tracking_thunderbird_151>
          <cf_status_thunderbird_152>---</cf_status_thunderbird_152>
          <cf_tracking_thunderbird_152>---</cf_tracking_thunderbird_152>
          <cf_status_thunderbird_153>---</cf_status_thunderbird_153>
          <cf_tracking_thunderbird_153>---</cf_tracking_thunderbird_153>
          <cf_status_thunderbird_154>---</cf_status_thunderbird_154>
          <cf_tracking_thunderbird_154>---</cf_tracking_thunderbird_154>
          <cf_status_thunderbird_155>---</cf_status_thunderbird_155>
          <cf_tracking_thunderbird_155>---</cf_tracking_thunderbird_155>
          <cf_status_thunderbird_156>---</cf_status_thunderbird_156>
          <cf_tracking_thunderbird_156>---</cf_tracking_thunderbird_156>
          <cf_user_story></cf_user_story>
          <cf_mozilla_project>---</cf_mozilla_project>
          <cf_machine_state>---</cf_machine_state>
          <cf_qa_whiteboard></cf_qa_whiteboard>
          <cf_fx_iteration>---</cf_fx_iteration>
          <cf_fx_points>---</cf_fx_points>
          
          <cf_has_str>---</cf_has_str>
          <cf_cab_review>---</cf_cab_review>
          <cf_status_fxios_v8_0>---</cf_status_fxios_v8_0>
          <cf_status_fxios_v8_1>---</cf_status_fxios_v8_1>
          <cf_status_fxios_v8_2>---</cf_status_fxios_v8_2>
          <cf_status_fxios_v8_3>---</cf_status_fxios_v8_3>
          <cf_status_fxios_v8_4>---</cf_status_fxios_v8_4>
          <cf_status_fxios_v9_0>---</cf_status_fxios_v9_0>
          <cf_status_fxios_v9_1>---</cf_status_fxios_v9_1>
          <cf_status_fxios_v9_2>---</cf_status_fxios_v9_2>
          <cf_status_fxios_v9_3>---</cf_status_fxios_v9_3>
          <cf_status_fxios_v9_4>---</cf_status_fxios_v9_4>
          <cf_status_fxios_v10_0>---</cf_status_fxios_v10_0>
          <cf_status_fxios_v10_1>---</cf_status_fxios_v10_1>
          <cf_status_fxios_v10_2>---</cf_status_fxios_v10_2>
          <cf_status_fxios_v10_5>---</cf_status_fxios_v10_5>
          <cf_status_fxios_v10_6>---</cf_status_fxios_v10_6>
          <cf_status_fxios_v11_0>---</cf_status_fxios_v11_0>
          <cf_status_fxios_v11_1>---</cf_status_fxios_v11_1>
          <cf_status_fxios_v12_0>---</cf_status_fxios_v12_0>
          <cf_status_fxios_v12_1>---</cf_status_fxios_v12_1>
          <cf_status_fxios_v12_2>---</cf_status_fxios_v12_2>
          <cf_status_fxios_v13_0>---</cf_status_fxios_v13_0>
          <cf_status_fxios_v13_1>---</cf_status_fxios_v13_1>
          <cf_status_fxios_v13_2>---</cf_status_fxios_v13_2>
          <cf_status_fxios_v13_3>---</cf_status_fxios_v13_3>
          <cf_status_fxios_v14_0>---</cf_status_fxios_v14_0>
          <cf_status_fxios_v14_1>---</cf_status_fxios_v14_1>
          <cf_status_fxios_v14_2>---</cf_status_fxios_v14_2>
          <cf_status_fxios_v14_3>---</cf_status_fxios_v14_3>
          <cf_status_fxios_v15_0>---</cf_status_fxios_v15_0>
          <cf_status_fxios_v15_1>---</cf_status_fxios_v15_1>
          <cf_status_fxios_v16_0>---</cf_status_fxios_v16_0>
          <cf_tracking_geckoview62>---</cf_tracking_geckoview62>
          <cf_status_geckoview62>---</cf_status_geckoview62>
          <cf_tracking_geckoview63>---</cf_tracking_geckoview63>
          <cf_status_geckoview63>---</cf_status_geckoview63>
          <cf_tracking_geckoview64>---</cf_tracking_geckoview64>
          <cf_status_geckoview64>---</cf_status_geckoview64>
          <cf_tracking_geckoview65>---</cf_tracking_geckoview65>
          <cf_status_geckoview65>---</cf_status_geckoview65>
          <cf_tracking_geckoview66>---</cf_tracking_geckoview66>
          <cf_status_geckoview66>---</cf_status_geckoview66>
          <cf_tracking_firefox50>---</cf_tracking_firefox50>
          <cf_status_firefox50>---</cf_status_firefox50>
          <cf_tracking_firefox51>---</cf_tracking_firefox51>
          <cf_status_firefox51>---</cf_status_firefox51>
          <cf_tracking_firefox52>---</cf_tracking_firefox52>
          <cf_status_firefox52>---</cf_status_firefox52>
          <cf_tracking_firefox_esr52>---</cf_tracking_firefox_esr52>
          <cf_status_firefox_esr52>---</cf_status_firefox_esr52>
          <cf_tracking_firefox_esr60>---</cf_tracking_firefox_esr60>
          <cf_status_firefox_esr60>---</cf_status_firefox_esr60>
          <cf_tracking_firefox_esr68>---</cf_tracking_firefox_esr68>
          <cf_status_firefox_esr68>---</cf_status_firefox_esr68>
          <cf_tracking_firefox53>---</cf_tracking_firefox53>
          <cf_tracking_firefox_esr78>---</cf_tracking_firefox_esr78>
          <cf_status_firefox_esr78>---</cf_status_firefox_esr78>
          <cf_tracking_firefox_esr91>---</cf_tracking_firefox_esr91>
          <cf_status_firefox_esr91>---</cf_status_firefox_esr91>
          <cf_status_firefox53>---</cf_status_firefox53>
          <cf_tracking_firefox_esr102>---</cf_tracking_firefox_esr102>
          <cf_status_firefox_esr102>---</cf_status_firefox_esr102>
          <cf_tracking_firefox_esr115>---</cf_tracking_firefox_esr115>
          <cf_status_firefox_esr115>---</cf_status_firefox_esr115>
          <cf_tracking_firefox54>---</cf_tracking_firefox54>
          <cf_tracking_firefox_esr128>---</cf_tracking_firefox_esr128>
          <cf_status_firefox_esr128>---</cf_status_firefox_esr128>
          <cf_tracking_firefox_esr140>---</cf_tracking_firefox_esr140>
          <cf_status_firefox_esr140>---</cf_status_firefox_esr140>
          <cf_status_firefox54>---</cf_status_firefox54>
          <cf_tracking_firefox_esr153>---</cf_tracking_firefox_esr153>
          <cf_status_firefox_esr153>---</cf_status_firefox_esr153>
          <cf_tracking_firefox55>---</cf_tracking_firefox55>
          <cf_status_firefox55>---</cf_status_firefox55>
          <cf_tracking_firefox56>---</cf_tracking_firefox56>
          <cf_status_firefox56>---</cf_status_firefox56>
          <cf_tracking_firefox57>---</cf_tracking_firefox57>
          <cf_status_firefox57>---</cf_status_firefox57>
          <cf_tracking_firefox58>---</cf_tracking_firefox58>
          <cf_status_firefox58>---</cf_status_firefox58>
          <cf_tracking_firefox59>---</cf_tracking_firefox59>
          <cf_status_firefox59>---</cf_status_firefox59>
          <cf_tracking_firefox60>---</cf_tracking_firefox60>
          <cf_status_firefox60>---</cf_status_firefox60>
          <cf_tracking_firefox61>---</cf_tracking_firefox61>
          <cf_status_firefox61>---</cf_status_firefox61>
          <cf_tracking_firefox62>---</cf_tracking_firefox62>
          <cf_status_firefox62>---</cf_status_firefox62>
          <cf_tracking_firefox63>---</cf_tracking_firefox63>
          <cf_status_firefox63>---</cf_status_firefox63>
          <cf_tracking_firefox64>---</cf_tracking_firefox64>
          <cf_status_firefox64>---</cf_status_firefox64>
          <cf_tracking_firefox65>---</cf_tracking_firefox65>
          <cf_status_firefox65>---</cf_status_firefox65>
          <cf_tracking_firefox66>---</cf_tracking_firefox66>
          <cf_status_firefox66>---</cf_status_firefox66>
          <cf_tracking_firefox67>---</cf_tracking_firefox67>
          <cf_status_firefox67>---</cf_status_firefox67>
          <cf_tracking_firefox67_0_1>---</cf_tracking_firefox67_0_1>
          <cf_status_firefox67_0_1>---</cf_status_firefox67_0_1>
          <cf_tracking_firefox68>---</cf_tracking_firefox68>
          <cf_status_firefox68>---</cf_status_firefox68>
          <cf_tracking_firefox69>---</cf_tracking_firefox69>
          <cf_status_firefox69>---</cf_status_firefox69>
          <cf_tracking_firefox70>---</cf_tracking_firefox70>
          <cf_status_firefox70>---</cf_status_firefox70>
          <cf_tracking_firefox71>---</cf_tracking_firefox71>
          <cf_status_firefox71>---</cf_status_firefox71>
          <cf_tracking_firefox72>---</cf_tracking_firefox72>
          <cf_status_firefox72>---</cf_status_firefox72>
          <cf_status_firefox73>---</cf_status_firefox73>
          <cf_tracking_firefox73>---</cf_tracking_firefox73>
          <cf_tracking_firefox74>---</cf_tracking_firefox74>
          <cf_status_firefox74>---</cf_status_firefox74>
          <cf_tracking_firefox75>---</cf_tracking_firefox75>
          <cf_status_firefox75>---</cf_status_firefox75>
          <cf_tracking_firefox76>---</cf_tracking_firefox76>
          <cf_status_firefox76>---</cf_status_firefox76>
          <cf_tracking_firefox77>---</cf_tracking_firefox77>
          <cf_status_firefox77>---</cf_status_firefox77>
          <cf_tracking_firefox78>---</cf_tracking_firefox78>
          <cf_status_firefox78>---</cf_status_firefox78>
          <cf_tracking_firefox79>---</cf_tracking_firefox79>
          <cf_status_firefox79>---</cf_status_firefox79>
          <cf_tracking_firefox80>---</cf_tracking_firefox80>
          <cf_status_firefox80>---</cf_status_firefox80>
          <cf_tracking_firefox81>---</cf_tracking_firefox81>
          <cf_status_firefox81>---</cf_status_firefox81>
          <cf_tracking_firefox82>---</cf_tracking_firefox82>
          <cf_status_firefox82>---</cf_status_firefox82>
          <cf_tracking_firefox83>---</cf_tracking_firefox83>
          <cf_status_firefox83>---</cf_status_firefox83>
          <cf_tracking_firefox84>---</cf_tracking_firefox84>
          <cf_status_firefox84>---</cf_status_firefox84>
          <cf_tracking_firefox85>---</cf_tracking_firefox85>
          <cf_status_firefox85>---</cf_status_firefox85>
          <cf_tracking_firefox86>---</cf_tracking_firefox86>
          <cf_status_firefox86>---</cf_status_firefox86>
          <cf_tracking_firefox87>---</cf_tracking_firefox87>
          <cf_status_firefox87>---</cf_status_firefox87>
          <cf_tracking_firefox88>---</cf_tracking_firefox88>
          <cf_status_firefox88>---</cf_status_firefox88>
          <cf_tracking_firefox89>---</cf_tracking_firefox89>
          <cf_status_firefox89>---</cf_status_firefox89>
          <cf_tracking_firefox90>---</cf_tracking_firefox90>
          <cf_status_firefox90>---</cf_status_firefox90>
          <cf_tracking_firefox91>---</cf_tracking_firefox91>
          <cf_status_firefox91>---</cf_status_firefox91>
          <cf_tracking_firefox92>---</cf_tracking_firefox92>
          <cf_status_firefox92>---</cf_status_firefox92>
          <cf_tracking_firefox93>---</cf_tracking_firefox93>
          <cf_status_firefox93>---</cf_status_firefox93>
          <cf_tracking_firefox94>---</cf_tracking_firefox94>
          <cf_status_firefox94>---</cf_status_firefox94>
          <cf_tracking_firefox95>---</cf_tracking_firefox95>
          <cf_status_firefox95>---</cf_status_firefox95>
          <cf_tracking_firefox96>---</cf_tracking_firefox96>
          <cf_status_firefox96>---</cf_status_firefox96>
          <cf_tracking_firefox97>---</cf_tracking_firefox97>
          <cf_status_firefox97>---</cf_status_firefox97>
          <cf_tracking_firefox98>---</cf_tracking_firefox98>
          <cf_status_firefox98>---</cf_status_firefox98>
          <cf_tracking_firefox99>---</cf_tracking_firefox99>
          <cf_status_firefox99>---</cf_status_firefox99>
          <cf_tracking_firefox100>---</cf_tracking_firefox100>
          <cf_status_firefox100>---</cf_status_firefox100>
          <cf_tracking_firefox101>---</cf_tracking_firefox101>
          <cf_status_firefox101>---</cf_status_firefox101>
          <cf_tracking_firefox102>---</cf_tracking_firefox102>
          <cf_status_firefox102>---</cf_status_firefox102>
          <cf_tracking_firefox103>---</cf_tracking_firefox103>
          <cf_status_firefox103>---</cf_status_firefox103>
          <cf_tracking_firefox104>---</cf_tracking_firefox104>
          <cf_status_firefox104>---</cf_status_firefox104>
          <cf_tracking_firefox105>---</cf_tracking_firefox105>
          <cf_status_firefox105>---</cf_status_firefox105>
          <cf_tracking_firefox106>---</cf_tracking_firefox106>
          <cf_status_firefox106>---</cf_status_firefox106>
          <cf_tracking_firefox107>---</cf_tracking_firefox107>
          <cf_status_firefox107>---</cf_status_firefox107>
          <cf_tracking_firefox108>---</cf_tracking_firefox108>
          <cf_status_firefox108>---</cf_status_firefox108>
          <cf_tracking_firefox109>---</cf_tracking_firefox109>
          <cf_status_firefox109>---</cf_status_firefox109>
          <cf_tracking_firefox110>---</cf_tracking_firefox110>
          <cf_status_firefox110>---</cf_status_firefox110>
          <cf_tracking_firefox111>---</cf_tracking_firefox111>
          <cf_status_firefox111>---</cf_status_firefox111>
          <cf_tracking_firefox112>---</cf_tracking_firefox112>
          <cf_status_firefox112>---</cf_status_firefox112>
          <cf_tracking_firefox113>---</cf_tracking_firefox113>
          <cf_status_firefox113>---</cf_status_firefox113>
          <cf_tracking_firefox114>---</cf_tracking_firefox114>
          <cf_status_firefox114>---</cf_status_firefox114>
          <cf_tracking_firefox115>---</cf_tracking_firefox115>
          <cf_status_firefox115>---</cf_status_firefox115>
          <cf_tracking_firefox116>---</cf_tracking_firefox116>
          <cf_status_firefox116>---</cf_status_firefox116>
          <cf_tracking_firefox117>---</cf_tracking_firefox117>
          <cf_status_firefox117>---</cf_status_firefox117>
          <cf_tracking_firefox118>---</cf_tracking_firefox118>
          <cf_status_firefox118>---</cf_status_firefox118>
          <cf_tracking_firefox119>---</cf_tracking_firefox119>
          <cf_status_firefox119>---</cf_status_firefox119>
          <cf_tracking_firefox120>---</cf_tracking_firefox120>
          <cf_status_firefox120>---</cf_status_firefox120>
          <cf_tracking_firefox121>---</cf_tracking_firefox121>
          <cf_status_firefox121>---</cf_status_firefox121>
          <cf_tracking_firefox122>---</cf_tracking_firefox122>
          <cf_status_firefox122>---</cf_status_firefox122>
          <cf_tracking_firefox123>---</cf_tracking_firefox123>
          <cf_status_firefox123>---</cf_status_firefox123>
          <cf_tracking_firefox124>---</cf_tracking_firefox124>
          <cf_status_firefox124>---</cf_status_firefox124>
          <cf_tracking_firefox125>---</cf_tracking_firefox125>
          <cf_status_firefox125>---</cf_status_firefox125>
          <cf_tracking_firefox126>---</cf_tracking_firefox126>
          <cf_status_firefox126>---</cf_status_firefox126>
          <cf_tracking_firefox127>---</cf_tracking_firefox127>
          <cf_status_firefox127>---</cf_status_firefox127>
          <cf_tracking_firefox128>---</cf_tracking_firefox128>
          <cf_status_firefox128>---</cf_status_firefox128>
          <cf_tracking_firefox129>---</cf_tracking_firefox129>
          <cf_status_firefox129>---</cf_status_firefox129>
          <cf_tracking_firefox130>---</cf_tracking_firefox130>
          <cf_status_firefox130>---</cf_status_firefox130>
          <cf_tracking_firefox131>---</cf_tracking_firefox131>
          <cf_status_firefox131>---</cf_status_firefox131>
          <cf_tracking_firefox132>---</cf_tracking_firefox132>
          <cf_status_firefox132>---</cf_status_firefox132>
          <cf_tracking_firefox133>---</cf_tracking_firefox133>
          <cf_status_firefox133>---</cf_status_firefox133>
          <cf_tracking_firefox134>---</cf_tracking_firefox134>
          <cf_status_firefox134>---</cf_status_firefox134>
          <cf_tracking_firefox135>---</cf_tracking_firefox135>
          <cf_status_firefox135>---</cf_status_firefox135>
          <cf_tracking_firefox136>---</cf_tracking_firefox136>
          <cf_status_firefox136>---</cf_status_firefox136>
          <cf_tracking_firefox137>---</cf_tracking_firefox137>
          <cf_status_firefox137>---</cf_status_firefox137>
          <cf_tracking_firefox138>---</cf_tracking_firefox138>
          <cf_status_firefox138>---</cf_status_firefox138>
          <cf_tracking_firefox139>---</cf_tracking_firefox139>
          <cf_status_firefox139>---</cf_status_firefox139>
          <cf_tracking_firefox140>---</cf_tracking_firefox140>
          <cf_status_firefox140>---</cf_status_firefox140>
          <cf_tracking_firefox141>---</cf_tracking_firefox141>
          <cf_status_firefox141>---</cf_status_firefox141>
          <cf_tracking_firefox142>---</cf_tracking_firefox142>
          <cf_status_firefox142>---</cf_status_firefox142>
          <cf_tracking_firefox143>---</cf_tracking_firefox143>
          <cf_status_firefox143>---</cf_status_firefox143>
          <cf_tracking_firefox144>---</cf_tracking_firefox144>
          <cf_status_firefox144>---</cf_status_firefox144>
          <cf_tracking_firefox145>---</cf_tracking_firefox145>
          <cf_status_firefox145>---</cf_status_firefox145>
          <cf_tracking_firefox146>---</cf_tracking_firefox146>
          <cf_status_firefox146>---</cf_status_firefox146>
          <cf_tracking_firefox147>---</cf_tracking_firefox147>
          <cf_status_firefox147>---</cf_status_firefox147>
          <cf_tracking_firefox148>---</cf_tracking_firefox148>
          <cf_status_firefox148>---</cf_status_firefox148>
          <cf_tracking_firefox149>---</cf_tracking_firefox149>
          <cf_status_firefox149>---</cf_status_firefox149>
          <cf_tracking_firefox150>---</cf_tracking_firefox150>
          <cf_status_firefox150>---</cf_status_firefox150>
          <cf_tracking_firefox151>---</cf_tracking_firefox151>
          <cf_status_firefox151>---</cf_status_firefox151>
          <cf_tracking_firefox152>---</cf_tracking_firefox152>
          <cf_status_firefox152>---</cf_status_firefox152>
          <cf_tracking_firefox153>---</cf_tracking_firefox153>
          <cf_status_firefox153>---</cf_status_firefox153>
          <cf_tracking_firefox154>---</cf_tracking_firefox154>
          <cf_status_firefox154>---</cf_status_firefox154>
          <cf_tracking_firefox155>---</cf_tracking_firefox155>
          <cf_status_firefox155>---</cf_status_firefox155>
          <cf_tracking_firefox156>---</cf_tracking_firefox156>
          <cf_status_firefox156>---</cf_status_firefox156>
          <cf_tracking_firefox157>---</cf_tracking_firefox157>
          <cf_status_firefox157>---</cf_status_firefox157>
          <cf_tracking_flowstate01>---</cf_tracking_flowstate01>
          <cf_status_flowstate01>---</cf_status_flowstate01>
          <cf_tracking_flowstate02>---</cf_tracking_flowstate02>
          <cf_status_flowstate02>---</cf_status_flowstate02>
          <cf_tracking_flowstate03>---</cf_tracking_flowstate03>
          <cf_status_flowstate03>---</cf_status_flowstate03>
          <cf_fission_milestone>---</cf_fission_milestone>
          <cf_data_science_status>---</cf_data_science_status>
          <cf_last_resolved>2011-03-23 22:46:45</cf_last_resolved>
          
          <votes>0</votes>

      

      

      

          <long_desc isprivate="0">
            <commentid>5326237</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-06 15:45:08 -0800</bug_when>
            <thetext>In order to use the GetBuffered() implementations to help us decide when to pause playback in order to buffer, we need to make it threadsafe. Currently it assumes we only call GetBuffered() from the main thread, but it needs to run on the state machine and decode threads for the patches in bug 628665 to work correctly.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5326448</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-06 20:22:24 -0800</bug_when>
            <thetext>To make GetBuffered() threadsafe, we need to ensure that we pin the media stream while determining which ranges are buffered and also while using said ranges. We also need to ensure that new data isn&apos;t added to the cache while we&apos;re determining what ranges are buffered. We determine what ranges are buffered by looping and calling nsMediaCacheStream::GetNextCachedData() and GetCachedDataEnd(). But if we&apos;re unlucky and the range we&apos;re on increases in size, we could end up creating a new range for every block of data received. So we need to lock the media cache while determining what byte ranges are buffered.

So I propose we factor out the GetNextCachedData()/GetCachedDataEnd() loop pattern we use in all our GetBuffered() implementations, and put that into nsMediaStream, having it fill a vector of ByteRanges while holding the media cache lock. Outside of the lock (in the GetBuffered()) implementations, we can use the vector of ByteRanges to determine their start and end times, without needing to hold the media cache lock.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5326463</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-06 20:32:35 -0800</bug_when>
            <thetext>OK but we will need to protect other structures too, right?

GetBuffered() is only called while we&apos;re in the buffering state, right? Maybe we could simply proxy the call to the main thread via an event.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5326465</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-06 20:38:14 -0800</bug_when>
            <thetext>Yes, the readers need some changes to make them threadsafe too.

We also use GetBuffered() on the decoder thread in HasLowUndecodedData() (once bug bug 628665 lands) to determine whether we should skip-to-keyframe. We also use it to test whether we should go into buffering (but only if HasLowDecodedData() is true). So proxying to the main thread doesn&apos;t seem like a good idea.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5352080</commentid>
              <attachid>520039</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-17 15:23:06 -0700</bug_when>
            <thetext>Created attachment 520039
Patch 1: Push Ogg specific seeking stuff down into nsOggReader

nsBuiltinDecoderReader contains GetBufferedBytes() and GetSeekRange() functions and a ByteRange class which are only used in nsOggReader for seeking. ByteRange also stores the exact time at the start and end of its byte range. GetBufferedBytes() finds the exact start and end times ranges contain by decoding data, whereas nsOggReader::GetBuffered() finds approximate times using the container format, which is quicker, but not accurate enough to be used during seeking.

Since this stuff is Ogg specific, push it down into nsOggReader, and rename ByteRange to SeekRange, since it represents more than just a range of bytes.

Based on top of patches from bug 580531, bug 638617, and bug 628665.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5352083</commentid>
              <attachid>520040</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-17 15:24:09 -0700</bug_when>
            <thetext>Created attachment 520040
Patch 2: Make nsMediaStream responsible for determining cached media data in a threadsafe manner

Add a GetCachedRanges(nsTArray&lt;nsByteRange&gt;&amp;) function to nsMediaStream, which fills an array with the byte ranges which are cached in a threadsafe manner (it holds the media cache lock while running, so data can&apos;t be added or removed from the cache while running). Add a nsByteRange class in nsMediaStream, which represents a [start,end] byte range. We can then ask the nsMediaStream what ranges it has cached, use the cached ranges to determine the times stored in those ranges, and we won&apos;t notice (or be affected or care) if the ranges grow while we&apos;re determining the times they contain. Provided we pin the nsMediaStream while using the ranges, the ranges won&apos;t shrink either.

Based on top of patches from bug 580531, bug 638617, and bug 628665.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5352088</commentid>
              <attachid>520041</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-17 15:25:08 -0700</bug_when>
            <thetext>Created attachment 520041
Patch 3: Pin nsMediaStream while determining buffered ranges

Ensure that while we call nsBuiltinDecoderReader::GetBuffered() implementations, we&apos;ve pinned the media stream. This ensures that data isn&apos;t evicted while we&apos;re determining the times that cached ranges contain.

Based on top of patches from bug 580531, bug 638617, and bug 628665.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5352090</commentid>
              <attachid>520042</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-17 15:26:04 -0700</bug_when>
            <thetext>Created attachment 520042
Patch 4: Ensure Ogg GetBuffered() is threadsafe

Use the nsMediaStream&apos;s cached ranges to determine buffered time ranges.

Based on top of patches from bug 580531, bug 638617, and bug 628665.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5352094</commentid>
              <attachid>520044</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-17 15:26:43 -0700</bug_when>
            <thetext>Created attachment 520044
Patch 5: Ensure WebM GetBuffered() is threadsafe

Use the nsMediaStream&apos;s cached ranges to determine buffered time ranges. Use a monitor to protect access to the byte range to time mapping in nsWebMBufferedState, to make it threadsafe.

Based on top of patches from bug 580531, bug 638617, and bug 628665.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5352104</commentid>
              <attachid>520045</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-17 15:30:13 -0700</bug_when>
            <thetext>Created attachment 520045
Patch 6: Ensure nsWaveReader::GetBuffered() is threadsafe

Use the nsMediaStream&apos;s cached ranges to determine buffered time ranges in the new nsWaveReader which uses the nsBuilinDecoder framework (bug 635649).

Based on top of patches from bug 580531, bug 638617, bug 628665 _and bug 635649_.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5352644</commentid>
              <attachid>520042</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-17 20:07:25 -0700</bug_when>
            <thetext>Comment on attachment 520042
Patch 4: Ensure Ogg GetBuffered() is threadsafe

Now that nsOggReader::GetSeekRanges calls GetCachedRanges, what ensures that the stream is pinned during GetSeekRanges?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5352652</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-17 20:15:30 -0700</bug_when>
            <thetext>(In reply to comment #10)
&gt; Comment on attachment 520042 [details]
&gt; Patch 4: Ensure Ogg GetBuffered() is threadsafe
&gt; 
&gt; Now that nsOggReader::GetSeekRanges calls GetCachedRanges, what ensures that
&gt; the stream is pinned during GetSeekRanges?

That&apos;s called only while we&apos;re seeking, so we should be pinned already. GetCachedRanges() asserts that it&apos;s pinned, so we&apos;ll hear about it if the stream is not pinned.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5352661</commentid>
            <who name="Matthew Gregan [:kinetik]">kinetik</who>
            <bug_when>2011-03-17 20:30:57 -0700</bug_when>
            <thetext>+  NS_ASSERTION(NS_IsMainThread(), &quot;Should be on main thread.&quot;);

This is already asserted higher in the call chain.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5364203</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-23 15:46:45 -0700</bug_when>
            <thetext>http://hg.mozilla.org/mozilla-central/rev/9e2d5f8192dc
http://hg.mozilla.org/mozilla-central/rev/40bc6bd8ceb2
http://hg.mozilla.org/mozilla-central/rev/68ddaa1facdb
http://hg.mozilla.org/mozilla-central/rev/d3aeb102da2b
http://hg.mozilla.org/mozilla-central/rev/4902d72f6072</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5386875</commentid>
            <who name="">u279076</who>
            <bug_when>2011-04-01 11:46:46 -0700</bug_when>
            <thetext>Can someone confirm if this is fixed?</thetext>
          </long_desc>

          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>520039</attachid>
            <date>2011-03-17 15:23:06 -0700</date>
            <delta_ts>2011-03-17 15:25:50 -0700</delta_ts>
            <desc>Patch 1: Push Ogg specific seeking stuff down into nsOggReader</desc>
            <filename>639391-1-byte-range-rename.patch</filename>
            <type>text/plain</type>
            <size>22698</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgYmRhYmQ4MDg2YWFkYzM1NGU3N2ZiNDA2YjFjZTNkYjAyZGVmMjJiMgpC
dWcgNjM5MzkxIC0gUHVzaCBPZ2cgc3BlY2lmaWMgc2Vla2luZyBzdHVmZiBkb3duIGludG8gbnNP
Z2dSZWFkZXIuIHI9PwoKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2Rl
clJlYWRlci5jcHAgYi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuY3BwCi0t
LSBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5jcHAKKysrIGIvY29udGVu
dC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmNwcApAQCAtMjI1LDk0ICsyMjUsMTYgQEAg
bnNyZXN1bHQgbnNCdWlsdGluRGVjb2RlclJlYWRlcjo6UmVzZXREZQogICBuc3Jlc3VsdCByZXMg
PSBOU19PSzsKIAogICBtVmlkZW9RdWV1ZS5SZXNldCgpOwogICBtQXVkaW9RdWV1ZS5SZXNldCgp
OwogCiAgIHJldHVybiByZXM7CiB9CiAKLW5zcmVzdWx0IG5zQnVpbHRpbkRlY29kZXJSZWFkZXI6
OkdldEJ1ZmZlcmVkQnl0ZXMobnNUQXJyYXk8Qnl0ZVJhbmdlPiYgYVJhbmdlcykKLXsKLSAgTlNf
QVNTRVJUSU9OKG1EZWNvZGVyLT5PblN0YXRlTWFjaGluZVRocmVhZCgpLAotICAgICAgICAgICAg
ICAgIlNob3VsZCBiZSBvbiBzdGF0ZSBtYWNoaW5lIHRocmVhZC4iKTsKLSAgbU1vbml0b3IuQXNz
ZXJ0Q3VycmVudFRocmVhZEluKCk7Ci0gIFBSSW50NjQgc3RhcnRPZmZzZXQgPSBtRGF0YU9mZnNl
dDsKLSAgbnNNZWRpYVN0cmVhbSogc3RyZWFtID0gbURlY29kZXItPkdldEN1cnJlbnRTdHJlYW0o
KTsKLSAgd2hpbGUgKFBSX1RSVUUpIHsKLSAgICBQUkludDY0IGVuZE9mZnNldCA9IHN0cmVhbS0+
R2V0Q2FjaGVkRGF0YUVuZChzdGFydE9mZnNldCk7Ci0gICAgaWYgKGVuZE9mZnNldCA9PSBzdGFy
dE9mZnNldCkgewotICAgICAgLy8gVW5jYWNoZWQgYXQgc3RhcnRPZmZzZXQuCi0gICAgICBlbmRP
ZmZzZXQgPSBzdHJlYW0tPkdldE5leHRDYWNoZWREYXRhKHN0YXJ0T2Zmc2V0KTsKLSAgICAgIGlm
IChlbmRPZmZzZXQgPT0gLTEpIHsKLSAgICAgICAgLy8gVW5jYWNoZWQgYXQgc3RhcnRPZmZzZXQg
dW50aWwgZW5kT2Zmc2V0IG9mIHN0cmVhbSwgb3Igd2UncmUgYXQKLSAgICAgICAgLy8gdGhlIGVu
ZCBvZiBzdHJlYW0uCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAvLyBCeXRlcyBbc3RhcnRPZmZzZXQuLmVuZE9mZnNldF0gYXJlIGNhY2hlZC4KLSAgICAgIFBS
SW50NjQgc3RhcnRUaW1lID0gLTE7Ci0gICAgICBQUkludDY0IGVuZFRpbWUgPSAtMTsKLSAgICAg
IGlmIChOU19GQUlMRUQoUmVzZXREZWNvZGUoKSkpIHsKLSAgICAgICAgcmV0dXJuIE5TX0VSUk9S
X0ZBSUxVUkU7Ci0gICAgICB9Ci0gICAgICBGaW5kU3RhcnRUaW1lKHN0YXJ0T2Zmc2V0LCBzdGFy
dFRpbWUpOwotICAgICAgaWYgKHN0YXJ0VGltZSAhPSAtMSAmJgotICAgICAgICAgICgoZW5kVGlt
ZSA9IEZpbmRFbmRUaW1lKGVuZE9mZnNldCkpICE9IC0xKSkKLSAgICAgIHsKLSAgICAgICAgTlNf
QVNTRVJUSU9OKHN0YXJ0T2Zmc2V0IDwgZW5kT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAg
IlN0YXJ0IG9mZnNldCBtdXN0IGJlIGJlZm9yZSBlbmQgb2Zmc2V0Iik7Ci0gICAgICAgIE5TX0FT
U0VSVElPTihzdGFydFRpbWUgPCBlbmRUaW1lLAotICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0
IHRpbWUgbXVzdCBiZSBiZWZvcmUgZW5kIHRpbWUiKTsKLSAgICAgICAgYVJhbmdlcy5BcHBlbmRF
bGVtZW50KEJ5dGVSYW5nZShzdGFydE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnRUaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZFRpbWUpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgc3RhcnRPZmZzZXQgPSBlbmRPZmZz
ZXQ7Ci0gIH0KLSAgaWYgKE5TX0ZBSUxFRChSZXNldERlY29kZSgpKSkgewotICAgIHJldHVybiBO
U19FUlJPUl9GQUlMVVJFOwotICB9Ci0gIHJldHVybiBOU19PSzsKLX0KLQotQnl0ZVJhbmdlCi1u
c0J1aWx0aW5EZWNvZGVyUmVhZGVyOjpHZXRTZWVrUmFuZ2UoY29uc3QgbnNUQXJyYXk8Qnl0ZVJh
bmdlPiYgcmFuZ2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50
NjQgYVRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0
IGFTdGFydFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2
NCBhRW5kVGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wg
YUV4YWN0KQotewotICBOU19BU1NFUlRJT04obURlY29kZXItPk9uU3RhdGVNYWNoaW5lVGhyZWFk
KCksCi0gICAgICAgICAgICAgICAiU2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hpbmUgdGhyZWFkLiIp
OwotICBQUkludDY0IHNvID0gbURhdGFPZmZzZXQ7Ci0gIFBSSW50NjQgZW8gPSBtRGVjb2Rlci0+
R2V0Q3VycmVudFN0cmVhbSgpLT5HZXRMZW5ndGgoKTsKLSAgUFJJbnQ2NCBzdCA9IGFTdGFydFRp
bWU7Ci0gIFBSSW50NjQgZXQgPSBhRW5kVGltZTsKLSAgZm9yIChQUlVpbnQzMiBpID0gMDsgaSA8
IHJhbmdlcy5MZW5ndGgoKTsgaSsrKSB7Ci0gICAgY29uc3QgQnl0ZVJhbmdlICZyID0gcmFuZ2Vz
W2ldOwotICAgIGlmIChyLm1UaW1lU3RhcnQgPCBhVGFyZ2V0KSB7Ci0gICAgICBzbyA9IHIubU9m
ZnNldFN0YXJ0OwotICAgICAgc3QgPSByLm1UaW1lU3RhcnQ7Ci0gICAgfQotICAgIGlmIChyLm1U
aW1lRW5kID49IGFUYXJnZXQgJiYgci5tVGltZUVuZCA8IGV0KSB7Ci0gICAgICBlbyA9IHIubU9m
ZnNldEVuZDsKLSAgICAgIGV0ID0gci5tVGltZUVuZDsKLSAgICB9Ci0KLSAgICBpZiAoci5tVGlt
ZVN0YXJ0IDwgYVRhcmdldCAmJiBhVGFyZ2V0IDw9IHIubVRpbWVFbmQpIHsKLSAgICAgIC8vIFRh
cmdldCBsaWVzIGV4YWN0bHkgaW4gdGhpcyByYW5nZS4KLSAgICAgIHJldHVybiByYW5nZXNbaV07
Ci0gICAgfQotICB9Ci0gIHJldHVybiBhRXhhY3QgPyBCeXRlUmFuZ2UoKSA6IEJ5dGVSYW5nZShz
bywgZW8sIHN0LCBldCk7Ci19Ci0KIFZpZGVvRGF0YSogbnNCdWlsdGluRGVjb2RlclJlYWRlcjo6
RmluZFN0YXJ0VGltZShQUkludDY0IGFPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCYgYU91dFN0YXJ0VGltZSkKIHsKICAgTlNf
QVNTRVJUSU9OKG1EZWNvZGVyLT5PblN0YXRlTWFjaGluZVRocmVhZCgpLCAiU2hvdWxkIGJlIG9u
IHN0YXRlIG1hY2hpbmUgdGhyZWFkLiIpOwogCiAgIGlmIChOU19GQUlMRUQoUmVzZXREZWNvZGUo
KSkpIHsKICAgICByZXR1cm4gbnNudWxsOwogICB9CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlh
L25zQnVpbHRpbkRlY29kZXJSZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2Rl
clJlYWRlci5oCi0tLSBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5oCisr
KyBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5oCkBAIC00MDAsNDkgKzQw
MCwxNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTWVkaWFRdWV1ZSA6IHByCiBwcml2YXRl
OgogICBNb25pdG9yIG1Nb25pdG9yOwogCiAgIC8vIFBSX1RSVUUgd2hlbiB3ZSd2ZSBkZWNvZGVk
IHRoZSBsYXN0IGZyYW1lIG9mIGRhdGEgaW4gdGhlCiAgIC8vIGJpdHN0cmVhbSBmb3Igd2hpY2gg
d2UncmUgcXVldWVpbmcgc2FtcGxlLWRhdGEuCiAgIFBSQm9vbCBtRW5kT2ZTdHJlYW07CiB9Owog
Ci0vLyBSZXByZXNlbnRzIGEgc2VjdGlvbiBvZiBjb250aWd1b3VzIG1lZGlhLCB3aXRoIGEgc3Rh
cnQgYW5kIGVuZCBvZmZzZXQsCi0vLyBhbmQgdGhlIHRpbWVzdGFtcHMgb2YgdGhlIHN0YXJ0IGFu
ZCBlbmQgb2YgdGhhdCByYW5nZS4gVXNlZCB0byBkZW5vdGUgdGhlCi0vLyBleHRyZW1pdGllcyBv
ZiBhIHJhbmdlIHRvIHNlZWsgaW4uCi1jbGFzcyBCeXRlUmFuZ2UgewotcHVibGljOgotICBCeXRl
UmFuZ2UoKQotICAgIDogbU9mZnNldFN0YXJ0KDApLAotICAgICAgbU9mZnNldEVuZCgwKSwKLSAg
ICAgIG1UaW1lU3RhcnQoMCksCi0gICAgICBtVGltZUVuZCgwKQotICB7fQotCi0gIEJ5dGVSYW5n
ZShQUkludDY0IGFPZmZzZXRTdGFydCwKLSAgICAgICAgICAgIFBSSW50NjQgYU9mZnNldEVuZCwK
LSAgICAgICAgICAgIFBSSW50NjQgYVRpbWVTdGFydCwKLSAgICAgICAgICAgIFBSSW50NjQgYVRp
bWVFbmQpCi0gICAgOiBtT2Zmc2V0U3RhcnQoYU9mZnNldFN0YXJ0KSwKLSAgICAgIG1PZmZzZXRF
bmQoYU9mZnNldEVuZCksCi0gICAgICBtVGltZVN0YXJ0KGFUaW1lU3RhcnQpLAotICAgICAgbVRp
bWVFbmQoYVRpbWVFbmQpCi0gIHt9Ci0KLSAgUFJCb29sIElzTnVsbCgpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gbU9mZnNldFN0YXJ0ID09IDAgJiYKLSAgICAgICAgICAgbU9mZnNldEVuZCA9PSAwICYm
Ci0gICAgICAgICAgIG1UaW1lU3RhcnQgPT0gMCAmJgotICAgICAgICAgICBtVGltZUVuZCA9PSAw
OwotICB9Ci0KLSAgUFJJbnQ2NCBtT2Zmc2V0U3RhcnQsIG1PZmZzZXRFbmQ7IC8vIGluIGJ5dGVz
LgotICBQUkludDY0IG1UaW1lU3RhcnQsIG1UaW1lRW5kOyAvLyBpbiBtcy4KLX07Ci0KIC8vIEVu
Y2Fwc3VsYXRlcyB0aGUgZGVjb2RpbmcgYW5kIHJlYWRpbmcgb2YgbWVkaWEgZGF0YS4gUmVhZGlu
ZyBjYW4gYmUgZG9uZQogLy8gb24gZWl0aGVyIHRoZSBzdGF0ZSBtYWNoaW5lIHRocmVhZCAod2hl
biBsb2FkaW5nIGFuZCBzZWVraW5nKSBvciBvbgogLy8gdGhlIHJlYWRlciB0aHJlYWQgKHdoZW4g
aXQncyByZWFkaW5nIGFuZCBkZWNvZGluZykuIFRoZSByZWFkZXIgZW5jYXBzdWxhdGVzCiAvLyB0
aGUgcmVhZGluZyBzdGF0ZSBhbmQgbWFpbnRhaW5zIGl0J3Mgb3duIG1vbml0b3IgdG8gZW5zdXJl
IHRocmVhZCBzYWZldHkKIC8vIGFuZCBjb3JyZWN0bmVzcy4gTmV2ZXIgaG9sZCB0aGUgbnNCdWls
dGluRGVjb2RlcidzIG1vbml0b3Igd2hlbiBjYWxsaW5nIGludG8KIC8vIHRoaXMgY2xhc3MuCiBj
bGFzcyBuc0J1aWx0aW5EZWNvZGVyUmVhZGVyIDogcHVibGljIG5zUnVubmFibGUgewogcHVibGlj
OgpAQCAtNTM2LDM2ICs1MDMsMTYgQEAgcHJvdGVjdGVkOgogCiAgIC8vIFdyYXBwZXIgc28gdGhh
dCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCYsUFJJbnQ2NCkgY2FuIGJlIGNhbGxlZCBmcm9tCiAg
IC8vIERlY29kZVRvRmlyc3REYXRhKCkuCiAgIFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKCkgewog
ICAgIFBSQm9vbCBmID0gUFJfRkFMU0U7CiAgICAgcmV0dXJuIERlY29kZVZpZGVvRnJhbWUoZiwg
MCk7CiAgIH0KIAotICAvLyBGaWxscyBhUmFuZ2VzIHdpdGggQnl0ZVJhbmdlcyBkZW5vdGluZyB0
aGUgc2VjdGlvbnMgb2YgdGhlIG1lZGlhIHdoaWNoCi0gIC8vIGhhdmUgYmVlbiBkb3dubG9hZGVk
IGFuZCBhcmUgc3RvcmVkIGluIHRoZSBtZWRpYSBjYWNoZS4gVGhlIHJlYWRlcgotICAvLyBtb25p
dG9yIG11c3QgbXVzdCBiZSBoZWxkIHdpdGggZXhhY3RseSBvbmUgbG9jayBjb3VudC4gVGhlIG5z
TWVkaWFTdHJlYW0KLSAgLy8gbXVzdCBiZSBwaW5uZWQgd2hpbGUgY2FsbGluZyB0aGlzLgotICBu
c3Jlc3VsdCBHZXRCdWZmZXJlZEJ5dGVzKG5zVEFycmF5PEJ5dGVSYW5nZT4mIGFSYW5nZXMpOwot
Ci0gIC8vIFJldHVybnMgdGhlIHJhbmdlIGluIHdoaWNoIHlvdSBzaG91bGQgcGVyZm9ybSBhIHNl
ZWsgYmlzZWN0aW9uIGlmCi0gIC8vIHlvdSB3aXNoIHRvIHNlZWsgdG8gYVRhcmdldCBtcywgZ2l2
ZW4gdGhlIGtub3duIChidWZmZXJlZCkgYnl0ZSByYW5nZXMKLSAgLy8gaW4gYVJhbmdlcy4gSWYg
YUV4YWN0IGlzIFBSX1RSVUUsIHdlIG9ubHkgcmV0dXJuIGFuIGV4YWN0IGNvcHkgb2YgYQotICAv
LyByYW5nZSBpbiB3aGljaCBhVGFyZ2V0IGxpZXMsIG9yIGEgbnVsbCByYW5nZSBpZiBhVGFyZ2V0
IGlzbid0IGNvbnRhaW5lZAotICAvLyBpbiBhbnkgb2YgdGhlIChidWZmZXJlZCkgcmFuZ2VzLiBP
dGhlcndpc2UsIHdoZW4gYUV4YWN0IGlzIFBSX0ZBTFNFLAotICAvLyB3ZSdsbCBjb25zdHJ1Y3Qg
dGhlIHNtYWxsZXN0IHBvc3NpYmxlIHJhbmdlIHdlIGNhbiwgYmFzZWQgb24gdGhlIHRpbWVzCi0g
IC8vIGFuZCBieXRlIG9mZnNldHMga25vd24gaW4gYVJhbmdlcy4gV2UgY2FuIHRoZW4gdXNlIHRo
aXMgdG8gbWluaW1pemUgb3VyCi0gIC8vIGJpc2VjdGlvbidzIHNlYXJjaCBzcGFjZSB3aGVuIHRo
ZSB0YXJnZXQgaXNuJ3QgaW4gYSBrbm93biBidWZmZXJlZCByYW5nZS4KLSAgQnl0ZVJhbmdlIEdl
dFNlZWtSYW5nZShjb25zdCBuc1RBcnJheTxCeXRlUmFuZ2U+JiBhUmFuZ2VzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSSW50NjQgYVRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkludDY0IGFTdGFydFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBh
RW5kVGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUV4YWN0KTsKLQogICAv
LyBUaGUgbG9jayB3aGljaCB3ZSBob2xkIHdoZW5ldmVyIHdlIHJlYWQgb3IgZGVjb2RlLiBUaGlz
IGVuc3VyZXMgdGhlIHRocmVhZAogICAvLyBzYWZldHkgb2YgdGhlIHJlYWRlciBhbmQgaXRzIGRh
dGEgZmllbGRzLgogICBNb25pdG9yIG1Nb25pdG9yOwogCiAgIC8vIFJlZmVyZW5jZSB0byB0aGUg
b3duaW5nIGRlY29kZXIgb2JqZWN0LiBEbyBub3QgaG9sZCB0aGUKICAgLy8gcmVhZGVyJ3MgbW9u
aXRvciB3aGVuIGFjY2Vzc2luZyB0aGlzLgogICBuc0J1aWx0aW5EZWNvZGVyKiBtRGVjb2RlcjsK
IApkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwIGIvY29udGVu
dC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwCi0tLSBhL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dn
UmVhZGVyLmNwcAorKysgYi9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5jcHAKQEAgLTEw
MTgsMTYgKzEwMTgsOTQgQEAgUFJJbnQ2NCBuc09nZ1JlYWRlcjo6RmluZEVuZFRpbWUoUFJJbnQ2
NAogICAgIH0KICAgfQogCiAgIG9nZ19zeW5jX3Jlc2V0KGFTdGF0ZSk7CiAKICAgcmV0dXJuIGVu
ZFRpbWU7CiB9CiAKK25zcmVzdWx0IG5zT2dnUmVhZGVyOjpHZXRTZWVrUmFuZ2VzKG5zVEFycmF5
PFNlZWtSYW5nZT4mIGFSYW5nZXMpCit7CisgIE5TX0FTU0VSVElPTihtRGVjb2Rlci0+T25TdGF0
ZU1hY2hpbmVUaHJlYWQoKSwKKyAgICAgICAgICAgICAgICJTaG91bGQgYmUgb24gc3RhdGUgbWFj
aGluZSB0aHJlYWQuIik7CisgIG1Nb25pdG9yLkFzc2VydEN1cnJlbnRUaHJlYWRJbigpOworICBQ
UkludDY0IHN0YXJ0T2Zmc2V0ID0gbURhdGFPZmZzZXQ7CisgIG5zTWVkaWFTdHJlYW0qIHN0cmVh
bSA9IG1EZWNvZGVyLT5HZXRDdXJyZW50U3RyZWFtKCk7CisgIHdoaWxlIChQUl9UUlVFKSB7Cisg
ICAgUFJJbnQ2NCBlbmRPZmZzZXQgPSBzdHJlYW0tPkdldENhY2hlZERhdGFFbmQoc3RhcnRPZmZz
ZXQpOworICAgIGlmIChlbmRPZmZzZXQgPT0gc3RhcnRPZmZzZXQpIHsKKyAgICAgIC8vIFVuY2Fj
aGVkIGF0IHN0YXJ0T2Zmc2V0LgorICAgICAgZW5kT2Zmc2V0ID0gc3RyZWFtLT5HZXROZXh0Q2Fj
aGVkRGF0YShzdGFydE9mZnNldCk7CisgICAgICBpZiAoZW5kT2Zmc2V0ID09IC0xKSB7CisgICAg
ICAgIC8vIFVuY2FjaGVkIGF0IHN0YXJ0T2Zmc2V0IHVudGlsIGVuZE9mZnNldCBvZiBzdHJlYW0s
IG9yIHdlJ3JlIGF0CisgICAgICAgIC8vIHRoZSBlbmQgb2Ygc3RyZWFtLgorICAgICAgICBicmVh
azsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gQnl0ZXMgW3N0YXJ0T2Zmc2V0Li5l
bmRPZmZzZXRdIGFyZSBjYWNoZWQuCisgICAgICBQUkludDY0IHN0YXJ0VGltZSA9IC0xOworICAg
ICAgUFJJbnQ2NCBlbmRUaW1lID0gLTE7CisgICAgICBpZiAoTlNfRkFJTEVEKFJlc2V0RGVjb2Rl
KCkpKSB7CisgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAgfQorICAgICAg
RmluZFN0YXJ0VGltZShzdGFydE9mZnNldCwgc3RhcnRUaW1lKTsKKyAgICAgIGlmIChzdGFydFRp
bWUgIT0gLTEgJiYKKyAgICAgICAgICAoKGVuZFRpbWUgPSBGaW5kRW5kVGltZShlbmRPZmZzZXQp
KSAhPSAtMSkpCisgICAgICB7CisgICAgICAgIE5TX0FTU0VSVElPTihzdGFydE9mZnNldCA8IGVu
ZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICJTdGFydCBvZmZzZXQgbXVzdCBiZSBiZWZv
cmUgZW5kIG9mZnNldCIpOworICAgICAgICBOU19BU1NFUlRJT04oc3RhcnRUaW1lIDwgZW5kVGlt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICJTdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIGVuZCB0
aW1lIik7CisgICAgICAgIGFSYW5nZXMuQXBwZW5kRWxlbWVudChTZWVrUmFuZ2Uoc3RhcnRPZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lKSk7CisgICAgICB9Cisg
ICAgfQorICAgIHN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0OworICB9CisgIGlmIChOU19GQUlMRUQo
UmVzZXREZWNvZGUoKSkpIHsKKyAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgfQorICBy
ZXR1cm4gTlNfT0s7Cit9CisKK25zT2dnUmVhZGVyOjpTZWVrUmFuZ2UKK25zT2dnUmVhZGVyOjpT
ZWxlY3RTZWVrUmFuZ2UoY29uc3QgbnNUQXJyYXk8U2Vla1JhbmdlPiYgcmFuZ2VzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUYXJnZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSSW50NjQgYVN0YXJ0VGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJJbnQ2NCBhRW5kVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJC
b29sIGFFeGFjdCkKK3sKKyAgTlNfQVNTRVJUSU9OKG1EZWNvZGVyLT5PblN0YXRlTWFjaGluZVRo
cmVhZCgpLAorICAgICAgICAgICAgICAgIlNob3VsZCBiZSBvbiBzdGF0ZSBtYWNoaW5lIHRocmVh
ZC4iKTsKKyAgUFJJbnQ2NCBzbyA9IG1EYXRhT2Zmc2V0OworICBQUkludDY0IGVvID0gbURlY29k
ZXItPkdldEN1cnJlbnRTdHJlYW0oKS0+R2V0TGVuZ3RoKCk7CisgIFBSSW50NjQgc3QgPSBhU3Rh
cnRUaW1lOworICBQUkludDY0IGV0ID0gYUVuZFRpbWU7CisgIGZvciAoUFJVaW50MzIgaSA9IDA7
IGkgPCByYW5nZXMuTGVuZ3RoKCk7IGkrKykgeworICAgIGNvbnN0IFNlZWtSYW5nZSAmciA9IHJh
bmdlc1tpXTsKKyAgICBpZiAoci5tVGltZVN0YXJ0IDwgYVRhcmdldCkgeworICAgICAgc28gPSBy
Lm1PZmZzZXRTdGFydDsKKyAgICAgIHN0ID0gci5tVGltZVN0YXJ0OworICAgIH0KKyAgICBpZiAo
ci5tVGltZUVuZCA+PSBhVGFyZ2V0ICYmIHIubVRpbWVFbmQgPCBldCkgeworICAgICAgZW8gPSBy
Lm1PZmZzZXRFbmQ7CisgICAgICBldCA9IHIubVRpbWVFbmQ7CisgICAgfQorCisgICAgaWYgKHIu
bVRpbWVTdGFydCA8IGFUYXJnZXQgJiYgYVRhcmdldCA8PSByLm1UaW1lRW5kKSB7CisgICAgICAv
LyBUYXJnZXQgbGllcyBleGFjdGx5IGluIHRoaXMgcmFuZ2UuCisgICAgICByZXR1cm4gcmFuZ2Vz
W2ldOworICAgIH0KKyAgfQorICByZXR1cm4gYUV4YWN0ID8gU2Vla1JhbmdlKCkgOiBTZWVrUmFu
Z2Uoc28sIGVvLCBzdCwgZXQpOworfQorCiBuc09nZ1JlYWRlcjo6SW5kZXhlZFNlZWtSZXN1bHQg
bnNPZ2dSZWFkZXI6OlJvbGxiYWNrSW5kZXhlZFNlZWsoUFJJbnQ2NCBhT2Zmc2V0KQogewogICBt
U2tlbGV0b25TdGF0ZS0+RGVhY3RpdmF0ZSgpOwogICBuc01lZGlhU3RyZWFtKiBzdHJlYW0gPSBt
RGVjb2Rlci0+R2V0Q3VycmVudFN0cmVhbSgpOwogICBOU19FTlNVUkVfVFJVRShzdHJlYW0gIT0g
bnNudWxsLCBTRUVLX0ZBVEFMX0VSUk9SKTsKICAgbnNyZXN1bHQgcmVzID0gc3RyZWFtLT5TZWVr
KG5zSVNlZWthYmxlU3RyZWFtOjpOU19TRUVLX1NFVCwgYU9mZnNldCk7CiAgIE5TX0VOU1VSRV9T
VUNDRVNTKHJlcywgU0VFS19GQVRBTF9FUlJPUik7CiAgIHJldHVybiBTRUVLX0lOREVYX0ZBSUw7
CkBAIC0xMTEzLDE4ICsxMTkxLDE4IEBAIG5zT2dnUmVhZGVyOjpJbmRleGVkU2Vla1Jlc3VsdCBu
c09nZ1JlYWQKICAgfSAgICAgIAogICBtUGFnZU9mZnNldCA9IGtleWZyYW1lLm1LZXlQb2ludC5t
T2Zmc2V0ICsgcGFnZS5oZWFkZXJfbGVuICsgcGFnZS5ib2R5X2xlbjsKICAgcmV0dXJuIFNFRUtf
T0s7CiB9CiAKIG5zcmVzdWx0IG5zT2dnUmVhZGVyOjpTZWVrSW5CdWZmZXJlZFJhbmdlKFBSSW50
NjQgYVRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
SW50NjQgYVN0YXJ0VGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50NjQgYUVuZFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc1RBcnJheTxCeXRlUmFuZ2U+JiBhUmFuZ2VzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZVJhbmdlJiBhUmFuZ2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1RBcnJheTxT
ZWVrUmFuZ2U+JiBhUmFuZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU2Vla1JhbmdlJiBhUmFuZ2UpCiB7CiAgIExPRyhQUl9MT0dfREVCVUcsICgi
JXAgU2Vla2luZyBpbiBidWZmZXJlZCBkYXRhIHRvICVsbGRtcyB1c2luZyBiaXNlY3Rpb24gc2Vh
cmNoIiwgbURlY29kZXIsIGFUYXJnZXQpKTsKIAogICAvLyBXZSBrbm93IHRoZSBleGFjdCBieXRl
IHJhbmdlIGluIHdoaWNoIHRoZSB0YXJnZXQgbXVzdCBsaWUuIEl0IG11c3QKICAgLy8gYmUgYnVm
ZmVyZWQgaW4gdGhlIG1lZGlhIGNhY2hlLiBTZWVrIHRoZXJlLgogICBuc3Jlc3VsdCByZXMgPSBT
ZWVrQmlzZWN0aW9uKGFUYXJnZXQsIGFSYW5nZSwgMCk7CiAgIGlmIChOU19GQUlMRUQocmVzKSB8
fCAhSGFzVmlkZW8oKSkgewogICAgIHJldHVybiByZXM7CkBAIC0xMTUxLDIxICsxMjI5LDIxIEBA
IG5zcmVzdWx0IG5zT2dnUmVhZGVyOjpTZWVrSW5CdWZmZXJlZFJhbmcKICAgICAvLyBGaXJzdCBk
ZWNvZGVkIGZyYW1lIGlzbid0IGEga2V5ZnJhbWUsIHNlZWsgYmFjayB0byBwcmV2aW91cyBrZXlm
cmFtZSwKICAgICAvLyBvdGhlcndpc2Ugd2UnbGwgZ2V0IHZpc3VhbCBhcnRpZmFjdHMuCiAgICAg
TlNfQVNTRVJUSU9OKHZpZGVvLT5tVGltZWNvZGUgIT0gLTEsICJNdXN0IGhhdmUgYSBncmFudWxl
cG9zIik7CiAgICAgaW50IHNoaWZ0ID0gbVRoZW9yYVN0YXRlLT5tSW5mby5rZXlmcmFtZV9ncmFu
dWxlX3NoaWZ0OwogICAgIFBSSW50NjQga2V5ZnJhbWVHcmFudWxlcG9zID0gKHZpZGVvLT5tVGlt
ZWNvZGUgPj4gc2hpZnQpIDw8IHNoaWZ0OwogICAgIFBSSW50NjQga2V5ZnJhbWVUaW1lID0gbVRo
ZW9yYVN0YXRlLT5TdGFydFRpbWUoa2V5ZnJhbWVHcmFudWxlcG9zKTsKICAgICBTRUVLX0xPRyhQ
Ul9MT0dfREVCVUcsICgiS2V5ZnJhbWUgZm9yICVsbGQgaXMgYXQgJWxsZCwgc2Vla2luZyBiYWNr
IHRvIGl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlby0+bVRpbWUsIGtleWZy
YW1lVGltZSkpOwotICAgIEJ5dGVSYW5nZSBrID0gR2V0U2Vla1JhbmdlKGFSYW5nZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZnJhbWVUaW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFTdGFydFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYUVuZFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJfRkFMU0UpOwor
ICAgIFNlZWtSYW5nZSBrID0gU2VsZWN0U2Vla1JhbmdlKGFSYW5nZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga2V5ZnJhbWVUaW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFTdGFydFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYUVuZFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJfRkFMU0Up
OwogICAgIHJlcyA9IFNlZWtCaXNlY3Rpb24oa2V5ZnJhbWVUaW1lLCBrLCBTRUVLX0ZVWlpfTVMp
OwogICAgIE5TX0FTU0VSVElPTihtVGhlb3JhR3JhbnVsZXBvcyA9PSAtMSwgIlNlZWtCaXNlY3Rp
b24gbXVzdCByZXNldCBUaGVvcmEgZGVjb2RlIik7CiAgICAgTlNfQVNTRVJUSU9OKG1Wb3JiaXNH
cmFudWxlcG9zID09IC0xLCAiU2Vla0Jpc2VjdGlvbiBtdXN0IHJlc2V0IFZvcmJpcyBkZWNvZGUi
KTsKICAgfQogICByZXR1cm4gcmVzOwogfQogCiBQUkJvb2wgbnNPZ2dSZWFkZXI6OkNhbkRlY29k
ZVRvVGFyZ2V0KFBSSW50NjQgYVRhcmdldCwKQEAgLTExNzcsMTcgKzEyNTUsMTcgQEAgUFJCb29s
IG5zT2dnUmVhZGVyOjpDYW5EZWNvZGVUb1RhcmdldChQUgogICBQUkludDY0IG1hcmdpbiA9IEhh
c1ZpZGVvKCkgPyBtVGhlb3JhU3RhdGUtPk1heEtleWZyYW1lT2Zmc2V0KCkgOiBTRUVLX0RFQ09E
RV9NQVJHSU47CiAgIHJldHVybiBhVGFyZ2V0ID49IGFDdXJyZW50VGltZSAmJgogICAgICAgICAg
YVRhcmdldCAtIGFDdXJyZW50VGltZSA8IG1hcmdpbjsKIH0KIAogbnNyZXN1bHQgbnNPZ2dSZWFk
ZXI6OlNlZWtJblVuYnVmZmVyZWQoUFJJbnQ2NCBhVGFyZ2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhU3RhcnRUaW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhRW5kVGltZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zVEFycmF5PEJ5dGVSYW5nZT4mIGFSYW5n
ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1RBcnJh
eTxTZWVrUmFuZ2U+JiBhUmFuZ2VzKQogewogICBMT0coUFJfTE9HX0RFQlVHLCAoIiVwIFNlZWtp
bmcgaW4gdW5idWZmZXJlZCBkYXRhIHRvICVsbGRtcyB1c2luZyBiaXNlY3Rpb24gc2VhcmNoIiwg
bURlY29kZXIsIGFUYXJnZXQpKTsKICAgCiAgIC8vIElmIHdlJ3ZlIGdvdCBhbiBhY3RpdmUgVGhl
b3JhIGJpdHN0cmVhbSwgZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIHBvc3NpYmxlCiAgIC8vIHRpbWUg
aW4gbXMgd2hpY2ggYSBrZXlmcmFtZSBjb3VsZCBiZSBiZWZvcmUgYSBnaXZlbiBpbnRlcmZyYW1l
LiBXZQogICAvLyBzdWJ0cmFjdCB0aGlzIGZyb20gb3VyIHNlZWsgdGFyZ2V0LCBzZWVrIHRvIHRo
ZSBuZXcgdGFyZ2V0LCBhbmQgdGhlbgogICAvLyB3aWxsIGRlY29kZSBmb3J3YXJkIHRvIHRoZSBv
cmlnaW5hbCBzZWVrIHRhcmdldC4gV2Ugc2hvdWxkIGVuY291bnRlciBhCiAgIC8vIGtleWZyYW1l
IGluIHRoYXQgaW50ZXJ2YWwuIFRoaXMgcHJldmVudHMgdXMgZnJvbSBuZWVkaW5nIHRvIHJ1biB0
d28KQEAgLTEyMDAsMTcgKzEyNzgsMTcgQEAgbnNyZXN1bHQgbnNPZ2dSZWFkZXI6OlNlZWtJblVu
YnVmZmVyZWQoUAogICAvLyBrZXlmcmFtZSkuCiAgIFBSSW50NjQga2V5ZnJhbWVPZmZzZXRNcyA9
IDA7CiAgIGlmIChIYXNWaWRlbygpICYmIG1UaGVvcmFTdGF0ZSkgewogICAgIGtleWZyYW1lT2Zm
c2V0TXMgPSBtVGhlb3JhU3RhdGUtPk1heEtleWZyYW1lT2Zmc2V0KCk7CiAgIH0KICAgUFJJbnQ2
NCBzZWVrVGFyZ2V0ID0gTlNfTUFYKGFTdGFydFRpbWUsIGFUYXJnZXQgLSBrZXlmcmFtZU9mZnNl
dE1zKTsKICAgLy8gTWluaW1pemUgdGhlIGJpc2VjdGlvbiBzZWFyY2ggc3BhY2UgdXNpbmcgdGhl
IGtub3duIHRpbWVzdGFtcHMgZnJvbSB0aGUKICAgLy8gYnVmZmVyZWQgcmFuZ2VzLgotICBCeXRl
UmFuZ2UgayA9IEdldFNlZWtSYW5nZShhUmFuZ2VzLCBzZWVrVGFyZ2V0LCBhU3RhcnRUaW1lLCBh
RW5kVGltZSwgUFJfRkFMU0UpOworICBTZWVrUmFuZ2UgayA9IFNlbGVjdFNlZWtSYW5nZShhUmFu
Z2VzLCBzZWVrVGFyZ2V0LCBhU3RhcnRUaW1lLCBhRW5kVGltZSwgUFJfRkFMU0UpOwogICBuc3Jl
c3VsdCByZXMgPSBTZWVrQmlzZWN0aW9uKHNlZWtUYXJnZXQsIGssIFNFRUtfRlVaWl9NUyk7CiAg
IE5TX0FTU0VSVElPTihtVGhlb3JhR3JhbnVsZXBvcyA9PSAtMSwgIlNlZWtCaXNlY3Rpb24gbXVz
dCByZXNldCBUaGVvcmEgZGVjb2RlIik7CiAgIE5TX0FTU0VSVElPTihtVm9yYmlzR3JhbnVsZXBv
cyA9PSAtMSwgIlNlZWtCaXNlY3Rpb24gbXVzdCByZXNldCBWb3JiaXMgZGVjb2RlIik7CiAgIHJl
dHVybiByZXM7CiB9CiAKIG5zcmVzdWx0IG5zT2dnUmVhZGVyOjpTZWVrKFBSSW50NjQgYVRhcmdl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVN0YXJ0VGltZSwKQEAgLTEy
NDYsMjIgKzEzMjQsMjIgQEAgbnNyZXN1bHQgbnNPZ2dSZWFkZXI6OlNlZWsoUFJJbnQ2NCBhVGFy
ZwogICAgICAgICAid2lsbCBqdXN0IGRlY29kZSB0byBpdCIsIG1EZWNvZGVyLCBhQ3VycmVudFRp
bWUsIGFUYXJnZXQpKTsKICAgfSBlbHNlIHsKICAgICBJbmRleGVkU2Vla1Jlc3VsdCBzcmVzID0g
U2Vla1RvS2V5ZnJhbWVVc2luZ0luZGV4KGFUYXJnZXQpOwogICAgIE5TX0VOU1VSRV9UUlVFKHNy
ZXMgIT0gU0VFS19GQVRBTF9FUlJPUiwgTlNfRVJST1JfRkFJTFVSRSk7CiAgICAgaWYgKHNyZXMg
PT0gU0VFS19JTkRFWF9GQUlMKSB7CiAgICAgICAvLyBObyBpbmRleCBvciBvdGhlciBub24tZmF0
YWwgaW5kZXgtcmVsYXRlZCBmYWlsdXJlLiBUcnkgdG8gc2VlawogICAgICAgLy8gdXNpbmcgYSBi
aXNlY3Rpb24gc2VhcmNoLiBEZXRlcm1pbmUgdGhlIGFscmVhZHkgZG93bmxvYWRlZCBkYXRhCiAg
ICAgICAvLyBpbiB0aGUgbWVkaWEgY2FjaGUsIHNvIHdlIGNhbiB0cnkgdG8gc2VlayBpbiB0aGUg
Y2FjaGVkIGRhdGEgZmlyc3QuCi0gICAgICBuc0F1dG9UQXJyYXk8Qnl0ZVJhbmdlLCAxNj4gcmFu
Z2VzOwotICAgICAgcmVzID0gR2V0QnVmZmVyZWRCeXRlcyhyYW5nZXMpOworICAgICAgbnNBdXRv
VEFycmF5PFNlZWtSYW5nZSwgMTY+IHJhbmdlczsKKyAgICAgIHJlcyA9IEdldFNlZWtSYW5nZXMo
cmFuZ2VzKTsKICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJlcyxyZXMpOwogCiAgICAgICAvLyBG
aWd1cmUgb3V0IGlmIHRoZSBzZWVrIHRhcmdldCBsaWVzIGluIGEgYnVmZmVyZWQgcmFuZ2UuCi0g
ICAgICBCeXRlUmFuZ2UgciA9IEdldFNlZWtSYW5nZShyYW5nZXMsIGFUYXJnZXQsIGFTdGFydFRp
bWUsIGFFbmRUaW1lLCBQUl9UUlVFKTsKKyAgICAgIFNlZWtSYW5nZSByID0gU2VsZWN0U2Vla1Jh
bmdlKHJhbmdlcywgYVRhcmdldCwgYVN0YXJ0VGltZSwgYUVuZFRpbWUsIFBSX1RSVUUpOwogCiAg
ICAgICBpZiAoIXIuSXNOdWxsKCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGUgYnVmZmVyZWQg
cmFuZ2UgaW4gd2hpY2ggdGhlIHNlZWsgdGFyZ2V0IGxpZXMsIGRvIGEKICAgICAgICAgLy8gYmlz
ZWN0aW9uIHNlYXJjaCBpbiB0aGF0IGJ1ZmZlcmVkIHJhbmdlLgogICAgICAgICByZXMgPSBTZWVr
SW5CdWZmZXJlZFJhbmdlKGFUYXJnZXQsIGFTdGFydFRpbWUsIGFFbmRUaW1lLCByYW5nZXMsIHIp
OwogICAgICAgICBOU19FTlNVUkVfU1VDQ0VTUyhyZXMscmVzKTsKICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIFRoZSB0YXJnZXQgZG9lc24ndCBsaWUgaW4gYSBidWZmZXJlZCByYW5nZS4gUGVy
Zm9ybSBhIGJpc2VjdGlvbgpAQCAtMTM0MCwxNyArMTQxOCwxNyBAQCBQYWdlU3luYyhuc01lZGlh
U3RyZWFtKiBhU3RyZWFtLAogICAgICAgY29udGludWU7CiAgICAgfQogICB9CiAgIAogICByZXR1
cm4gUEFHRV9TWU5DX09LOwogfQogCiBuc3Jlc3VsdCBuc09nZ1JlYWRlcjo6U2Vla0Jpc2VjdGlv
bihQUkludDY0IGFUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBCeXRlUmFuZ2UmIGFSYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNlZWtSYW5nZSYgYVJhbmdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MzIgYUZ1enopCiB7CiAgIE5TX0FTU0VSVElPTihtRGVjb2Rlci0+T25T
dGF0ZU1hY2hpbmVUaHJlYWQoKSwKICAgICAgICAgICAgICAgICJTaG91bGQgYmUgb24gc3RhdGUg
bWFjaGluZSB0aHJlYWQuIik7CiAgIG5zcmVzdWx0IHJlczsKICAgbnNNZWRpYVN0cmVhbSogc3Ry
ZWFtID0gbURlY29kZXItPkdldEN1cnJlbnRTdHJlYW0oKTsKIAogICBpZiAoYVRhcmdldCA9PSBh
UmFuZ2UubVRpbWVTdGFydCkgewpAQCAtMTcxMSw5ICsxNzg5LDggQEAgUFJCb29sIG5zT2dnUmVh
ZGVyOjpJc0tub3duU3RyZWFtKFBSVWludAogICAgIFBSVWludDMyIHNlcmlhbCA9IG1Lbm93blN0
cmVhbXNbaV07CiAgICAgaWYgKHNlcmlhbCA9PSBhU2VyaWFsKSB7CiAgICAgICByZXR1cm4gUFJf
VFJVRTsKICAgICB9CiAgIH0KIAogICByZXR1cm4gUFJfRkFMU0U7CiB9Ci0KZGlmZiAtLWdpdCBh
L2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmggYi9jb250ZW50L21lZGlhL29nZy9uc09n
Z1JlYWRlci5oCi0tLSBhL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmgKKysrIGIvY29u
dGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuaApAQCAtMTE2LDM3ICsxMTYsNzEgQEAgcHJpdmF0
ZToKICAgICBTRUVLX0lOREVYX0ZBSUwsICAvLyBGYWlsdXJlIGR1ZSB0byBubyBpbmRleCwgb3Ig
aW52YWxpZCBpbmRleC4KICAgICBTRUVLX0ZBVEFMX0VSUk9SICAvLyBFcnJvciByZXR1cm5lZCBi
eSBhIHN0cmVhbSBvcGVyYXRpb24uCiAgIH07CiAgIEluZGV4ZWRTZWVrUmVzdWx0IFNlZWtUb0tl
eWZyYW1lVXNpbmdJbmRleChQUkludDY0IGFUYXJnZXQpOwogCiAgIC8vIFJvbGxzIGJhY2sgYSBz
ZWVrLXVzaW5nLWluZGV4IGF0dGVtcHQsIHJldHVybmluZyBhIGZhaWx1cmUgZXJyb3IgY29kZS4K
ICAgSW5kZXhlZFNlZWtSZXN1bHQgUm9sbGJhY2tJbmRleGVkU2VlayhQUkludDY0IGFPZmZzZXQp
OwogCisgIC8vIFJlcHJlc2VudHMgYSBzZWN0aW9uIG9mIGNvbnRpZ3VvdXMgbWVkaWEsIHdpdGgg
YSBzdGFydCBhbmQgZW5kIG9mZnNldCwKKyAgLy8gYW5kIHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBz
dGFydCBhbmQgZW5kIG9mIHRoYXQgcmFuZ2UsIHRoYXQgaXMgY2FjaGVkLgorICAvLyBVc2VkIHRv
IGRlbm90ZSB0aGUgZXh0cmVtaXRpZXMgb2YgYSByYW5nZSBpbiB3aGljaCB3ZSBjYW4gc2VlayBx
dWlja2x5CisgIC8vIChiZWNhdXNlIGl0J3MgY2FjaGVkKS4KKyAgY2xhc3MgU2Vla1JhbmdlIHsK
KyAgcHVibGljOgorICAgIFNlZWtSYW5nZSgpCisgICAgICA6IG1PZmZzZXRTdGFydCgwKSwKKyAg
ICAgICAgbU9mZnNldEVuZCgwKSwKKyAgICAgICAgbVRpbWVTdGFydCgwKSwKKyAgICAgICAgbVRp
bWVFbmQoMCkKKyAgICB7fQorCisgICAgU2Vla1JhbmdlKFBSSW50NjQgYU9mZnNldFN0YXJ0LAor
ICAgICAgICAgICAgICBQUkludDY0IGFPZmZzZXRFbmQsCisgICAgICAgICAgICAgIFBSSW50NjQg
YVRpbWVTdGFydCwKKyAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZUVuZCkKKyAgICAgIDogbU9m
ZnNldFN0YXJ0KGFPZmZzZXRTdGFydCksCisgICAgICAgIG1PZmZzZXRFbmQoYU9mZnNldEVuZCks
CisgICAgICAgIG1UaW1lU3RhcnQoYVRpbWVTdGFydCksCisgICAgICAgIG1UaW1lRW5kKGFUaW1l
RW5kKQorICAgIHt9CisKKyAgICBQUkJvb2wgSXNOdWxsKCkgY29uc3QgeworICAgICAgcmV0dXJu
IG1PZmZzZXRTdGFydCA9PSAwICYmCisgICAgICAgICAgICAgbU9mZnNldEVuZCA9PSAwICYmCisg
ICAgICAgICAgICAgbVRpbWVTdGFydCA9PSAwICYmCisgICAgICAgICAgICAgbVRpbWVFbmQgPT0g
MDsKKyAgICB9CisKKyAgICBQUkludDY0IG1PZmZzZXRTdGFydCwgbU9mZnNldEVuZDsgLy8gaW4g
Ynl0ZXMuCisgICAgUFJJbnQ2NCBtVGltZVN0YXJ0LCBtVGltZUVuZDsgLy8gaW4gbXMuCisgIH07
CisKICAgLy8gU2Vla3MgdG8gYVRhcmdldCBtcyBpbiB0aGUgYnVmZmVyZWQgcmFuZ2UgYVJhbmdl
IHVzaW5nIGJpc2VjdGlvbiBzZWFyY2gsCiAgIC8vIG9yIHRvIHRoZSBrZXlmcmFtZSBwcmlvciB0
byBhVGFyZ2V0IGlmIHdlIGhhdmUgdmlkZW8uIGFTdGFydFRpbWUgbXVzdCBiZQogICAvLyB0aGUg
cHJlc2VudGF0aW9uIHRpbWUgYXQgdGhlIHN0YXJ0IG9mIG1lZGlhLCBhbmQgYUVuZFRpbWUgdGhl
IHRpbWUgYXQKICAgLy8gZW5kIG9mIG1lZGlhLiBhUmFuZ2VzIG11c3QgYmUgdGhlIHRpbWUvYnl0
ZSByYW5nZXMgYnVmZmVyZWQgaW4gdGhlIG1lZGlhCi0gIC8vIGNhY2hlIGFzIHBlciBHZXRCdWZm
ZXJlZEJ5dGVzKCkuCisgIC8vIGNhY2hlIGFzIHBlciBHZXRTZWVrUmFuZ2VzKCkuCiAgIG5zcmVz
dWx0IFNlZWtJbkJ1ZmZlcmVkUmFuZ2UoUFJJbnQ2NCBhVGFyZ2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSSW50NjQgYVN0YXJ0VGltZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkludDY0IGFFbmRUaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG5zVEFycmF5PEJ5dGVSYW5nZT4mIGFSYW5nZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQnl0ZVJhbmdlJiBhUmFuZ2UpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zVEFycmF5PFNlZWtSYW5nZT4mIGFSYW5nZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2Vla1JhbmdlJiBhUmFuZ2UpOwogCiAg
IC8vIFNlZWtzIHRvIGJlZm9yZSBhVGFyZ2V0IG1zIGluIG1lZGlhIHVzaW5nIGJpc2VjdGlvbiBz
ZWFyY2guIElmIHRoZSBtZWRpYQogICAvLyBoYXMgdmlkZW8sIHRoaXMgd2lsbCBzZWVrIHRvIGJl
Zm9yZSB0aGUga2V5ZnJhbWUgcmVxdWlyZWQgdG8gcmVuZGVyIHRoZQogICAvLyBtZWRpYSBhdCBh
VGFyZ2V0LiBXaWxsIHVzZSBhUmFuZ2VzIGluIG9yZGVyIHRvIG5hcnJvdyB0aGUgYmlzZWN0aW9u
CiAgIC8vIHNlYXJjaCBzcGFjZS4gYVN0YXJ0VGltZSBtdXN0IGJlIHRoZSBwcmVzZW50YXRpb24g
dGltZSBhdCB0aGUgc3RhcnQgb2YKICAgLy8gbWVkaWEsIGFuZCBhRW5kVGltZSB0aGUgdGltZSBh
dCBlbmQgb2YgbWVkaWEuIGFSYW5nZXMgbXVzdCBiZSB0aGUgdGltZS9ieXRlCi0gIC8vIHJhbmdl
cyBidWZmZXJlZCBpbiB0aGUgbWVkaWEgY2FjaGUgYXMgcGVyIEdldEJ1ZmZlcmVkQnl0ZXMoKS4K
KyAgLy8gcmFuZ2VzIGJ1ZmZlcmVkIGluIHRoZSBtZWRpYSBjYWNoZSBhcyBwZXIgR2V0U2Vla1Jh
bmdlcygpLgogICBuc3Jlc3VsdCBTZWVrSW5VbmJ1ZmZlcmVkKFBSSW50NjQgYVRhcmdldCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFTdGFydFRpbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhRW5kVGltZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc1RBcnJheTxCeXRlUmFuZ2U+JiBhUmFuZ2VzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc1RBcnJheTxTZWVrUmFuZ2U+JiBhUmFuZ2VzKTsKIAog
ICAvLyBHZXQgdGhlIGVuZCB0aW1lIG9mIGFFbmRPZmZzZXQsIHdpdGhvdXQgcmVhZGluZyBiZWZv
cmUgYVN0YXJ0T2Zmc2V0LgogICAvLyBUaGlzIGlzIHRoZSBwbGF5YmFjayBwb3NpdGlvbiB3ZSdk
IHJlYWNoIGFmdGVyIHBsYXliYWNrIGZpbmlzaGVkIGF0CiAgIC8vIGFFbmRPZmZzZXQuIElmIFBS
Qm9vbCBhQ2FjaGVkRGF0YU9ubHkgaXMgUFJfVFJVRSwgdGhlbiB3ZSdsbCBvbmx5IHJlYWQKICAg
Ly8gZnJvbSBkYXRhIHdoaWNoIGlzIGNhY2hlZCBpbiB0aGUgbWVkaWEgY2FjaGVkLCBvdGhlcndp
c2Ugd2UnbGwgZG8KICAgLy8gcmVndWxhciBibG9ja2luZyByZWFkcyBmcm9tIHRoZSBtZWRpYSBz
dHJlYW0uIElmIFBSQm9vbCBhQ2FjaGVkRGF0YU9ubHkKICAgLy8gaXMgUFJfVFJVRSwgYW5kIGFT
dGF0ZSBpcyBub3QgbU9nZ1N0YXRlLCB0aGlzIGNhbiBzYWZlbHkgYmUgY2FsbGVkIG9uCiAgIC8v
IHRoZSBtYWluIHRocmVhZCwgb3RoZXJ3aXNlIGl0IG11c3QgYmUgY2FsbGVkIG9uIHRoZSBzdGF0
ZSBtYWNoaW5lIHRocmVhZC4KQEAgLTE3NCwyMyArMjA4LDQyIEBAIHByaXZhdGU6CiAKICAgLy8g
UGVyZm9ybXMgYSBzZWVrIGJpc2VjdGlvbiB0byBtb3ZlIHRoZSBtZWRpYSBzdHJlYW0ncyByZWFk
IGN1cnNvciB0byB0aGUKICAgLy8gbGFzdCBvZ2cgcGFnZSBib3VuZGFyeSB3aGljaCBoYXMgZW5k
IHRpbWUgYmVmb3JlIGFUYXJnZXQgbXMgb24gYm90aCB0aGUKICAgLy8gVGhlb3JhIGFuZCBWb3Ji
aXMgYml0c3RyZWFtcy4gTGltaXRzIGl0cyBzZWFyY2ggdG8gZGF0YSBpbnNpZGUgYVJhbmdlOwog
ICAvLyBpLmUuIGl0IHdpbGwgb25seSByZWFkIGluc2lkZSBvZiB0aGUgYVJhbmdlJ3Mgc3RhcnQg
YW5kIGVuZCBvZmZzZXRzLgogICAvLyBhRnV6eiBpcyB0aGUgbnVtYmVyIG9mIG1zIG9mIGxlbmll
bmN5IHdlJ2xsIGFsbG93OyB3ZSdsbCB0ZXJtaW5hdGUgdGhlCiAgIC8vIHNlZWsgd2hlbiB3ZSBs
YW5kIGluIHRoZSByYW5nZSAoYVRpbWUgLSBhRnV6eiwgYVRpbWUpIG1zLgogICBuc3Jlc3VsdCBT
ZWVrQmlzZWN0aW9uKFBSSW50NjQgYVRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBCeXRlUmFuZ2UmIGFSYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
ZWVrUmFuZ2UmIGFSYW5nZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRnV6
eik7CiAKICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzZXJpYWwgbnVtYmVyIGlzIGZvciBhIHN0
cmVhbSB3ZSBlbmNvdW50ZXJlZAogICAvLyB3aGlsZSByZWFkaW5nIG1ldGFkYXRhLiBDYWxsIG9u
IHRoZSBtYWluIHRocmVhZCBvbmx5LgogICBQUkJvb2wgSXNLbm93blN0cmVhbShQUlVpbnQzMiBh
U2VyaWFsKTsKIAorICAvLyBGaWxscyBhUmFuZ2VzIHdpdGggU2Vla1JhbmdlcyBkZW5vdGluZyB0
aGUgc2VjdGlvbnMgb2YgdGhlIG1lZGlhIHdoaWNoCisgIC8vIGhhdmUgYmVlbiBkb3dubG9hZGVk
IGFuZCBhcmUgc3RvcmVkIGluIHRoZSBtZWRpYSBjYWNoZS4gVGhlIHJlYWRlcgorICAvLyBtb25p
dG9yIG11c3QgbXVzdCBiZSBoZWxkIHdpdGggZXhhY3RseSBvbmUgbG9jayBjb3VudC4gVGhlIG5z
TWVkaWFTdHJlYW0KKyAgLy8gbXVzdCBiZSBwaW5uZWQgd2hpbGUgY2FsbGluZyB0aGlzLgorICBu
c3Jlc3VsdCBHZXRTZWVrUmFuZ2VzKG5zVEFycmF5PFNlZWtSYW5nZT4mIGFSYW5nZXMpOworCisg
IC8vIFJldHVybnMgdGhlIHJhbmdlIGluIHdoaWNoIHlvdSBzaG91bGQgcGVyZm9ybSBhIHNlZWsg
YmlzZWN0aW9uIGlmCisgIC8vIHlvdSB3aXNoIHRvIHNlZWsgdG8gYVRhcmdldCBtcywgZ2l2ZW4g
dGhlIGtub3duIChidWZmZXJlZCkgYnl0ZSByYW5nZXMKKyAgLy8gaW4gYVJhbmdlcy4gSWYgYUV4
YWN0IGlzIFBSX1RSVUUsIHdlIG9ubHkgcmV0dXJuIGFuIGV4YWN0IGNvcHkgb2YgYQorICAvLyBy
YW5nZSBpbiB3aGljaCBhVGFyZ2V0IGxpZXMsIG9yIGEgbnVsbCByYW5nZSBpZiBhVGFyZ2V0IGlz
bid0IGNvbnRhaW5lZAorICAvLyBpbiBhbnkgb2YgdGhlIChidWZmZXJlZCkgcmFuZ2VzLiBPdGhl
cndpc2UsIHdoZW4gYUV4YWN0IGlzIFBSX0ZBTFNFLAorICAvLyB3ZSdsbCBjb25zdHJ1Y3QgdGhl
IHNtYWxsZXN0IHBvc3NpYmxlIHJhbmdlIHdlIGNhbiwgYmFzZWQgb24gdGhlIHRpbWVzCisgIC8v
IGFuZCBieXRlIG9mZnNldHMga25vd24gaW4gYVJhbmdlcy4gV2UgY2FuIHRoZW4gdXNlIHRoaXMg
dG8gbWluaW1pemUgb3VyCisgIC8vIGJpc2VjdGlvbidzIHNlYXJjaCBzcGFjZSB3aGVuIHRoZSB0
YXJnZXQgaXNuJ3QgaW4gYSBrbm93biBidWZmZXJlZCByYW5nZS4KKyAgU2Vla1JhbmdlIFNlbGVj
dFNlZWtSYW5nZShjb25zdCBuc1RBcnJheTxTZWVrUmFuZ2U+JiBhUmFuZ2VzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkludDY0IGFTdGFydFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJJbnQ2NCBhRW5kVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUV4
YWN0KTsKIHByaXZhdGU6CiAgIC8vIE1hcHMgT2dnIHNlcmlhbG5vcyB0byBuc09nZ1N0cmVhbXMu
CiAgIG5zQ2xhc3NIYXNodGFibGU8bnNVaW50MzJIYXNoS2V5LCBuc09nZ0NvZGVjU3RhdGU+IG1D
b2RlY1N0YXRlczsKIAogICAvLyBBcnJheSBvZiBzZXJpYWwgbnVtYmVycyBvZiBzdHJlYW1zIHRo
YXQgd2VyZSBlbmNvdW50ZXJlZCBkdXJpbmcKICAgLy8gaW5pdGlhbCBtZXRhZGF0YSBsb2FkLiBX
cml0dGVuIG9uIHN0YXRlIG1hY2hpbmUgdGhyZWFkIGR1cmluZwogICAvLyBtZXRhZGF0YSBsb2Fk
aW5nIGFuZCByZWFkIG9uIHRoZSBtYWluIHRocmVhZCBvbmx5IGFmdGVyIG1ldGFkYXRhCiAgIC8v
IGlzIGxvYWRlZC4K
</data>
<flag name="review"
          id="435015"
          type_id="937"
          status="+"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>520040</attachid>
            <date>2011-03-17 15:24:09 -0700</date>
            <delta_ts>2011-03-17 20:01:45 -0700</delta_ts>
            <desc>Patch 2: Make nsMediaStream responsible for determining cached media data in a threadsafe manner</desc>
            <filename>639391-2-nsMediaStream-cached-ranges.patch</filename>
            <type>text/plain</type>
            <size>8440</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgMjFiNTZkYmQzYmU4NjdhYWVkYWYxNTlmOTQ3YThhNGMyYWRhY2E2NApC
dWcgNjM5MzkxIC0gTWFrZSBuc01lZGlhU3RyZWFtIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmlu
ZyBjYWNoZWQgbWVkaWEgZGF0YSBpbiBhIHRocmVhZHNhZmUgbWFubmVyLiByPT8KCmRpZmYgLS1n
aXQgYS9jb250ZW50L21lZGlhL25zTWVkaWFDYWNoZS5jcHAgYi9jb250ZW50L21lZGlhL25zTWVk
aWFDYWNoZS5jcHAKLS0tIGEvY29udGVudC9tZWRpYS9uc01lZGlhQ2FjaGUuY3BwCisrKyBiL2Nv
bnRlbnQvbWVkaWEvbnNNZWRpYUNhY2hlLmNwcApAQCAtMjI4OCw4ICsyMjg4LDMxIEBAIG5zTWVk
aWFDYWNoZVN0cmVhbTo6SW5pdEFzQ2xvbmUobnNNZWRpYUMKICAgICB9CiAgICAgLy8gRXZlcnkg
YmxvY2sgaXMgYSByZWFkYWhlYWQgYmxvY2sgZm9yIHRoZSBjbG9uZSBiZWNhdXNlIHRoZSBjbG9u
ZSdzIGluaXRpYWwKICAgICAvLyBzdHJlYW0gb2Zmc2V0IGlzIHplcm8KICAgICBnTWVkaWFDYWNo
ZS0+QWRkQmxvY2tPd25lckFzUmVhZGFoZWFkKGNhY2hlQmxvY2tJbmRleCwgdGhpcywgaSk7CiAg
IH0KIAogICByZXR1cm4gTlNfT0s7CiB9CisKK25zcmVzdWx0IG5zTWVkaWFDYWNoZVN0cmVhbTo6
R2V0Q2FjaGVkUmFuZ2VzKG5zVEFycmF5PG5zQnl0ZVJhbmdlPiYgYVJhbmdlcykKK3sKKyAgLy8g
VGFrZSB0aGUgbW9uaXRvciwgc28gdGhhdCB0aGUgY2FjaGVkIGRhdGEgcmFuZ2VzIGNhbid0IGdy
b3cgd2hpbGUgd2UncmUKKyAgLy8gdHJ5aW5nIHRvIGxvb3Agb3ZlciB0aGVtLgorICBuc0F1dG9N
b25pdG9yIG1vbihnTWVkaWFDYWNoZS0+TW9uaXRvcigpKTsKKworICAvLyBXZSBtdXN0IGJlIHBp
bm5lZCB3aGlsZSBydW5uaW5nIHRoaXMsIG90aGVyd2lzZSB0aGUgY2FjaGVkIGRhdGEgcmFuZ2Vz
IG1heQorICAvLyBzaHJpbmsgd2hpbGUgd2UncmUgdHJ5aW5nIHRvIGxvb3Agb3ZlciB0aGVtLgor
ICBOU19BU1NFUlRJT04obVBpbkNvdW50ID4gMCwgIk11c3QgYmUgcGlubmVkIik7CisKKyAgUFJJ
bnQ2NCBzdGFydE9mZnNldCA9IEdldE5leHRDYWNoZWREYXRhKDApOworICB3aGlsZSAoc3RhcnRP
ZmZzZXQgPj0gMCkgeworICAgIFBSSW50NjQgZW5kT2Zmc2V0ID0gR2V0Q2FjaGVkRGF0YUVuZChz
dGFydE9mZnNldCk7CisgICAgTlNfQVNTRVJUSU9OKHN0YXJ0T2Zmc2V0IDwgZW5kT2Zmc2V0LCAi
QnVmZmVyZWQgcmFuZ2UgbXVzdCBlbmQgYWZ0ZXIgaXRzIHN0YXJ0Iik7CisgICAgLy8gQnl0ZXMg
W3N0YXJ0T2Zmc2V0Li5lbmRPZmZzZXRdIGFyZSBjYWNoZWQuCisgICAgYVJhbmdlcy5BcHBlbmRF
bGVtZW50KG5zQnl0ZVJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTsKKyAgICBzdGFydE9m
ZnNldCA9IEdldE5leHRDYWNoZWREYXRhKGVuZE9mZnNldCk7CisgICAgTlNfQVNTRVJUSU9OKHN0
YXJ0T2Zmc2V0ID09IC0xIHx8IHN0YXJ0T2Zmc2V0ID4gZW5kT2Zmc2V0LAorICAgICAgIk11c3Qg
aGF2ZSBhZHZhbmNlZCB0byBzdGFydCBvZiBuZXh0IHJhbmdlLCBvciBoaXQgZW5kIG9mIHN0cmVh
bSIpOworICB9CisgIHJldHVybiBOU19PSzsKK30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEv
bnNNZWRpYUNhY2hlLmggYi9jb250ZW50L21lZGlhL25zTWVkaWFDYWNoZS5oCi0tLSBhL2NvbnRl
bnQvbWVkaWEvbnNNZWRpYUNhY2hlLmgKKysrIGIvY29udGVudC9tZWRpYS9uc01lZGlhQ2FjaGUu
aApAQCAtMzksMTYgKzM5LDE4IEBACiAjaWZuZGVmIG5zTWVkaWFDYWNoZV9oXwogI2RlZmluZSBu
c01lZGlhQ2FjaGVfaF8KIAogI2luY2x1ZGUgIm5zVEFycmF5LmgiCiAjaW5jbHVkZSAibnNBdXRv
TG9jay5oIgogI2luY2x1ZGUgIm5zSVByaW5jaXBhbC5oIgogI2luY2x1ZGUgIm5zQ09NUHRyLmgi
CiAKK2NsYXNzIG5zQnl0ZVJhbmdlOworCiAvKioKICAqIE1lZGlhIGFwcGxpY2F0aW9ucyB3YW50
IGZhc3QsICJvbiBkZW1hbmQiIHJhbmRvbSBhY2Nlc3MgdG8gbWVkaWEgZGF0YSwKICAqIGZvciBw
YXVzaW5nLCBzZWVraW5nLCBldGMuIEJ1dCB3ZSBhcmUgcHJpbWFyaWx5IGludGVyZXN0ZWQKICAq
IGluIHRyYW5zcG9ydGluZyBtZWRpYSBkYXRhIHVzaW5nIEhUVFAgb3ZlciB0aGUgSW50ZXJuZXQs
IHdoaWNoIGhhcwogICogaGlnaCBsYXRlbmN5IHRvIG9wZW4gYSBjb25uZWN0aW9uLCByZXF1aXJl
cyBhIG5ldyBjb25uZWN0aW9uIGZvciBldmVyeQogICogc2VlaywgbWF5IG5vdCBldmVuIHN1cHBv
cnQgc2Vla2luZyBvbiBzb21lIGNvbm5lY3Rpb25zIChlc3BlY2lhbGx5CiAgKiBsaXZlIHN0cmVh
bXMpLCBhbmQgdXNlcyBhIHB1c2ggbW9kZWwgLS0tIGRhdGEgY29tZXMgZnJvbSB0aGUgc2VydmVy
CiAgKiBhbmQgeW91IGRvbid0IGhhdmUgbXVjaCBjb250cm9sIG92ZXIgdGhlIHJhdGUuIEFsc28s
IHRyYW5zZmVycmluZyBkYXRhCkBAIC0zMDUsMTYgKzMwNywyMSBAQCBwdWJsaWM6CiAgIC8vIFJl
dHVybnMgdGhlIHVuaXF1ZSByZXNvdXJjZSBJRAogICBQUkludDY0IEdldFJlc291cmNlSUQoKSB7
IHJldHVybiBtUmVzb3VyY2VJRDsgfQogICAvLyBSZXR1cm5zIHRoZSBlbmQgb2YgdGhlIGJ5dGVz
IHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBvZmZzZXQKICAgLy8gd2hpY2ggYXJlIGluIGNhY2hlLgog
ICBQUkludDY0IEdldENhY2hlZERhdGFFbmQoUFJJbnQ2NCBhT2Zmc2V0KTsKICAgLy8gUmV0dXJu
cyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBieXRlIG9mIGNhY2hlZCBkYXRhIGF0IG9yIGFmdGVy
IGFPZmZzZXQsCiAgIC8vIG9yIC0xIGlmIHRoZXJlIGlzIG5vIHN1Y2ggY2FjaGVkIGRhdGEuCiAg
IFBSSW50NjQgR2V0TmV4dENhY2hlZERhdGEoUFJJbnQ2NCBhT2Zmc2V0KTsKKyAgLy8gRmlsbHMg
YVJhbmdlcyB3aXRoIHRoZSBCeXRlUmFuZ2VzIHJlcHJlc2VudGluZyB0aGUgZGF0YSB3aGljaCBp
cyBjdXJyZW50bHkKKyAgLy8gY2FjaGVkLiBMb2NrcyB0aGUgbWVkaWEgY2FjaGUgd2hpbGUgcnVu
bmluZywgdG8gcHJldmVudCBhbnkgcmFuZ2VzCisgIC8vIGdyb3dpbmcuIFRoZSBzdHJlYW0gc2hv
dWxkIGJlIHBpbm5lZCB3aGlsZSB0aGlzIHJ1bnMgYW5kIHdoaWxlIGl0cyByZXN1bHRzCisgIC8v
IGFyZSB1c2VkLCB0byBlbnN1cmUgbm8gZGF0YSBpcyBldmljdGVkLgorICBuc3Jlc3VsdCBHZXRD
YWNoZWRSYW5nZXMobnNUQXJyYXk8bnNCeXRlUmFuZ2U+JiBhUmFuZ2VzKTsKIAogICAvLyBSZWFk
cyBmcm9tIGJ1ZmZlcmVkIGRhdGEgb25seS4gV2lsbCBmYWlsIGlmIG5vdCBhbGwgZGF0YSB0byBi
ZSByZWFkIGlzCiAgIC8vIGluIHRoZSBjYWNoZS4gV2lsbCBub3QgbWFyayBibG9ja3MgYXMgcmVh
ZC4gQ2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluCiAgIC8vIHRocmVhZC4gSXQncyB0aGUgY2Fs
bGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gd3JhcCB0aGUgY2FsbCBpbiBhIHBpbi91bnBpbiwKICAg
Ly8gYW5kIGFsc28gdG8gY2hlY2sgdGhhdCB0aGUgcmFuZ2UgdGhleSB3YW50IGlzIGNhY2hlZCBi
ZWZvcmUgY2FsbGluZyB0aGlzLgogICBuc3Jlc3VsdCBSZWFkRnJvbUNhY2hlKGNoYXIqIGFCdWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhT2Zmc2V0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSSW50NjQgYUNvdW50KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVk
aWEvbnNNZWRpYVN0cmVhbS5jcHAgYi9jb250ZW50L21lZGlhL25zTWVkaWFTdHJlYW0uY3BwCi0t
LSBhL2NvbnRlbnQvbWVkaWEvbnNNZWRpYVN0cmVhbS5jcHAKKysrIGIvY29udGVudC9tZWRpYS9u
c01lZGlhU3RyZWFtLmNwcApAQCAtNjAwLDE2ICs2MDAsMjEgQEAgbnNyZXN1bHQgbnNNZWRpYUNo
YW5uZWxTdHJlYW06OlNlZWsoUFJJbgogCiBQUkludDY0IG5zTWVkaWFDaGFubmVsU3RyZWFtOjpU
ZWxsKCkKIHsKICAgTlNfQVNTRVJUSU9OKCFOU19Jc01haW5UaHJlYWQoKSwgIkRvbid0IGNhbGwg
b24gbWFpbiB0aHJlYWQiKTsKIAogICByZXR1cm4gbUNhY2hlU3RyZWFtLlRlbGwoKTsKIH0KIAor
bnNyZXN1bHQgbnNNZWRpYUNoYW5uZWxTdHJlYW06OkdldENhY2hlZFJhbmdlcyhuc1RBcnJheTxu
c0J5dGVSYW5nZT4mIGFSYW5nZXMpCit7CisgIHJldHVybiBtQ2FjaGVTdHJlYW0uR2V0Q2FjaGVk
UmFuZ2VzKGFSYW5nZXMpOworfQorCiB2b2lkIG5zTWVkaWFDaGFubmVsU3RyZWFtOjpTdXNwZW5k
KFBSQm9vbCBhQ2xvc2VJbW1lZGlhdGVseSkKIHsKICAgTlNfQVNTRVJUSU9OKE5TX0lzTWFpblRo
cmVhZCgpLCAiRG9uJ3QgY2FsbCBvbiBub24tbWFpbiB0aHJlYWQiKTsKIAogICBuc0hUTUxNZWRp
YUVsZW1lbnQqIGVsZW1lbnQgPSBtRGVjb2Rlci0+R2V0TWVkaWFFbGVtZW50KCk7CiAgIGlmICgh
ZWxlbWVudCkgewogICAgIC8vIFNodXR0aW5nIGRvd247IGRvIG5vdGhpbmcuCiAgICAgcmV0dXJu
OwpAQCAtOTE0LDE2ICs5MTksMTggQEAgcHVibGljOgogICB7CiAgICAgcmV0dXJuIChhT2Zmc2V0
IDwgbVNpemUpID8gYU9mZnNldCA6IC0xOwogICB9CiAgIHZpcnR1YWwgUFJJbnQ2NCBHZXRDYWNo
ZWREYXRhRW5kKFBSSW50NjQgYU9mZnNldCkgeyByZXR1cm4gUFJfTUFYKGFPZmZzZXQsIG1TaXpl
KTsgfQogICB2aXJ0dWFsIFBSQm9vbCAgSXNEYXRhQ2FjaGVkVG9FbmRPZlN0cmVhbShQUkludDY0
IGFPZmZzZXQpIHsgcmV0dXJuIFBSX1RSVUU7IH0KICAgdmlydHVhbCBQUkJvb2wgIElzU3VzcGVu
ZGVkQnlDYWNoZSgpIHsgcmV0dXJuIFBSX0ZBTFNFOyB9CiAgIHZpcnR1YWwgUFJCb29sICBJc1N1
c3BlbmRlZCgpIHsgcmV0dXJuIFBSX0ZBTFNFOyB9CiAKKyAgbnNyZXN1bHQgR2V0Q2FjaGVkUmFu
Z2VzKG5zVEFycmF5PG5zQnl0ZVJhbmdlPiYgYVJhbmdlcyk7CisKIHByaXZhdGU6CiAgIC8vIFRo
ZSBmaWxlIHNpemUsIG9yIC0xIGlmIG5vdCBrbm93bi4gSW1tdXRhYmxlIGFmdGVyIE9wZW4oKS4K
ICAgUFJJbnQ2NCBtU2l6ZTsKIAogICAvLyBUaGlzIGxvY2sgaGFuZGxlcyBzeW5jaHJvbmlzYXRp
b24gYmV0d2VlbiBjYWxscyB0byBDbG9zZSgpIGFuZAogICAvLyB0aGUgUmVhZCwgU2VlaywgZXRj
IGNhbGxzLiBDbG9zZSBtdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgYQogICAvLyBSZWFkIG9yIFNl
ZWsgaXMgaW4gcHJvZ3Jlc3Mgc2luY2UgaXQgcmVzZXRzIHZhcmlvdXMgaW50ZXJuYWwKICAgLy8g
dmFsdWVzIHRvIG51bGwuCkBAIC05NTYsMTYgKzk2MywyNSBAQCBwdWJsaWM6CiAgICAgbURlY29k
ZXItPk5vdGlmeURvd25sb2FkRW5kZWQoTlNfT0spOwogICAgIHJldHVybiBOU19PSzsKICAgfQog
CiBwcml2YXRlOgogICBuc1JlZlB0cjxuc01lZGlhRGVjb2Rlcj4gbURlY29kZXI7CiB9OwogCitu
c3Jlc3VsdCBuc01lZGlhRmlsZVN0cmVhbTo6R2V0Q2FjaGVkUmFuZ2VzKG5zVEFycmF5PG5zQnl0
ZVJhbmdlPiYgYVJhbmdlcykKK3sKKyAgaWYgKG1TaXplID09IC0xKSB7CisgICAgcmV0dXJuIE5T
X0VSUk9SX0ZBSUxVUkU7CisgIH0KKyAgYVJhbmdlcy5BcHBlbmRFbGVtZW50KG5zQnl0ZVJhbmdl
KDAsIG1TaXplKSk7CisgIHJldHVybiBOU19PSzsKK30KKwogbnNyZXN1bHQgbnNNZWRpYUZpbGVT
dHJlYW06Ok9wZW4obnNJU3RyZWFtTGlzdGVuZXIqKiBhU3RyZWFtTGlzdGVuZXIpCiB7CiAgIE5T
X0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQoKSwgIk9ubHkgY2FsbCBvbiBtYWluIHRocmVhZCIp
OwogCiAgIGlmIChhU3RyZWFtTGlzdGVuZXIpIHsKICAgICAqYVN0cmVhbUxpc3RlbmVyID0gbnNu
dWxsOwogICB9CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNNZWRpYVN0cmVhbS5oIGIv
Y29udGVudC9tZWRpYS9uc01lZGlhU3RyZWFtLmgKLS0tIGEvY29udGVudC9tZWRpYS9uc01lZGlh
U3RyZWFtLmgKKysrIGIvY29udGVudC9tZWRpYS9uc01lZGlhU3RyZWFtLmgKQEAgLTEyMiwxNiAr
MTIyLDM1IEBAIHB1YmxpYzoKICAgfQogcHJpdmF0ZToKICAgUFJJbnQ2NCAgICAgIG1BY2N1bXVs
YXRlZEJ5dGVzOwogICBUaW1lRHVyYXRpb24gbUFjY3VtdWxhdGVkVGltZTsKICAgVGltZVN0YW1w
ICAgIG1MYXN0U3RhcnRUaW1lOwogICBQUlBhY2tlZEJvb2wgbUlzU3RhcnRlZDsKIH07CiAKKy8v
IFJlcHJlc2VudHMgYSBzZWN0aW9uIG9mIGNvbnRpZ3VvdXMgbWVkaWEsIHdpdGggYSBzdGFydCBh
bmQgZW5kIG9mZnNldC4KKy8vIFVzZWQgdG8gZGVub3RlIHJhbmdlcyBvZiBkYXRhIHdoaWNoIGFy
ZSBjYWNoZWQuCitjbGFzcyBuc0J5dGVSYW5nZSB7CitwdWJsaWM6CisgIG5zQnl0ZVJhbmdlKCkg
OiBtU3RhcnQoMCksIG1FbmQoMCkge30KKworICBuc0J5dGVSYW5nZShQUkludDY0IGFTdGFydCwg
UFJJbnQ2NCBhRW5kKQorICAgIDogbVN0YXJ0KGFTdGFydCksIG1FbmQoYUVuZCkKKyAgeworICAg
IE5TX0FTU0VSVElPTihtU3RhcnQgPCBtRW5kLCAiUmFuZ2Ugc2hvdWxkIGVuZCBhZnRlciBzdGFy
dCEiKTsKKyAgfQorCisgIFBSQm9vbCBJc051bGwoKSBjb25zdCB7CisgICAgcmV0dXJuIG1TdGFy
dCA9PSAwICYmIG1FbmQgPT0gMDsKKyAgfQorCisgIFBSSW50NjQgbVN0YXJ0LCBtRW5kOworfTsK
KwogLyoKICAgIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIG9wZW4sIHJlYWQgYW5kIHNlZWsgaW50
byBhIG1lZGlhIHN0cmVhbQogICAgKGF1ZGlvLCB2aWRlbykuIEhhbmRsZXMgdGhlIHVuZGVybHlp
bmcgbWFjaGluZXJ5IHRvIGRvIHJhbmdlCiAgICByZXF1ZXN0cywgZXRjIGFzIG5lZWRlZCBieSB0
aGUgYWN0dWFsIHN0cmVhbSB0eXBlLiBJbnN0YW5jZXMgb2YKICAgIHRoaXMgY2xhc3MgbXVzdCBi
ZSBjcmVhdGVkIG9uIHRoZSBtYWluIHRocmVhZC4gCiAKICAgIE1vc3QgbWV0aG9kcyBtdXN0IGJl
IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgb25seS4gUmVhZCwgU2VlayBhbmQKICAgIFRlbGwg
bXVzdCBvbmx5IGJlIGNhbGxlZCBvbiBub24tbWFpbiB0aHJlYWRzLiBJbiB0aGUgY2FzZSBvZiB0
aGUgT2dnCkBAIC0yNzAsMTYgKzI4OSwyMyBAQCBwdWJsaWM6CiAgIHN0YXRpYyBuc01lZGlhU3Ry
ZWFtKiBDcmVhdGUobnNNZWRpYURlY29kZXIqIGFEZWNvZGVyLCBuc0lDaGFubmVsKiBhQ2hhbm5l
bCk7CiAKICAgLyoqCiAgICAqIE9wZW4gdGhlIHN0cmVhbS4gVGhpcyBjcmVhdGVzIGEgc3RyZWFt
IGxpc3RlbmVyIGFuZCByZXR1cm5zIGl0IGluCiAgICAqIGFTdHJlYW1MaXN0ZW5lcjsgdGhpcyBs
aXN0ZW5lciBuZWVkcyB0byBiZSBub3RpZmllZCBvZiBpbmNvbWluZyBkYXRhLgogICAgKi8KICAg
dmlydHVhbCBuc3Jlc3VsdCBPcGVuKG5zSVN0cmVhbUxpc3RlbmVyKiogYVN0cmVhbUxpc3RlbmVy
KSA9IDA7CiAKKyAgLyoqCisgICAqIEZpbGxzIGFSYW5nZXMgd2l0aCBCeXRlUmFuZ2VzIHJlcHJl
c2VudGluZyB0aGUgZGF0YSB3aGljaCBpcyBjYWNoZWQKKyAgICogaW4gdGhlIG1lZGlhIGNhY2hl
LiBTdHJlYW0gc2hvdWxkIGJlIHBpbm5lZCBkdXJpbmcgY2FsbCBhbmQgd2hpbGUKKyAgICogYVJh
bmdlcyBpcyBiZWluZyB1c2VkLgorICAgKi8KKyAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYWNoZWRS
YW5nZXMobnNUQXJyYXk8bnNCeXRlUmFuZ2U+JiBhUmFuZ2VzKSA9IDA7CisKIHByb3RlY3RlZDoK
ICAgbnNNZWRpYVN0cmVhbShuc01lZGlhRGVjb2RlciogYURlY29kZXIsIG5zSUNoYW5uZWwqIGFD
aGFubmVsLCBuc0lVUkkqIGFVUkkpIDoKICAgICBtRGVjb2RlcihhRGVjb2RlciksCiAgICAgbUNo
YW5uZWwoYUNoYW5uZWwpLAogICAgIG1VUkkoYVVSSSksCiAgICAgbUxvYWRJbkJhY2tncm91bmQo
UFJfRkFMU0UpCiAgIHsKICAgICBNT1pfQ09VTlRfQ1RPUihuc01lZGlhU3RyZWFtKTsKQEAgLTM5
MCwxNiArNDE2LDE4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgUmV2b2tlKCkgeyBtU3RyZWFtID0g
bnNudWxsOyB9CiAKICAgcHJpdmF0ZToKICAgICBuc01lZGlhQ2hhbm5lbFN0cmVhbSogbVN0cmVh
bTsKICAgfTsKICAgZnJpZW5kIGNsYXNzIExpc3RlbmVyOwogCisgIG5zcmVzdWx0IEdldENhY2hl
ZFJhbmdlcyhuc1RBcnJheTxuc0J5dGVSYW5nZT4mIGFSYW5nZXMpOworCiBwcm90ZWN0ZWQ6CiAg
IC8vIFRoZXNlIGFyZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGJ5IExpc3RlbmVyLgogICBu
c3Jlc3VsdCBPblN0YXJ0UmVxdWVzdChuc0lSZXF1ZXN0KiBhUmVxdWVzdCk7CiAgIG5zcmVzdWx0
IE9uU3RvcFJlcXVlc3QobnNJUmVxdWVzdCogYVJlcXVlc3QsIG5zcmVzdWx0IGFTdGF0dXMpOwog
ICBuc3Jlc3VsdCBPbkRhdGFBdmFpbGFibGUobnNJUmVxdWVzdCogYVJlcXVlc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lJbnB1dFN0cmVhbSogYVN0cmVhbSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSVWludDMyIGFDb3VudCk7CiAgIG5zcmVzdWx0IE9uQ2hhbm5lbFJl
ZGlyZWN0KG5zSUNoYW5uZWwqIGFPbGQsIG5zSUNoYW5uZWwqIGFOZXcsIFBSVWludDMyIGFGbGFn
cyk7Cg==
</data>
<flag name="review"
          id="435016"
          type_id="937"
          status="+"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>520041</attachid>
            <date>2011-03-17 15:25:08 -0700</date>
            <delta_ts>2011-03-17 20:03:12 -0700</delta_ts>
            <desc>Patch 3: Pin nsMediaStream while determining buffered ranges</desc>
            <filename>639391-3-buffered-pin.patch</filename>
            <type>text/plain</type>
            <size>2283</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgM2RjYzdjOTkxNmY1ZDA3NjAzNmY2NDIyY2Y1NjlkMGIzNTU1YzYwOQpC
dWcgNjkzMzkxIC0gUGluIG5zTWVkaWFTdHJlYW0gd2hpbGUgZGV0ZXJtaW5pbmcgYnVmZmVyZWQg
cmFuZ2VzLiByPT8KCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJT
dGF0ZU1hY2hpbmUuY3BwIGIvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNo
aW5lLmNwcAotLS0gYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUu
Y3BwCisrKyBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5jcHAK
QEAgLTE2NjMsOCArMTY2MywxNyBAQCB2b2lkIG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmU6
OlN0YXJ0CiAgIG1TdGF0ZSA9IERFQ09ERVJfU1RBVEVfQlVGRkVSSU5HOwogICBMT0coUFJfTE9H
X0RFQlVHLCAoIkNoYW5nZWQgc3RhdGUgZnJvbSBERUNPRElORyB0byBCVUZGRVJJTkcsIGRlY29k
ZWQgZm9yICUuM2xmcyIsCiAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVEdXJhdGlvbi5Ub1Nl
Y29uZHMoKSkpOwogICBuc01lZGlhRGVjb2Rlcjo6U3RhdGlzdGljcyBzdGF0cyA9IG1EZWNvZGVy
LT5HZXRTdGF0aXN0aWNzKCk7CiAgIExPRyhQUl9MT0dfREVCVUcsICgiUGxheWJhY2sgcmF0ZTog
JS4xbGZLQi9zJXMgZG93bmxvYWQgcmF0ZTogJS4xbGZLQi9zJXMiLAogICAgIHN0YXRzLm1QbGF5
YmFja1JhdGUvMTAyNCwgc3RhdHMubVBsYXliYWNrUmF0ZVJlbGlhYmxlID8gIiIgOiAiICh1bnJl
bGlhYmxlKSIsCiAgICAgc3RhdHMubURvd25sb2FkUmF0ZS8xMDI0LCBzdGF0cy5tRG93bmxvYWRS
YXRlUmVsaWFibGUgPyAiIiA6ICIgKHVucmVsaWFibGUpIikpOwogfQorCituc3Jlc3VsdCBuc0J1
aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpHZXRCdWZmZXJlZChuc1RpbWVSYW5nZXMqIGFCdWZm
ZXJlZCkgeworICBuc01lZGlhU3RyZWFtKiBzdHJlYW0gPSBtRGVjb2Rlci0+R2V0Q3VycmVudFN0
cmVhbSgpOworICBOU19FTlNVUkVfVFJVRShzdHJlYW0sIE5TX0VSUk9SX0ZBSUxVUkUpOworICBz
dHJlYW0tPlBpbigpOworICBuc3Jlc3VsdCByZXMgPSBtUmVhZGVyLT5HZXRCdWZmZXJlZChhQnVm
ZmVyZWQsIG1TdGFydFRpbWUpOworICBzdHJlYW0tPlVucGluKCk7CisgIHJldHVybiByZXM7Cit9
CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUu
aCBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5oCi0tLSBhL2Nv
bnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5oCisrKyBiL2NvbnRlbnQv
bWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5oCkBAIC0yMzAsMTkgKzIzMCwxNyBA
QCBwdWJsaWM6CiAgIG5zQnVpbHRpbkRlY29kZXIqIG1EZWNvZGVyOwogCiAgIC8vIFRoZSBkZWNv
ZGVyIG1vbml0b3IgbXVzdCBiZSBvYnRhaW5lZCBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgc3RhdGUu
CiAgIC8vIE5vdGlmeUFsbCBvbiB0aGUgbW9uaXRvciBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBz
dGF0ZSBpcyBjaGFuZ2VkIGJ5CiAgIC8vIHRoZSBtYWluIHRocmVhZCBzbyB0aGUgZGVjb2RlciB0
aHJlYWQgY2FuIHdha2UgdXAuCiAgIC8vIEFjY2Vzc2VkIG9uIHN0YXRlIG1hY2hpbmUsIGF1ZGlv
LCBtYWluLCBhbmQgQVYgdGhyZWFkLiAKICAgU3RhdGUgbVN0YXRlOwogCi0gIG5zcmVzdWx0IEdl
dEJ1ZmZlcmVkKG5zVGltZVJhbmdlcyogYUJ1ZmZlcmVkKSB7Ci0gICAgcmV0dXJuIG1SZWFkZXIt
PkdldEJ1ZmZlcmVkKGFCdWZmZXJlZCwgbVN0YXJ0VGltZSk7Ci0gIH0KKyAgbnNyZXN1bHQgR2V0
QnVmZmVyZWQobnNUaW1lUmFuZ2VzKiBhQnVmZmVyZWQpOwogCiAgIHZvaWQgTm90aWZ5RGF0YUFy
cml2ZWQoY29uc3QgY2hhciogYUJ1ZmZlciwgUFJVaW50MzIgYUxlbmd0aCwgUFJVaW50MzIgYU9m
ZnNldCkgewogICAgIE5TX0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQoKSwgIk9ubHkgY2FsbCBv
biBtYWluIHRocmVhZCIpOwogICAgIG1SZWFkZXItPk5vdGlmeURhdGFBcnJpdmVkKGFCdWZmZXIs
IGFMZW5ndGgsIGFPZmZzZXQpOwogICB9CiAKICAgUFJJbnQ2NCBHZXRFbmRNZWRpYVRpbWUoKSBj
b25zdCB7CiAgICAgbURlY29kZXItPkdldE1vbml0b3IoKS5Bc3NlcnRDdXJyZW50VGhyZWFkSW4o
KTsK
</data>
<flag name="review"
          id="435017"
          type_id="937"
          status="+"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>520042</attachid>
            <date>2011-03-17 15:26:04 -0700</date>
            <delta_ts>2011-03-17 20:19:52 -0700</delta_ts>
            <desc>Patch 4: Ensure Ogg GetBuffered() is threadsafe</desc>
            <filename>639391-4-ogg-buffered-threadsafe.patch</filename>
            <type>text/plain</type>
            <size>7108</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgM2QwYzY4MjllZThkMjQ1MDZkODYxZmMxMjE5
MTc4NGEwYmQ3ODY4YwpCdWcgNjM5MzkxIC0gRW5zdXJlIE9nZyBHZXRCdWZmZXJlZCgpIGlzIHRo
cmVhZHNhZmUuIHI9PwoKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVy
LmNwcCBiL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmNwcAotLS0gYS9jb250ZW50L21l
ZGlhL29nZy9uc09nZ1JlYWRlci5jcHAKKysrIGIvY29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFk
ZXIuY3BwCkBAIC0xMDIzLDUwICsxMDIzLDQyIEBAIFBSSW50NjQgbnNPZ2dSZWFkZXI6OkZpbmRF
bmRUaW1lKFBSSW50NjQKICAgcmV0dXJuIGVuZFRpbWU7CiB9CiAKIG5zcmVzdWx0IG5zT2dnUmVh
ZGVyOjpHZXRTZWVrUmFuZ2VzKG5zVEFycmF5PFNlZWtSYW5nZT4mIGFSYW5nZXMpCiB7CiAgIE5T
X0FTU0VSVElPTihtRGVjb2Rlci0+T25TdGF0ZU1hY2hpbmVUaHJlYWQoKSwKICAgICAgICAgICAg
ICAgICJTaG91bGQgYmUgb24gc3RhdGUgbWFjaGluZSB0aHJlYWQuIik7CiAgIG1Nb25pdG9yLkFz
c2VydEN1cnJlbnRUaHJlYWRJbigpOwotICBQUkludDY0IHN0YXJ0T2Zmc2V0ID0gbURhdGFPZmZz
ZXQ7Ci0gIG5zTWVkaWFTdHJlYW0qIHN0cmVhbSA9IG1EZWNvZGVyLT5HZXRDdXJyZW50U3RyZWFt
KCk7Ci0gIHdoaWxlIChQUl9UUlVFKSB7Ci0gICAgUFJJbnQ2NCBlbmRPZmZzZXQgPSBzdHJlYW0t
PkdldENhY2hlZERhdGFFbmQoc3RhcnRPZmZzZXQpOwotICAgIGlmIChlbmRPZmZzZXQgPT0gc3Rh
cnRPZmZzZXQpIHsKLSAgICAgIC8vIFVuY2FjaGVkIGF0IHN0YXJ0T2Zmc2V0LgotICAgICAgZW5k
T2Zmc2V0ID0gc3RyZWFtLT5HZXROZXh0Q2FjaGVkRGF0YShzdGFydE9mZnNldCk7Ci0gICAgICBp
ZiAoZW5kT2Zmc2V0ID09IC0xKSB7Ci0gICAgICAgIC8vIFVuY2FjaGVkIGF0IHN0YXJ0T2Zmc2V0
IHVudGlsIGVuZE9mZnNldCBvZiBzdHJlYW0sIG9yIHdlJ3JlIGF0Ci0gICAgICAgIC8vIHRoZSBl
bmQgb2Ygc3RyZWFtLgotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgLy8gQnl0ZXMgW3N0YXJ0T2Zmc2V0Li5lbmRPZmZzZXRdIGFyZSBjYWNoZWQuCi0gICAgICBQ
UkludDY0IHN0YXJ0VGltZSA9IC0xOwotICAgICAgUFJJbnQ2NCBlbmRUaW1lID0gLTE7Ci0gICAg
ICBpZiAoTlNfRkFJTEVEKFJlc2V0RGVjb2RlKCkpKSB7Ci0gICAgICAgIHJldHVybiBOU19FUlJP
Ul9GQUlMVVJFOwotICAgICAgfQotICAgICAgRmluZFN0YXJ0VGltZShzdGFydE9mZnNldCwgc3Rh
cnRUaW1lKTsKLSAgICAgIGlmIChzdGFydFRpbWUgIT0gLTEgJiYKLSAgICAgICAgICAoKGVuZFRp
bWUgPSBGaW5kRW5kVGltZShlbmRPZmZzZXQpKSAhPSAtMSkpCi0gICAgICB7Ci0gICAgICAgIE5T
X0FTU0VSVElPTihzdGFydE9mZnNldCA8IGVuZE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICJTdGFydCBvZmZzZXQgbXVzdCBiZSBiZWZvcmUgZW5kIG9mZnNldCIpOwotICAgICAgICBOU19B
U1NFUlRJT04oc3RhcnRUaW1lIDwgZW5kVGltZSwKLSAgICAgICAgICAgICAgICAgICAgICJTdGFy
dCB0aW1lIG11c3QgYmUgYmVmb3JlIGVuZCB0aW1lIik7Ci0gICAgICAgIGFSYW5nZXMuQXBwZW5k
RWxlbWVudChTZWVrUmFuZ2Uoc3RhcnRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0VGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmRUaW1lKSk7Ci0gICAgICB9CisgIG5zVEFycmF5PG5zQnl0ZVJhbmdlPiBjYWNoZWQ7
CisgIG5zcmVzdWx0IHJlcyA9IG1EZWNvZGVyLT5HZXRDdXJyZW50U3RyZWFtKCktPkdldENhY2hl
ZFJhbmdlcyhjYWNoZWQpOworICBOU19FTlNVUkVfU1VDQ0VTUyhyZXMsIHJlcyk7CisKKyAgZm9y
IChQUlVpbnQzMiBpbmRleCA9IDA7IGluZGV4IDwgYVJhbmdlcy5MZW5ndGgoKTsgaW5kZXgrKykg
eworICAgIG5zQnl0ZVJhbmdlJiByYW5nZSA9IGNhY2hlZFtpbmRleF07CisgICAgUFJJbnQ2NCBz
dGFydFRpbWUgPSAtMTsKKyAgICBQUkludDY0IGVuZFRpbWUgPSAtMTsKKyAgICBpZiAoTlNfRkFJ
TEVEKFJlc2V0RGVjb2RlKCkpKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKICAg
ICB9Ci0gICAgc3RhcnRPZmZzZXQgPSBlbmRPZmZzZXQ7CisgICAgLy8gRW5zdXJlIHRoZSBvZmZz
ZXRzIGFyZSBhZnRlciB0aGUgaGVhZGVyIHBhZ2VzLgorICAgIFBSSW50NjQgc3RhcnRPZmZzZXQg
PSBOU19NQVgoY2FjaGVkW2luZGV4XS5tU3RhcnQsIG1EYXRhT2Zmc2V0KTsKKyAgICBQUkludDY0
IGVuZE9mZnNldCA9IE5TX01BWChjYWNoZWRbaW5kZXhdLm1FbmQsIG1EYXRhT2Zmc2V0KTsKKwor
ICAgIEZpbmRTdGFydFRpbWUoc3RhcnRPZmZzZXQsIHN0YXJ0VGltZSk7CisgICAgaWYgKHN0YXJ0
VGltZSAhPSAtMSAmJgorICAgICAgICAoKGVuZFRpbWUgPSBGaW5kRW5kVGltZShlbmRPZmZzZXQp
KSAhPSAtMSkpCisgICAgeworICAgICAgTlNfQVNTRVJUSU9OKHN0YXJ0VGltZSA8IGVuZFRpbWUs
CisgICAgICAgICAgICAgICAgICAgIlN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgZW5kIHRpbWUi
KTsKKyAgICAgIGFSYW5nZXMuQXBwZW5kRWxlbWVudChTZWVrUmFuZ2Uoc3RhcnRPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lKSk7CisgICAgIH0KICAgfQogICBpZiAoTlNf
RkFJTEVEKFJlc2V0RGVjb2RlKCkpKSB7CiAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAg
IH0KICAgcmV0dXJuIE5TX09LOwogfQogCiBuc09nZ1JlYWRlcjo6U2Vla1JhbmdlCkBAIC0xNjgx
LDQxICsxNjczLDQxIEBAIG5zcmVzdWx0IG5zT2dnUmVhZGVyOjpHZXRCdWZmZXJlZChuc1RpbWUK
ICAgLy8gYWZ0ZXIgbWV0YWRhdGEgaXMgcmVhZCBhbmQgR2V0QnVmZmVyZWQgaXNuJ3QgY2FsbGVk
IGJlZm9yZSBtZXRhZGF0YSBpcwogICAvLyByZWFkLgogICBpZiAoIW1JbmZvLm1IYXNWaWRlbyAm
JiAhbUluZm8ubUhhc0F1ZGlvKSB7CiAgICAgLy8gTm8gbmVlZCB0byBzZWFyY2ggdGhyb3VnaCB0
aGUgZmlsZSBpZiB0aGVyZSBhcmUgbm8gYXVkaW8gb3IgdmlkZW8gdHJhY2tzCiAgICAgcmV0dXJu
IE5TX09LOwogICB9CiAKICAgbnNNZWRpYVN0cmVhbSogc3RyZWFtID0gbURlY29kZXItPkdldEN1
cnJlbnRTdHJlYW0oKTsKKyAgbnNUQXJyYXk8bnNCeXRlUmFuZ2U+IHJhbmdlczsKKyAgbnNyZXN1
bHQgcmVzID0gc3RyZWFtLT5HZXRDYWNoZWRSYW5nZXMocmFuZ2VzKTsKKyAgTlNfRU5TVVJFX1NV
Q0NFU1MocmVzLCByZXMpOwogCiAgIC8vIFRyYXZlcnNlIGFjcm9zcyB0aGUgYnVmZmVyZWQgYnl0
ZSByYW5nZXMsIGRldGVybWluaW5nIHRoZSB0aW1lIHJhbmdlcwogICAvLyB0aGV5IGNvbnRhaW4u
IG5zTWVkaWFTdHJlYW06OkdldE5leHRDYWNoZWREYXRhKG9mZnNldCkgcmV0dXJucyAtMSB3aGVu
CiAgIC8vIG9mZnNldCBpcyBhZnRlciB0aGUgZW5kIG9mIHRoZSBtZWRpYSBzdHJlYW0sIG9yIHRo
ZXJlJ3Mgbm8gbW9yZSBjYWNoZWQKICAgLy8gZGF0YSBhZnRlciB0aGUgb2Zmc2V0LiBUaGlzIGxv
b3Agd2lsbCBydW4gdW50aWwgd2UndmUgY2hlY2tlZCBldmVyeQogICAvLyBidWZmZXJlZCByYW5n
ZSBpbiB0aGUgbWVkaWEsIGluIGluY3JlYXNpbmcgb3JkZXIgb2Ygb2Zmc2V0LgogICBvZ2dfc3lu
Y19zdGF0ZSBzdGF0ZTsKICAgb2dnX3N5bmNfaW5pdCgmc3RhdGUpOwotICBQUkludDY0IHN0YXJ0
T2Zmc2V0ID0gc3RyZWFtLT5HZXROZXh0Q2FjaGVkRGF0YShtRGF0YU9mZnNldCk7Ci0gIHdoaWxl
IChzdGFydE9mZnNldCA+PSAwKSB7Ci0gICAgUFJJbnQ2NCBlbmRPZmZzZXQgPSBzdHJlYW0tPkdl
dENhY2hlZERhdGFFbmQoc3RhcnRPZmZzZXQpOwotICAgIE5TX0FTU0VSVElPTihzdGFydE9mZnNl
dCA8IGVuZE9mZnNldCwgIkJ1ZmZlcmVkIHJhbmdlIG11c3QgZW5kIGFmdGVyIGl0cyBzdGFydCIp
OwotICAgIC8vIEJ5dGVzIFtzdGFydE9mZnNldC4uZW5kT2Zmc2V0XSBhcmUgY2FjaGVkLgorICBm
b3IgKFBSVWludDMyIGluZGV4ID0gMDsgaW5kZXggPCByYW5nZXMuTGVuZ3RoKCk7IGluZGV4Kysp
IHsKKyAgICAvLyBFbnN1cmUgdGhlIG9mZnNldHMgYXJlIGFmdGVyIHRoZSBoZWFkZXIgcGFnZXMu
CisgICAgUFJJbnQ2NCBzdGFydE9mZnNldCA9IE5TX01BWChyYW5nZXNbaW5kZXhdLm1TdGFydCwg
bURhdGFPZmZzZXQpOworICAgIFBSSW50NjQgZW5kT2Zmc2V0ID0gTlNfTUFYKHJhbmdlc1tpbmRl
eF0ubUVuZCwgbURhdGFPZmZzZXQpOwogCi0gICAgLy8gRmluZCB0aGUgc3RhcnQgdGltZSBvZiB0
aGUgcmFuZ2UuCi0gICAgUFJJbnQ2NCBzdGFydFRpbWUgPSAtMTsKLSAgICBpZiAoc3RhcnRPZmZz
ZXQgPT0gbURhdGFPZmZzZXQpIHsKLSAgICAgIC8vIEJlY2F1c2UgdGhlIGdyYW51bGVwb3MgdGlt
ZSBpcyBhY3R1YWxseSB0aGUgZW5kIHRpbWUgb2YgdGhlIHBhZ2UsCi0gICAgICAvLyB3ZSBzcGVj
aWFsLWNhc2UgKHN0YXJ0T2Zmc2V0ID09IG1EYXRhT2Zmc2V0KSBzbyB0aGF0IHRoZSBmaXJzdAot
ICAgICAgLy8gYnVmZmVyZWQgcmFuZ2UgYWx3YXlzIGFwcGVhcnMgdG8gYmUgYnVmZmVyZWQgZnJv
bSBbdD0wLi4uXSByYXRoZXIKLSAgICAgIC8vIHRoYW4gZnJvbSB0aGUgZW5kLXRpbWUgb2YgdGhl
IGZpcnN0IHBhZ2UuCi0gICAgICBzdGFydFRpbWUgPSBhU3RhcnRUaW1lOwotICAgIH0KLSAgICAv
LyBSZWFkIHBhZ2VzIHVudGlsIHdlIGZpbmQgb25lIHdpdGggYSBncmFudWxlcG9zIHdoaWNoIHdl
IGNhbiBjb252ZXJ0Ci0gICAgLy8gaW50byBhIHRpbWVzdGFtcCB0byB1c2UgYXMgdGhlIHRpbWUg
b2YgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXJlZCByYW5nZS4KKyAgICAvLyBCZWNhdXNlIHRoZSBn
cmFudWxlcG9zIHRpbWUgaXMgYWN0dWFsbHkgdGhlIGVuZCB0aW1lIG9mIHRoZSBwYWdlLAorICAg
IC8vIHdlIHNwZWNpYWwtY2FzZSAoc3RhcnRPZmZzZXQgPT0gbURhdGFPZmZzZXQpIHNvIHRoYXQg
dGhlIGZpcnN0CisgICAgLy8gYnVmZmVyZWQgcmFuZ2UgYWx3YXlzIGFwcGVhcnMgdG8gYmUgYnVm
ZmVyZWQgZnJvbSB0aGUgbWVkaWEgc3RhcnQKKyAgICAvLyB0aW1lLCByYXRoZXIgdGhhbiBmcm9t
IHRoZSBlbmQtdGltZSBvZiB0aGUgZmlyc3QgcGFnZS4KKyAgICBQUkludDY0IHN0YXJ0VGltZSA9
IChzdGFydE9mZnNldCA9PSBtRGF0YU9mZnNldCkgPyBhU3RhcnRUaW1lIDogLTE7CisKKyAgICAv
LyBGaW5kIHRoZSBzdGFydCB0aW1lIG9mIHRoZSByYW5nZS4gUmVhZCBwYWdlcyB1bnRpbCB3ZSBm
aW5kIG9uZSB3aXRoIGEKKyAgICAvLyBncmFudWxlcG9zIHdoaWNoIHdlIGNhbiBjb252ZXJ0IGlu
dG8gYSB0aW1lc3RhbXAgdG8gdXNlIGFzIHRoZSB0aW1lIG9mCisgICAgLy8gdGhlIHN0YXJ0IG9m
IHRoZSBidWZmZXJlZCByYW5nZS4KICAgICBvZ2dfc3luY19yZXNldCgmc3RhdGUpOwogICAgIHdo
aWxlIChzdGFydFRpbWUgPT0gLTEpIHsKICAgICAgIG9nZ19wYWdlIHBhZ2U7CiAgICAgICBQUklu
dDMyIGRpc2NhcmQ7CiAgICAgICBQYWdlU3luY1Jlc3VsdCByZXMgPSBQYWdlU3luYyhzdHJlYW0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9UUlVFLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQsCkBAIC0xNzUzLDMzICsxNzQ1LDMxIEBAIG5zcmVz
dWx0IG5zT2dnUmVhZGVyOjpHZXRCdWZmZXJlZChuc1RpbWUKICAgICAgICAgLy8gU3RyZWFtIGlz
IG5vdCB0aGUgdGhlb3JhIG9yIHZvcmJpcyBzdHJlYW0gd2UncmUgcGxheWluZywKICAgICAgICAg
Ly8gYnV0IGlzIG9uZSB0aGF0IHdlIGhhdmUgaGVhZGVyIGRhdGEgZm9yLgogICAgICAgICBzdGFy
dE9mZnNldCArPSBwYWdlLmhlYWRlcl9sZW4gKyBwYWdlLmJvZHlfbGVuOwogICAgICAgICBjb250
aW51ZTsKICAgICAgIH0KICAgICAgIGVsc2UgewogICAgICAgICAvLyBQYWdlIGlzIGZvciBhIHN0
cmVhbSB3ZSBkb24ndCBrbm93IGFib3V0IChwb3NzaWJseSBhIGNoYWluZWQKICAgICAgICAgLy8g
b2dnKSwgcmV0dXJuIGFuIGVycm9yLgorICAgICAgICBvZ2dfc3luY19jbGVhcigmc3RhdGUpOwog
ICAgICAgICByZXR1cm4gUEFHRV9TWU5DX0VSUk9SOwogICAgICAgfQogICAgIH0KIAogICAgIGlm
IChzdGFydFRpbWUgIT0gLTEpIHsKICAgICAgIC8vIFdlIHdlcmUgYWJsZSB0byBmaW5kIGEgc3Rh
cnQgdGltZSBmb3IgdGhhdCByYW5nZSwgc2VlIGlmIHdlIGNhbgogICAgICAgLy8gZmluZCBhbiBl
bmQgdGltZS4KICAgICAgIFBSSW50NjQgZW5kVGltZSA9IEZpbmRFbmRUaW1lKHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQsIFBSX1RSVUUsICZzdGF0ZSk7CiAgICAgICBpZiAoZW5kVGltZSAhPSAtMSkg
ewogICAgICAgICBlbmRUaW1lIC09IGFTdGFydFRpbWU7CiAgICAgICAgIGFCdWZmZXJlZC0+QWRk
KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhcnRUaW1lKSAvIDEwMDAuMCwKICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihlbmRUaW1lKSAvIDEwMDAuMCk7CiAgICAgICB9
CiAgICAgfQotICAgIHN0YXJ0T2Zmc2V0ID0gc3RyZWFtLT5HZXROZXh0Q2FjaGVkRGF0YShlbmRP
ZmZzZXQpOwotICAgIE5TX0FTU0VSVElPTihzdGFydE9mZnNldCA9PSAtMSB8fCBzdGFydE9mZnNl
dCA+IGVuZE9mZnNldCwKLSAgICAgICJNdXN0IGhhdmUgYWR2YW5jZWQgdG8gc3RhcnQgb2YgbmV4
dCByYW5nZSwgb3IgaGl0IGVuZCBvZiBzdHJlYW0iKTsKICAgfQogCiAgIC8vIElmIHdlIGRvbid0
IGNsZWFyIHRoZSBzeW5jIHN0YXRlIGJlZm9yZSBleGl0IHdlJ2xsIGxlYWsuCiAgIG9nZ19zeW5j
X2NsZWFyKCZzdGF0ZSk7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCg==
</data>
<flag name="review"
          id="435018"
          type_id="937"
          status="+"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>520044</attachid>
            <date>2011-03-17 15:26:43 -0700</date>
            <delta_ts>2011-03-17 20:34:11 -0700</delta_ts>
            <desc>Patch 5: Ensure WebM GetBuffered() is threadsafe</desc>
            <filename>639391-5-webm-buffered-threadsafe.patch</filename>
            <type>text/plain</type>
            <size>10241</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYzFkNTVmZTc4ZGFiZGJlYTc1NWNiMGZjYmEw
MjZjNTQzZjZhMDcwYwpCdWcgNjM5MzkxIC0gRW5zdXJlIFdlYk0gR2V0QnVmZmVyZWQoKSBpcyB0
aHJlYWRzYWZlLiByPT8KCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNQnVm
ZmVyZWRQYXJzZXIuY3BwIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTUJ1ZmZlcmVkUGFyc2Vy
LmNwcAotLS0gYS9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNQnVmZmVyZWRQYXJzZXIuY3BwCisr
KyBiL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1CdWZmZXJlZFBhcnNlci5jcHAKQEAgLTM0LDE2
ICszNCwxOSBAQAogICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUg
b2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5T
RSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibnNBbGdvcml0aG0uaCIKICNpbmNsdWRlICJu
c1dlYk1CdWZmZXJlZFBhcnNlci5oIgogI2luY2x1ZGUgIm5zVGltZVJhbmdlcy5oIgorI2luY2x1
ZGUgIm5zVGhyZWFkVXRpbHMuaCIKKwordXNpbmcgbW96aWxsYTo6TW9uaXRvckF1dG9FbnRlcjsK
IAogc3RhdGljIGNvbnN0IGRvdWJsZSBOU19QRVJfUyA9IDFlOTsKIHN0YXRpYyBjb25zdCBkb3Vi
bGUgTVNfUEVSX1MgPSAxZTM7CiAKIHN0YXRpYyBQUlVpbnQzMgogVkludExlbmd0aCh1bnNpZ25l
ZCBjaGFyIGFGaXJzdEJ5dGUsIFBSVWludDMyKiBhTWFzaykKIHsKICAgUFJVaW50MzIgY291bnQg
PSAxOwpAQCAtNTgsMTggKzYxLDIxIEBAIFZJbnRMZW5ndGgodW5zaWduZWQgY2hhciBhRmlyc3RC
eXRlLCBQUlUKICAgaWYgKGFNYXNrKSB7CiAgICAgKmFNYXNrID0gbWFzazsKICAgfQogICBOU19B
U1NFUlRJT04oY291bnQgPj0gMSAmJiBjb3VudCA8PSA4LCAiSW5zYW5lIFZJbnQgbGVuZ3RoLiIp
OwogICByZXR1cm4gY291bnQ7CiB9CiAKIHZvaWQgbnNXZWJNQnVmZmVyZWRQYXJzZXI6OkFwcGVu
ZChjb25zdCB1bnNpZ25lZCBjaGFyKiBhQnVmZmVyLCBQUlVpbnQzMiBhTGVuZ3RoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zVEFycmF5PG5zV2ViTVRpbWVEYXRhT2Zmc2V0
PiYgYU1hcHBpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNUQXJyYXk8
bnNXZWJNVGltZURhdGFPZmZzZXQ+JiBhTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNb25pdG9yJiBhTW9uaXRvcikKIHsKKyAgTlNfQVNTRVJUSU9OKE5TX0lzTWFp
blRocmVhZCgpLCAiU2hvdWxkIGJlIG9uIG1haW4gdGhyZWFkLiIpOworCiAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIENMVVNURVJfSURbXSA9IHsgMHgxZiwgMHg0MywgMHhiNiwgMHg3NSB9
OwogICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBUSU1FQ09ERV9JRCA9IDB4ZTc7CiAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIEJMT0NLR1JPVVBfSUQgPSAweGEwOwogICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBCTE9DS19JRCA9IDB4YTE7CiAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIFNJTVBMRUJMT0NLX0lEID0gMHhhMzsKIAogICBjb25zdCB1bnNpZ25lZCBjaGFy
KiBwID0gYUJ1ZmZlcjsKIApAQCAtMTYyLDIwICsxNjgsMjMgQEAgdm9pZCBuc1dlYk1CdWZmZXJl
ZFBhcnNlcjo6QXBwZW5kKGNvbnN0IAogICAgIGNhc2UgUkVBRF9CTE9DS19USU1FQ09ERToKICAg
ICAgIGlmIChtQmxvY2tUaW1lY29kZUxlbmd0aCkgewogICAgICAgICBtQmxvY2tUaW1lY29kZSA8
PD0gODsKICAgICAgICAgbUJsb2NrVGltZWNvZGUgfD0gKnArKzsKICAgICAgICAgbUJsb2NrVGlt
ZWNvZGVMZW5ndGggLT0gMTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEl0J3MgcG9zc2li
bGUgd2UndmUgcGFyc2VkIHRoaXMgZGF0YSBiZWZvcmUsIHNvIGF2b2lkIGluc2VydGluZwogICAg
ICAgICAvLyBkdXBsaWNhdGUgbnNXZWJNVGltZURhdGFPZmZzZXQgZW50cmllcy4KLSAgICAgICAg
UFJVaW50MzIgaWR4OwotICAgICAgICBpZiAoIWFNYXBwaW5nLkdyZWF0ZXN0SW5kZXhMdEVxKG1C
bG9ja09mZnNldCwgaWR4KSkgewotICAgICAgICAgIG5zV2ViTVRpbWVEYXRhT2Zmc2V0IGVudHJ5
KG1CbG9ja09mZnNldCwgbUNsdXN0ZXJUaW1lY29kZSArIG1CbG9ja1RpbWVjb2RlKTsKLSAgICAg
ICAgICBhTWFwcGluZy5JbnNlcnRFbGVtZW50QXQoaWR4LCBlbnRyeSk7CisgICAgICAgIHsKKyAg
ICAgICAgICBNb25pdG9yQXV0b0VudGVyIG1vbihhTW9uaXRvcik7CisgICAgICAgICAgUFJVaW50
MzIgaWR4OworICAgICAgICAgIGlmICghYU1hcHBpbmcuR3JlYXRlc3RJbmRleEx0RXEobUJsb2Nr
T2Zmc2V0LCBpZHgpKSB7CisgICAgICAgICAgICBuc1dlYk1UaW1lRGF0YU9mZnNldCBlbnRyeSht
QmxvY2tPZmZzZXQsIG1DbHVzdGVyVGltZWNvZGUgKyBtQmxvY2tUaW1lY29kZSk7CisgICAgICAg
ICAgICBhTWFwcGluZy5JbnNlcnRFbGVtZW50QXQoaWR4LCBlbnRyeSk7CisgICAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgLy8gU2tpcCByZXN0IG9mIGJsb2NrIGhlYWRlciBhbmQgdGhl
IGJsb2NrJ3MgcGF5bG9hZC4KICAgICAgICAgbUJsb2NrU2l6ZSAtPSBtVkludExlbmd0aDsKICAg
ICAgICAgbUJsb2NrU2l6ZSAtPSAyOwogICAgICAgICBtU2tpcEJ5dGVzID0gUFJVaW50MzIobUJs
b2NrU2l6ZSk7CiAgICAgICAgIG1TdGF0ZSA9IFNLSVBfREFUQTsKICAgICAgICAgbU5leHRTdGF0
ZSA9IEFOWV9CTE9DS19TWU5DOwpAQCAtMjAzLDE2ICsyMTIsMTggQEAgdm9pZCBuc1dlYk1CdWZm
ZXJlZFBhcnNlcjo6QXBwZW5kKGNvbnN0IAogICBtQ3VycmVudE9mZnNldCArPSBhTGVuZ3RoOwog
fQogCiB2b2lkIG5zV2ViTUJ1ZmZlcmVkU3RhdGU6OkNhbGN1bGF0ZUJ1ZmZlcmVkRm9yUmFuZ2Uo
bnNUaW1lUmFuZ2VzKiBhQnVmZmVyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhU3RhcnRPZmZzZXQsIFBSSW50NjQgYUVuZE9m
ZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUlVpbnQ2NCBhVGltZWNvZGVTY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFTdGFydFRpbWVPZmZzZXROUykKIHsKKyAg
TW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOworCiAgIC8vIEZpbmQgdGhlIGZpcnN0IG5z
V2ViTVRpbWVEYXRhT2Zmc2V0IGF0IG9yIGFmdGVyIGFTdGFydE9mZnNldC4KICAgUFJVaW50MzIg
c3RhcnQ7CiAgIG1UaW1lTWFwcGluZy5HcmVhdGVzdEluZGV4THRFcShhU3RhcnRPZmZzZXQsIHN0
YXJ0KTsKICAgaWYgKHN0YXJ0ID09IG1UaW1lTWFwcGluZy5MZW5ndGgoKSkgewogICAgIHJldHVy
bjsKICAgfQogCiAgIC8vIEZpbmQgdGhlIGZpcnN0IG5zV2ViTVRpbWVEYXRhT2Zmc2V0IGF0IG9y
IGJlZm9yZSBhRW5kT2Zmc2V0LgpAQCAtMjQ2LDE2ICsyNTcsMTcgQEAgdm9pZCBuc1dlYk1CdWZm
ZXJlZFN0YXRlOjpDYWxjdWxhdGVCdWZmZQogCiAgIGRvdWJsZSBzdGFydFRpbWUgPSAobVRpbWVN
YXBwaW5nW3N0YXJ0XS5tVGltZWNvZGUgKiBhVGltZWNvZGVTY2FsZSAtIGFTdGFydFRpbWVPZmZz
ZXROUykgLyBOU19QRVJfUzsKICAgZG91YmxlIGVuZFRpbWUgPSAobVRpbWVNYXBwaW5nW2VuZF0u
bVRpbWVjb2RlICogYVRpbWVjb2RlU2NhbGUgLSBhU3RhcnRUaW1lT2Zmc2V0TlMpIC8gTlNfUEVS
X1M7CiAgIGFCdWZmZXJlZC0+QWRkKHN0YXJ0VGltZSwgZW5kVGltZSk7CiB9CiAKIHZvaWQgbnNX
ZWJNQnVmZmVyZWRTdGF0ZTo6Tm90aWZ5RGF0YUFycml2ZWQoY29uc3QgY2hhciogYUJ1ZmZlciwg
UFJVaW50MzIgYUxlbmd0aCwgUFJVaW50MzIgYU9mZnNldCkKIHsKKyAgTlNfQVNTRVJUSU9OKE5T
X0lzTWFpblRocmVhZCgpLCAiU2hvdWxkIGJlIG9uIG1haW4gdGhyZWFkLiIpOwogICBQUlVpbnQz
MiBpZHg7CiAgIGlmICghbVJhbmdlUGFyc2Vycy5HcmVhdGVzdEluZGV4THRFcShhT2Zmc2V0LCBp
ZHgpKSB7CiAgICAgLy8gSWYgdGhlIGluY29taW5nIGRhdGEgb3ZlcmxhcHMgYW4gYWxyZWFkeSBw
YXJzZWQgcmFuZ2UsIGFkanVzdCB0aGUKICAgICAvLyBidWZmZXIgc28gdGhhdCB3ZSBvbmx5IHJl
cGFyc2UgdGhlIG5ldyBkYXRhLiAgSXQncyBhbHNvIHBvc3NpYmxlIHRvCiAgICAgLy8gaGF2ZSBh
biBvdmVybGFwIHdoZXJlIHRoZSBlbmQgb2YgdGhlIGluY29taW5nIGRhdGEgaXMgd2l0aGluIGFu
CiAgICAgLy8gYWxyZWFkeSBwYXJzZWQgcmFuZ2UsIGJ1dCB3ZSBkb24ndCBib3RoZXIgaGFuZGxp
bmcgdGhhdCBvdGhlciB0aGFuIGJ5CiAgICAgLy8gYXZvaWRpbmcgc3RvcmluZyBkdXBsaWNhdGUg
dGltZWNvZGVzIHdoZW4gdGhlIHBhcnNlciBydW5zLgogICAgIGlmIChpZHggIT0gbVJhbmdlUGFy
c2Vycy5MZW5ndGgoKSAmJiBtUmFuZ2VQYXJzZXJzW2lkeF0ubVN0YXJ0T2Zmc2V0IDw9IGFPZmZz
ZXQpIHsKQEAgLTI2OSwxNyArMjgxLDIwIEBAIHZvaWQgbnNXZWJNQnVmZmVyZWRTdGF0ZTo6Tm90
aWZ5RGF0YUFycmkKICAgICAgIE5TX0FTU0VSVElPTihhZGp1c3QgPj0gMCwgIk92ZXJsYXAgZGV0
ZWN0aW9uIGJ1Zy4iKTsKICAgICAgIGFCdWZmZXIgKz0gYWRqdXN0OwogICAgICAgYUxlbmd0aCAt
PSBQUlVpbnQzMihhZGp1c3QpOwogICAgIH0gZWxzZSB7CiAgICAgICBtUmFuZ2VQYXJzZXJzLklu
c2VydEVsZW1lbnRBdChpZHgsIG5zV2ViTUJ1ZmZlcmVkUGFyc2VyKGFPZmZzZXQpKTsKICAgICB9
CiAgIH0KIAotICBtUmFuZ2VQYXJzZXJzW2lkeF0uQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGFCdWZmZXIpLCBhTGVuZ3RoLCBtVGltZU1hcHBpbmcpOworICBt
UmFuZ2VQYXJzZXJzW2lkeF0uQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGFCdWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFMZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpbWVNYXBwaW5nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Nb25pdG9yKTsKIAogICAvLyBNZXJnZSBwYXJzZXJzIHdpdGggb3Zlcmxh
cHBpbmcgcmVnaW9ucyBhbmQgY2xlYW4gdXAgdGhlIHJlbW5hbnRzLgogICBQUlVpbnQzMiBpID0g
MDsKICAgd2hpbGUgKGkgKyAxIDwgbVJhbmdlUGFyc2Vycy5MZW5ndGgoKSkgewogICAgIGlmICht
UmFuZ2VQYXJzZXJzW2ldLm1DdXJyZW50T2Zmc2V0ID49IG1SYW5nZVBhcnNlcnNbaSArIDFdLm1T
dGFydE9mZnNldCkgewogICAgICAgbVJhbmdlUGFyc2Vyc1tpICsgMV0ubVN0YXJ0T2Zmc2V0ID0g
bVJhbmdlUGFyc2Vyc1tpXS5tU3RhcnRPZmZzZXQ7CiAgICAgICBtUmFuZ2VQYXJzZXJzLlJlbW92
ZUVsZW1lbnRBdChpKTsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS93
ZWJtL25zV2ViTUJ1ZmZlcmVkUGFyc2VyLmggYi9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNQnVm
ZmVyZWRQYXJzZXIuaAotLS0gYS9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNQnVmZmVyZWRQYXJz
ZXIuaAorKysgYi9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNQnVmZmVyZWRQYXJzZXIuaApAQCAt
MzUsMTggKzM1LDIwIEBACiAgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUg
R1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICov
CiAjaWYgIWRlZmluZWQobnNXZWJNQnVmZmVyZWRQYXJzZXJfaF8pCiAjZGVmaW5lIG5zV2ViTUJ1
ZmZlcmVkUGFyc2VyX2hfCiAKICNpbmNsdWRlICJuc0lTdXBwb3J0c0ltcGwuaCIKICNpbmNsdWRl
ICJuc1RBcnJheS5oIgorI2luY2x1ZGUgIm1vemlsbGEvTW9uaXRvci5oIgogCiBjbGFzcyBuc1Rp
bWVSYW5nZXM7Cit1c2luZyBtb3ppbGxhOjpNb25pdG9yOwogCiAvLyBTdG9yZXMgYSBzdHJlYW0g
Ynl0ZSBvZmZzZXQgYW5kIHRoZSBzY2FsZWQgdGltZWNvZGUgb2YgdGhlIGJsb2NrIGF0CiAvLyB0
aGF0IG9mZnNldC4gIFRoZSB0aW1lY29kZSBtdXN0IGJlIHNjYWxlZCBieSB0aGUgc3RyZWFtJ3Mg
dGltZWNvZGUKIC8vIHNjYWxlIGJlZm9yZSB1c2UuCiBzdHJ1Y3QgbnNXZWJNVGltZURhdGFPZmZz
ZXQKIHsKICAgbnNXZWJNVGltZURhdGFPZmZzZXQoUFJJbnQ2NCBhT2Zmc2V0LCBQUlVpbnQ2NCBh
VGltZWNvZGUpCiAgICAgOiBtT2Zmc2V0KGFPZmZzZXQpLCBtVGltZWNvZGUoYVRpbWVjb2RlKQpA
QCAtNzIsMTkgKzc0LDIxIEBAIHN0cnVjdCBuc1dlYk1UaW1lRGF0YU9mZnNldAogLy8gd2l0aGlu
IHRoZSBzdHJlYW0uCiBzdHJ1Y3QgbnNXZWJNQnVmZmVyZWRQYXJzZXIKIHsKICAgbnNXZWJNQnVm
ZmVyZWRQYXJzZXIoUFJJbnQ2NCBhT2Zmc2V0KQogICAgIDogbVN0YXJ0T2Zmc2V0KGFPZmZzZXQp
LCBtQ3VycmVudE9mZnNldChhT2Zmc2V0KSwgbVN0YXRlKENMVVNURVJfU1lOQyksIG1DbHVzdGVy
SURQb3MoMCkKICAge30KIAogICAvLyBTdGVwcyB0aGUgcGFyc2VyIHRocm91Z2ggYUxlbmd0aCBi
eXRlcyBvZiBkYXRhLiAgQWx3YXlzIGNvbnN1bWVzCi0gIC8vIGFMZW5ndGggYnl0ZXMuICBVcGRh
dGVzIG1DdXJyZW50T2Zmc2V0IGJlZm9yZSByZXR1cm5pbmcuCisgIC8vIGFMZW5ndGggYnl0ZXMu
ICBVcGRhdGVzIG1DdXJyZW50T2Zmc2V0IGJlZm9yZSByZXR1cm5pbmcuICBBY3F1aXJlcworICAv
LyBhTW9uaXRvciBiZWZvcmUgdXNpbmcgYU1hcHBpbmcuCiAgIHZvaWQgQXBwZW5kKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGFCdWZmZXIsIFBSVWludDMyIGFMZW5ndGgsCi0gICAgICAgICAgICAgIG5z
VEFycmF5PG5zV2ViTVRpbWVEYXRhT2Zmc2V0PiYgYU1hcHBpbmcpOworICAgICAgICAgICAgICBu
c1RBcnJheTxuc1dlYk1UaW1lRGF0YU9mZnNldD4mIGFNYXBwaW5nLAorICAgICAgICAgICAgICBN
b25pdG9yJiBhTW9uaXRvcik7CiAKICAgYm9vbCBvcGVyYXRvcj09KFBSSW50NjQgYU9mZnNldCkg
Y29uc3QgewogICAgIHJldHVybiBtQ3VycmVudE9mZnNldCA9PSBhT2Zmc2V0OwogICB9CiAKICAg
Ym9vbCBvcGVyYXRvcjwoUFJJbnQ2NCBhT2Zmc2V0KSBjb25zdCB7CiAgICAgcmV0dXJuIG1DdXJy
ZW50T2Zmc2V0IDwgYU9mZnNldDsKICAgfQpAQCAtMjA3LDMxICsyMTEsMzQgQEAgcHJpdmF0ZToK
ICAgUFJVaW50MzIgbVNraXBCeXRlczsKIH07CiAKIGNsYXNzIG5zV2ViTUJ1ZmZlcmVkU3RhdGUK
IHsKICAgTlNfSU5MSU5FX0RFQ0xfUkVGQ09VTlRJTkcobnNXZWJNQnVmZmVyZWRTdGF0ZSkKIAog
cHVibGljOgotICBuc1dlYk1CdWZmZXJlZFN0YXRlKCkgeworICBuc1dlYk1CdWZmZXJlZFN0YXRl
KCkgOiBtTW9uaXRvcigibnNXZWJNQnVmZmVyZWRTdGF0ZSIpIHsKICAgICBNT1pfQ09VTlRfQ1RP
Uihuc1dlYk1CdWZmZXJlZFN0YXRlKTsKICAgfQogCiAgIH5uc1dlYk1CdWZmZXJlZFN0YXRlKCkg
ewogICAgIE1PWl9DT1VOVF9EVE9SKG5zV2ViTUJ1ZmZlcmVkU3RhdGUpOwogICB9CiAKICAgdm9p
ZCBOb3RpZnlEYXRhQXJyaXZlZChjb25zdCBjaGFyKiBhQnVmZmVyLCBQUlVpbnQzMiBhTGVuZ3Ro
LCBQUlVpbnQzMiBhT2Zmc2V0KTsKICAgdm9pZCBDYWxjdWxhdGVCdWZmZXJlZEZvclJhbmdlKG5z
VGltZVJhbmdlcyogYUJ1ZmZlcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJJbnQ2NCBhU3RhcnRPZmZzZXQsIFBSSW50NjQgYUVuZE9mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSVWludDY0IGFUaW1lY29kZVNjYWxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhU3RhcnRUaW1lT2Zmc2V0TlMpOwogCiBwcml2
YXRlOgorICAvLyBTeW5jaHJvbml6ZXMgYWNjZXNzIHRvIHRoZSBtVGltZU1hcHBpbmcgYXJyYXku
CisgIE1vbml0b3IgbU1vbml0b3I7CisKICAgLy8gU29ydGVkIChieSBvZmZzZXQpIG1hcCBvZiBk
YXRhIG9mZnNldHMgdG8gdGltZWNvZGVzLiAgUG9wdWxhdGVkCiAgIC8vIG9uIHRoZSBtYWluIHRo
cmVhZCBhcyBkYXRhIGlzIHJlY2VpdmVkIGFuZCBwYXJzZWQgYnkgbnNXZWJNQnVmZmVyZWRQYXJz
ZXJzLgogICBuc1RBcnJheTxuc1dlYk1UaW1lRGF0YU9mZnNldD4gbVRpbWVNYXBwaW5nOwogCiAg
IC8vIFNvcnRlZCAoYnkgb2Zmc2V0KSBsaXZlIHBhcnNlciBpbnN0YW5jZXMuICBNYWluIHRocmVh
ZCBvbmx5LgogICBuc1RBcnJheTxuc1dlYk1CdWZmZXJlZFBhcnNlcj4gbVJhbmdlUGFyc2VyczsK
IH07CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3BwIGIv
Y29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKLS0tIGEvY29udGVudC9tZWRpYS93
ZWJtL25zV2ViTVJlYWRlci5jcHAKKysrIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRl
ci5jcHAKQEAgLTc5MSwzMiArNzkxLDI4IEBAIG5zcmVzdWx0IG5zV2ViTVJlYWRlcjo6R2V0QnVm
ZmVyZWQobnNUaW0KIAogICAvLyBTcGVjaWFsIGNhc2UgY29tcGxldGVseSBjYWNoZWQgZmlsZXMu
ICBUaGlzIGFsc28gaGFuZGxlcyBsb2NhbCBmaWxlcy4KICAgaWYgKHN0cmVhbS0+SXNEYXRhQ2Fj
aGVkVG9FbmRPZlN0cmVhbSgwKSkgewogICAgIHVpbnQ2NF90IGR1cmF0aW9uID0gMDsKICAgICBp
ZiAobmVzdGVnZ19kdXJhdGlvbihtQ29udGV4dCwgJmR1cmF0aW9uKSA9PSAwKSB7CiAgICAgICBh
QnVmZmVyZWQtPkFkZCgwLCBkdXJhdGlvbiAvIE5TX1BFUl9TKTsKICAgICB9CiAgIH0gZWxzZSB7
Ci0gICAgUFJJbnQ2NCBzdGFydE9mZnNldCA9IHN0cmVhbS0+R2V0TmV4dENhY2hlZERhdGEoMCk7
CisgICAgbnNNZWRpYVN0cmVhbSogc3RyZWFtID0gbURlY29kZXItPkdldEN1cnJlbnRTdHJlYW0o
KTsKKyAgICBuc1RBcnJheTxuc0J5dGVSYW5nZT4gcmFuZ2VzOworICAgIG5zcmVzdWx0IHJlcyA9
IHN0cmVhbS0+R2V0Q2FjaGVkUmFuZ2VzKHJhbmdlcyk7CisgICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cmVzLCByZXMpOworCiAgICAgUFJJbnQ2NCBzdGFydFRpbWVPZmZzZXROUyA9IGFTdGFydFRpbWUg
KiBOU19QRVJfTVM7Ci0gICAgd2hpbGUgKHN0YXJ0T2Zmc2V0ID49IDApIHsKLSAgICAgIFBSSW50
NjQgZW5kT2Zmc2V0ID0gc3RyZWFtLT5HZXRDYWNoZWREYXRhRW5kKHN0YXJ0T2Zmc2V0KTsKLSAg
ICAgIE5TX0FTU0VSVElPTihzdGFydE9mZnNldCA8IGVuZE9mZnNldCwgIkNhY2hlZCByYW5nZSBp
bnZhbGlkIik7Ci0KKyAgICBmb3IgKFBSVWludDMyIGluZGV4ID0gMDsgaW5kZXggPCByYW5nZXMu
TGVuZ3RoKCk7IGluZGV4KyspIHsKICAgICAgIG1CdWZmZXJlZFN0YXRlLT5DYWxjdWxhdGVCdWZm
ZXJlZEZvclJhbmdlKGFCdWZmZXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzW2luZGV4XS5tU3RhcnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbaW5kZXhdLm1FbmQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lY29k
ZVNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnRUaW1lT2Zmc2V0TlMpOwotCi0gICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IGNhY2hl
ZCBkYXRhIHJhbmdlLgotICAgICAgc3RhcnRPZmZzZXQgPSBzdHJlYW0tPkdldE5leHRDYWNoZWRE
YXRhKGVuZE9mZnNldCk7Ci0gICAgICBOU19BU1NFUlRJT04oc3RhcnRPZmZzZXQgPT0gLTEgfHwg
c3RhcnRPZmZzZXQgPiBlbmRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIk5leHQgY2FjaGVk
IHJhbmdlIGludmFsaWQiKTsKICAgICB9CiAgIH0KIAogICByZXR1cm4gTlNfT0s7CiB9CiAKIHZv
aWQgbnNXZWJNUmVhZGVyOjpOb3RpZnlEYXRhQXJyaXZlZChjb25zdCBjaGFyKiBhQnVmZmVyLCBQ
UlVpbnQzMiBhTGVuZ3RoLCBQUlVpbnQzMiBhT2Zmc2V0KQogewo=
</data>
<flag name="review"
          id="435019"
          type_id="937"
          status="+"
          setter="kinetik"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>520045</attachid>
            <date>2011-03-17 15:30:13 -0700</date>
            <delta_ts>2011-03-17 20:34:04 -0700</delta_ts>
            <desc>Patch 6: Ensure nsWaveReader::GetBuffered() is threadsafe</desc>
            <filename>639391-6-wave-buffered-threadsafe.patch</filename>
            <type>text/plain</type>
            <size>1949</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYTUxODIzMWE3YjE1ODQ1ZjYxYTgwYmFlZjZm
NzA5ZDBhMGRmY2E1NApCdWcgNjM5MzkxIC0gRW5zdXJlIG5zV2F2ZVJlYWRlcjo6R2V0QnVmZmVy
ZWQgaXMgdGhyZWFkc2FmZS4gcj0/CgpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS93YXZlL25z
V2F2ZVJlYWRlci5jcHAgYi9jb250ZW50L21lZGlhL3dhdmUvbnNXYXZlUmVhZGVyLmNwcAotLS0g
YS9jb250ZW50L21lZGlhL3dhdmUvbnNXYXZlUmVhZGVyLmNwcAorKysgYi9jb250ZW50L21lZGlh
L3dhdmUvbnNXYXZlUmVhZGVyLmNwcApAQCAtMjU0LDI3ICsyNTQsMjcgQEAgbnNyZXN1bHQgbnNX
YXZlUmVhZGVyOjpTZWVrKFBSSW50NjQgYVRhcgogICBQUkludDY0IHBvc2l0aW9uID0gUm91bmRE
b3duVG9TYW1wbGUoVGltZVRvQnl0ZXMoc2Vla1RpbWUpIC8gMWU2KTsKICAgTlNfQVNTRVJUSU9O
KFBSX0lOVDY0X01BWCAtIG1XYXZlUENNT2Zmc2V0ID4gcG9zaXRpb24sICJJbnRlZ2VyIG92ZXJm
bG93IGR1cmluZyB3YXZlIHNlZWsiKTsKICAgcG9zaXRpb24gKz0gbVdhdmVQQ01PZmZzZXQ7CiAg
IHJldHVybiBtRGVjb2Rlci0+R2V0Q3VycmVudFN0cmVhbSgpLT5TZWVrKG5zSVNlZWthYmxlU3Ry
ZWFtOjpOU19TRUVLX1NFVCwgcG9zaXRpb24pOwogfQogCiBuc3Jlc3VsdCBuc1dhdmVSZWFkZXI6
OkdldEJ1ZmZlcmVkKG5zVGltZVJhbmdlcyogYUJ1ZmZlcmVkLCBQUkludDY0IGFTdGFydFRpbWUp
CiB7Ci0gIFBSSW50NjQgc3RhcnRPZmZzZXQgPSBtRGVjb2Rlci0+R2V0Q3VycmVudFN0cmVhbSgp
LT5HZXROZXh0Q2FjaGVkRGF0YShtV2F2ZVBDTU9mZnNldCk7Ci0gIHdoaWxlIChzdGFydE9mZnNl
dCA+PSAwKSB7Ci0gICAgUFJJbnQ2NCBlbmRPZmZzZXQgPSBtRGVjb2Rlci0+R2V0Q3VycmVudFN0
cmVhbSgpLT5HZXRDYWNoZWREYXRhRW5kKHN0YXJ0T2Zmc2V0KTsKLSAgICAvLyBCeXRlcyBbc3Rh
cnRPZmZzZXQuLmVuZE9mZnNldF0gYXJlIGNhY2hlZC4KLSAgICBOU19BU1NFUlRJT04oc3RhcnRP
ZmZzZXQgPj0gbVdhdmVQQ01PZmZzZXQsICJJbnRlZ2VyIHVuZGVyZmxvdyBpbiBHZXRCdWZmZXJl
ZCIpOwotICAgIE5TX0FTU0VSVElPTihlbmRPZmZzZXQgPj0gbVdhdmVQQ01PZmZzZXQsICJJbnRl
Z2VyIHVuZGVyZmxvdyBpbiBHZXRCdWZmZXJlZCIpOwotCisgIG5zVEFycmF5PG5zQnl0ZVJhbmdl
PiByYW5nZXM7CisgIGlmIChOU19GQUlMRUQobURlY29kZXItPkdldEN1cnJlbnRTdHJlYW0oKS0+
R2V0Q2FjaGVkUmFuZ2VzKHJhbmdlcykpKSB7CisgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7
CisgIH0KKyAgZm9yIChQUlVpbnQzMiBpbmRleCA9IDA7IGluZGV4IDwgcmFuZ2VzLkxlbmd0aCgp
OyBpbmRleCsrKSB7CisgICAgUFJJbnQ2NCBzdGFydE9mZnNldCA9IE5TX01BWChtV2F2ZVBDTU9m
ZnNldCwgcmFuZ2VzW2luZGV4XS5tU3RhcnQpOworICAgIFBSSW50NjQgZW5kT2Zmc2V0ID0gTlNf
TUFYKG1XYXZlUENNT2Zmc2V0LCByYW5nZXNbaW5kZXhdLm1FbmQpOworICAgIE5TX0FTU0VSVElP
TihlbmRPZmZzZXQgPiBzdGFydE9mZnNldCwgIlNob3VsZCBoYXZlIG5vbi16ZXJvIHNpemVkIGJ1
ZmZlcmVkIHJhbmdlISIpOwogICAgIGFCdWZmZXJlZC0+QWRkKEJ5dGVzVG9UaW1lKHN0YXJ0T2Zm
c2V0IC0gbVdhdmVQQ01PZmZzZXQpLAogICAgICAgICAgICAgICAgICAgIEJ5dGVzVG9UaW1lKGVu
ZE9mZnNldCAtIG1XYXZlUENNT2Zmc2V0KSk7CiAKLSAgICBzdGFydE9mZnNldCA9IG1EZWNvZGVy
LT5HZXRDdXJyZW50U3RyZWFtKCktPkdldE5leHRDYWNoZWREYXRhKGVuZE9mZnNldCk7CiAgIH0K
ICAgcmV0dXJuIE5TX09LOwogfQogCiBQUkJvb2wKIG5zV2F2ZVJlYWRlcjo6UmVhZEFsbChjaGFy
KiBhQnVmLCBQUkludDY0IGFTaXplLCBQUkludDY0KiBhQnl0ZXNSZWFkKQogewogICBQUlVpbnQz
MiBnb3QgPSAwOwo=
</data>
<flag name="review"
          id="435020"
          type_id="937"
          status="+"
          setter="kinetik"
    />
          </attachment>


    </bug>

</bugzilla>