Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Overcoming the Challenges of Integrating an EPUB Viewer into a Modern Android App

Bing
September 24, 2023
74

Overcoming the Challenges of Integrating an EPUB Viewer into a Modern Android App

Epub is an open standard, digital publication format that is used to distribute electronic books. We can take use of some Epub SDKs to display an Epub Viewer in Android APP.

In a Modern Android APP, developers can use AndroidView in Compose to display Epub Viewer from a SDK. However, to make the Epub Viewer work smoothly and interact well with compose view (such as a controller composable above the viewer) still have much challenges.

In this talk, I will explain a modern android structure for importing an Epub Viewer. And also for other AndroidView components, how to avoid recomposition, handle data flow and other issues.

Intended Audience:
People Who
* Want to develop Epub viewers
* Want to develop AndroidView in Compose
* Have developed AndroidView in Compose beforehand
* Want know handling both AndroidView and Compose

Bing

September 24, 2023
Tweet

Transcript

  1. ʫ Ɣ ʴˡˢˣ˘ˡ˦˧˔ˡ˗˔˥˗˙ˢ˥˘ʵˢˢ˞˗˜˦˧˥˜˕˨˧˜ˢˡ Ɣ ˆ˨ˣˣˢ˥˧˘˗˕ˬ˔˪˜˗˘˥˔ˡ˚˘ˢ˙˗˘˩˜˖˘˦ Ɣ ˆ˨ˣˣˢ˥˧˙ˢ˥ʥ˧ˬˣ˘˦ˢ˙˟˔ˬˢ˨˧ ż ˅˘˙˟ˢ˪˔˕˟˘ʭ˧˘˫˧ʠ˕˔˦˘˗˕ˢˢ˞˦ ż

    ʹ˜˫˘˗ʭˣ˜˖˧˨˥˘ʠ˕˔˦˘˗˕ˢˢ˞˦ Ɣ ˁ˘˪˘˦˧˩˘˥˦˜ˢˡʦʡʦ˜˦˥˘˟˘˔˦˘˗ˢˡˀ˔ˬʥʨʟʥʣʥʦ ʸ˃ˈʵʼˡ˧˥ˢ˗˨˖˧˜ˢˡ ˊ˛˔˧˜˦ʸ˃ˈʵʲ
  2. ˆ˔˩˘˗˔˧˔˧ˢ˦˨˥˩˜˩˘ʴˣˣ ˖˟ˢ˦˨˥˘ Ɣ ʿ˔˦˧˥˘˔˗˜ˡ˗˘˫ Ɣ ʿ˔˦˧˦˘˧˧˜ˡ˚˩˔˟˨˘˦ Ɣ ʶ˔˖˛˘ ʤʦ 8,/D\HU

    'RPDLQ/D\HU 5HSRVLWRULHV ʷ˔˧˔ʿ˔ˬ˘˥ 5RRP'DWDEDVH ˆ˧˥˨˖˧˨˥˘ʼˡ˧˥ˢ˗˨˖˧˜ˢˡ ʷ˔˧˔ʿ˔ˬ˘˥
  3. Ɣ ʼˠˣˢ˥˧ʸ˃ˈʵˆʷʾ Ɣ ˅˘ˡ˗˘˥˜ˡ˚ʸ˃ˈʵ ˉ˜˘˪˘˥˔ˡ˗ˢ˧˛˘˥ ʶˢˠˣˢ˦˔˕˟˘˦ ʤʨ 'RPDLQ/D\HU 'DWD/D\HU (SXE9LHZHU

    &RPSRVDEOH 9LHZ0RGHO ˈʼʿ˔ˬ˘˥ (SXE6'. ˆ˧˥˨˖˧˨˥˘ʼˡ˧˥ˢ˗˨˖˧˜ˢˡ ˈʼʿ˔ˬ˘˥
  4. ʥʧ IDFWRU\ ^IDFWRU\&RQWH[W!  %RRN9LHZHU5HIORZDEOH IDFWRU\&RQWH[WXL'DWDERRN&RGH XL'DWDUHDO)RQW6L]H DSSO\^ LQLW YLHZHU5HI

    :HDN5HIHUHQFH WKLV VHW%RRN3DWK XL'DWDERRN3DWK VHW&RQWHQW3URYLGHU XL'DWDERRN3URYLGHU VHW6WDUW3RVLWLRQ,Q%RRN XL'DWDLQLWLDO3RVLWLRQ,Q%RRN OLVWHQHUV VHW/RDGLQJ/LVWHQHU^ LI LV,QLW/RDGLQJQRW ^ FXUUHQW2Q/RDGLQJ6WDWH&KDQJHLQYRNH LW ` ` 
  5. IDFWRU\ ^IDFWRU\&RQWH[W!  %RRN9LHZHU5HIORZDEOH IDFWRU\&RQWH[WXL'DWDERRN&RGH XL'DWDUHDO)RQW6L]H DSSO\^ LQLW YLHZHU5HI :HDN5HIHUHQFH

    WKLV VHW%RRN3DWK XL'DWDERRN3DWK VHW&RQWHQW3URYLGHU XL'DWDERRN3URYLGHU VHW6WDUW3RVLWLRQ,Q%RRN XL'DWDLQLWLDO3RVLWLRQ,Q%RRN OLVWHQHUV VHW/RDGLQJ/LVWHQHU^ LI LV,QLW/RDGLQJQRW ^ FXUUHQW2Q/RDGLQJ6WDWH&KDQJHLQYRNH LW ` `  ʥʨ XVHUHPHPEHU8SGDWH6WDWH^` LIWULJJHULQJVWDWH ˇ˜ˣ
  6. ʥʩ Ɣ ˇ˛˘˨ˣ˗˔˧˘˕˟ˢ˖˞˖˔ˡ˕˘˥˨ˡˠ˨˟˧˜ˣ˟˘˧˜ˠ˘˦ʛˢˡ˧˛˘ˈʼ ˧˛˥˘˔˗˔˦˪˘˟˟ʜ˗˨˘˧ˢ˥˘˖ˢˠˣˢ˦˜˧˜ˢˡ Ɣ ˈ˦˘˜˧˙ˢ˥ ż ˂˕˦˘˥˩˘˦˧˔˧˘˖˛˔ˡ˚˘˦˪˛˜˖˛˖˔˨˦˘˧˛˘˪˛ˢ˟˘˩˜˘˪ ˥˘˖ˢˠˣˢ˦˘ Ɣ

    ʴ˩ˢ˜˗˨˦˜ˡ˚˜˧˙ˢ˥ ż ˃˔˥˧˜˔˟˩˜˘˪˖˛˔ˡ˚˘˦ ż ʸ˩˘ˡ˧˛˔ˡ˗˟˜ˡ˚ ʼˠˣ˟˘ˠ˘ˡ˧˔˧˜ˢˡ˔ˡ˗ʶ˛˔˟˟˘ˡ˚˘˦ ʴˡ˗˥ˢ˜˗ˉ˜˘˪ ˈˡ˗˘˥˦˧˔ˡ˗˜ˡ˚˨ˣ˗˔˧˘ˮʡʡʡ˰
  7. ʥʪ XSGDWH ^YLHZ! XSGDWH^`ZLOOEHFDOOHGGLUHFWO\DIWHUIDFWRU\^`VNLS WKHILUVWFDOOIRUEHWWHUSHUIRUPDQFHLI LV,QLW/RDGLQJQRW ^ YLHZVHW)RQW6L]H,I1RW/RDGLQJ XL'DWDUHDO)RQW6L]H `

    ` ʼˠˣ˟˘ˠ˘ˡ˧˔˧˜ˢˡ˔ˡ˗ʶ˛˔˟˟˘ˡ˚˘˦ ʴˡ˗˥ˢ˜˗ˉ˜˘˪ ˂˕˦˘˥˩˘˩˜˘˪˦˧˔˧˘˔ˡ˗ˠ˔˞˘˧˛˘˪˛ˢ˟˘˩˜˘˪˥˘˖ˢˠˣˢ˦˘
  8. Ɣ ʷ˜˦ˣˢ˦˔˕˟˘ʸ˙˙˘˖˧ ż ʿ˜˙˘˖ˬ˖˟˘˔˪˔˥˘˙˨ˡ˖˧˜ˢˡ Ɣ ʿ˔˨ˡ˖˛˘˗ʸ˙˙˘˖˧ ż ʸ˩˘ˡ˧˛˔ˡ˗˟˘˥ ż ˃˔˥˧˜˔˟˩˜˘˪˖˛˔ˡ˚˘˦

    ʥʬ ʼˠˣ˟˘ˠ˘ˡ˧˔˧˜ˢˡ˔ˡ˗ʶ˛˔˟˟˘ˡ˚˘˦ ʴˡ˗˥ˢ˜˗ˉ˜˘˪ ˈˡ˗˘˥˦˧˔ˡ˗˜ˡ˚ˢ˧˛˘˥ˆ˜˗˘ʠ˘˙˙˘˖˧˦
  9. ʦʣ 'LVSRVDEOH(IIHFW OLIHF\FOH2ZQHU ^ YDOREVHUYHU /LIHF\FOH(YHQW2EVHUYHU^BHYHQW! ZKHQ HYHQW ^ /LIHF\FOH(YHQW21B67$57!

    YLHZHU5HIJHW "DFWLYLW\6WDWH 6N\$FWLYLW\6WDWH6WDUWHG ª ` ` OLIHF\FOH2ZQHUOLIHF\FOHDGG2EVHUYHU REVHUYHU RQ'LVSRVH^ OLIHF\FOH2ZQHUOLIHF\FOHUHPRYH2EVHUYHU REVHUYHU ` `
  10. ʦʤ ERRN9LHZHU6WDWHHYHQWVILUVW2U1XOO "OHW^HYHQW! /DXQFKHG(IIHFW HYHQWLG ^ ZKHQ HYHQW ^ LV%RRN9LHZHU(YHQW-XPS7R,QGH[

    !!^ LI YLHZHU5HIJHW "LV3DJLQJ"QRW  WUXH ^ YLHZHU5HIJHW "JRWR3DJH%\1DY3RLQW HYHQWLQGH[ DV1DY3RLQW ` ` ª ` ERRN9LHZHU6WDWHRQ(YHQW&RQVXPHHPLW HYHQW ` `
  11. ʦʧ 5RZ  ^ 7H[W  WH[W ^GLVSOD\3URJUHVVWR,QW `GLVSOD\0D[ 

     6OLGHU YDOXH GLVSOD\3URJUHVV RQ9DOXH&KDQJH ^SURJUHVV! GLVSOD\3URJUHVV SURJUHVV ` RQ9DOXH&KDQJH)LQLVKHG ^  `   `
  12. 9LHZ0RGHO ʧʣ ˆ˧˔˧˘ ˈʼʼˡˣ˨˧ ˃˟˨˦ʭʴʶ˟˘˔˥ˆ˧˥˨˖˧˨˥˘˜ˡˆ˔ˠˣ˟˘ʴˣˣ ˈʼʼˡˣ˨˧ ˆ˧˔˧˘ Ɣ ʶˢˡ˧˥˔˖˧ ż

    ʶ˟˘˔˥˟˜˦˧ˢ˙ˈʼ˜ˡˣ˨˧ ˔ˡ˗˦˧˔˧˘ Ɣ ʸ˩˘ˡ˧ʻ˔ˡ˗˟˘˥ ż ʶˢˠˠˢˡ˙˨ˡ˖˧˜ˢˡ˧ˢ ˦˖˛˘˗˨˟˘ʙ˖ˢˡ˦˨ˠ˘ ˘˩˘ˡ˧˦ 8,(OHPHQW ˈʼʿ˔ˬ˘˥ (YHQW+DQGOHU &RQWUDFW
  13. ʧʥ ʴ˖ˢˠˣ˟˘˧˘ʸˣ˨˕ʴˣˣ˛˔˦ ʨ˱ʤʣ˧˜ˠ˘˦˦˧˔˧˘˧˛˔ˡ˕˘˟ˢ˪Ϩ ˜˦ʿˢ˔˗˜ˡ˚ ˘˥˥ˢ˥ ˜˦ʹ˜˫˘˗˂˥˅˘˙˟ˢ˪˔˕˟˘ʿ˔ˬˢ˨˧ ˕ˢˢ˞˃˔˧˛ ˜ˡ˜˧˜˔˟˃ˢ˦˜˧˜ˢˡʵˢˢ˞ ˕ˢˢ˞ʶˢ˗˘ ˙ˢˡ˧ˆ˜˭˘

    ˜˦ˆ˛ˢ˪ʶˢˡ˧˥ˢ˟˟˘˥ ˜˦ˇ˂ʶˉ˜˦˜˕˟˘ ˖˨˥˥˘ˡ˧ʼˡ˗˘˫ ˇˢ˧˔˟˃˔˚˘ ˆ˛ˢ˪ˇˢ˔˦˧ ˅˘ˤ˨˘˦˧ʽ˨ˠˣˇˢ˃˔˚˘ ˅˘ˤ˨˘˦˧ʽ˨ˠˣˇˢʼˡ˗˘˫
  14. ʧʦ ʴ˖ˢˠˣ˟˘˧˘ʸˣ˨˕ʴˣˣ˛˔˦ ʨ˱ʤʣ˧˜ˠ˘˦˦˧˔˧˘˧˛˔ˡ˕˘˟ˢ˪Ϩ ˜˦ʿˢ˔˗˜ˡ˚ ˘˥˥ˢ˥ ˜˦ʹ˜˫˘˗˂˥˅˘˙˟ˢ˪˔˕˟˘ʿ˔ˬˢ˨˧ ˕ˢˢ˞˃˔˧˛ ˜ˡ˜˧˜˔˟˃ˢ˦˜˧˜ˢˡʵˢˢ˞ ˕ˢˢ˞ʶˢ˗˘ ˙ˢˡ˧ˆ˜˭˘

    ˜˦ˆ˛ˢ˪ʶˢˡ˧˥ˢ˟˟˘˥ ˜˦ˇ˂ʶˉ˜˦˜˕˟˘ ˖˨˥˥˘ˡ˧ʼˡ˗˘˫ ˇˢ˧˔˟˃˔˚˘ ˆ˛ˢ˪ˇˢ˔˦˧ ˅˘ˤ˨˘˦˧ʽ˨ˠˣˇˢ˃˔˚˘ ˅˘ˤ˨˘˦˧ʽ˨ˠˣˇˢʼˡ˗˘˫ ʻˢ˪˧ˢˠ˔ˡ˔˚˘˧˛˘ˠʲ
  15. ʧʧ ʵ˔˖˞˧ˢ˖˛˘˖˞ˢ˨˥˚ˢ˔˟˦Ϩ Ɣ ˆ˜ˡ˚˟˘˦ˢ˨˥˖˘ˢ˙˧˥˨˧˛ Ɣ ˈˡ˜˗˜˥˘˖˧˜ˢˡ˔˟ʷ˔˧˔ʹ˟ˢ˪ʛˈʷʹʜ Ɣ ˆ˘ˣ˔˥˔˧˜ˢˡˢ˙˖ˢˡ˖˘˥ˡ˦ Ɣ ʵ˘˦˧˃˥˔˖˧˜˖˘ʛ˥˘˙˘˥ʜ

    ż ˌˢ˨˦˛ˢ˨˟˗˛ˢ˜˦˧ˈʼ˦˧˔˧˘˧ˢ˧˛˘˟ˢ˪˘˦˧˖ˢˠˠˢˡ˔ˡ˖˘˦˧ˢ˥ ˕˘˧˪˘˘ˡ˔˟˟˧˛˘˖ˢˠˣˢ˦˔˕˟˘˦˧˛˔˧˥˘˔˗˔ˡ˗˪˥˜˧˘˜˧ʡ ż ˌˢ˨˦˛ˢ˨˟˗˞˘˘ˣ˦˧˔˧˘˖˟ˢ˦˘˦˧˧ˢ˪˛˘˥˘˜˧˜˦˖ˢˡ˦˨ˠ˘˗ʡ
  16. ʧʨ Ɣ 5HRUJDQL]HVWDWHDQGHYHQWV ż 9LHZ0RGHOVFRSH ż 8,VFRSH Ɣ 6WDWHZLWK9LHZ0RGHOVFRSH ż

    0DQDJHLQ9LHZ0RGHODOUHDG\KDYHDSHUIHFWVWUXFWXUH Ɣ 6WDWHZLWK8,VFRSH ż 0DQDJHDSDUWIURPFRPSRVDEOHV ʶˢˡ˦˜˗˘˥˔˧˜ˢˡ˦Ϩ
  17. ʧʩ Ɣ ˆ˧˔˧˘˪˜˧˛ˉ˜˘˪ˀˢ˗˘˟˦˖ˢˣ˘ ż ʶˢˡˡ˘˖˧˘˗˪˜˧˛ˢ˧˛˘˥ ˟˔ˬ˘˥˦ ż ʿ˜˙˘˖ˬ˖˟˘˔˪˔˥˘ˡ˘˦˦ ż ˊ˜˧˛˕˨˦˜ˡ˘˦˦˟ˢ˚˜˖

    Ɣ ˆ˧˔˧˘˪˜˧˛ˈʼ˦˖ˢˣ˘ ż ʼ˦ˢ˟˔˧˘˗˜ˡˈʼ˘˟˘ˠ˘ˡ˧ ˦˖ˢˣ˘ ż ˆ˜ˠˣ˟˘ ż ˊ˜˧˛˦˜ˠˣ˟˘ˈʼ˟ˢ˚˜˖ 3ODLQ6WDWH+ROGHU 9LHZ0RGHO ʼˠˣ˟˘ˠ˘ˡ˧˔˧˜ˢˡ˔ˡ˗ʶ˛˔˟˟˘ˡ˚˘˦ ˆˢ˟˨˧˜ˢˡ
  18. ʧʪ ˜˦ʿˢ˔˗˜ˡ˚ ˘˥˥ˢ˥ ˜˦ʹ˜˫˘˗˂˥˅˘˙˟ˢ˪˔˕˟˘ʿ˔ˬˢ˨˧ ˕ˢˢ˞˃˔˧˛ ˜ˡ˜˧˜˔˟˃ˢ˦˜˧˜ˢˡʵˢˢ˞ ˕ˢˢ˞ʶˢ˗˘ ˙ˢˡ˧ˆ˜˭˘ ˆ˛ˢ˪ˇˢ˔˦˧ ˘˧˖ʡ

    ˜˦ˆ˛ˢ˪ʶˢˡ˧˥ˢ˟˟˘˥ ˜˦ˇ˂ʶˉ˜˦˜˕˟˘ ˖˨˥˥˘ˡ˧ʼˡ˗˘˫ ˇˢ˧˔˟˃˔˚˘ ˅˘ˤ˨˘˦˧ʽ˨ˠˣˇˢ˃˔˚˘ ˅˘ˤ˨˘˦˧ʽ˨ˠˣˇˢʼˡ˗˘˫ ˘˧˖ʡ 3ODLQ6WDWH+ROGHU 9LHZ0RGHO
  19. ʧʬ GHILQHWKH8, VWDWH 'DWD LQWHUQDOFODVV0XWDEOH8L'DWD8L'DWD^ RYHUULGHYDULV/RDGLQJ%RROHDQE\PXWDEOH6WDWH2I IDOVH ` LQ9LHZ0RGHO SULYDWHYDOBXL'DWD

    0XWDEOH8L'DWD BRQ/RDGLQJ6WDWH&KDQJHRQ(DFK^LV/RDGLQJ! BXL'DWDLV/RDGLQJ LV/RDGLQJ__LV3UHSDULQJ'DWD `ODXQFK,Q YLHZ0RGHO6FRSH LQ8,FRPSRVDEOH LI XL'DWDLV/RDGLQJ ^ /RDGLQJ6FUHHQ `
  20. ʨʣ GHILQHWKH8, VWDWH 'DWD LQWHUQDOFODVV0XWDEOH8L'DWD8L'DWD^ RYHUULGHYDULV/RDGLQJ%RROHDQE\PXWDEOH6WDWH2I IDOVH ` LQ9LHZ0RGHO SULYDWHYDOBXL'DWD

    0XWDEOH8L'DWD BRQ/RDGLQJ6WDWH&KDQJHRQ(DFK^LV/RDGLQJ! BXL'DWDLV/RDGLQJ LV/RDGLQJ__LV3UHSDULQJ'DWD `ODXQFK,Q YLHZ0RGHO6FRSH LQ8,FRPSRVDEOH LI XL'DWDLV/RDGLQJ ^ /RDGLQJ6FUHHQ `
  21. ʨʤ GHILQHWKH8, VWDWH 'DWD LQWHUQDOFODVV0XWDEOH8L'DWD8L'DWD^ RYHUULGHYDULV/RDGLQJ%RROHDQE\PXWDEOH6WDWH2I IDOVH ` LQ9LHZ0RGHO SULYDWHYDOBXL'DWD

    0XWDEOH8L'DWD BRQ/RDGLQJ6WDWH&KDQJHRQ(DFK^LV/RDGLQJ! BXL'DWDLV/RDGLQJ LV/RDGLQJ__LV3UHSDULQJ'DWD `ODXQFK,Q YLHZ0RGHO6FRSH LQ8,FRPSRVDEOH LI XL'DWDLV/RDGLQJ ^ /RDGLQJ6FUHHQ `
  22. ʨʦ #6WDEOH FODVV%RRN9LHZHU6WDWH'DWD^ YDULV72&9LVLEOH%RROHDQE\PXWDEOH6WDWH2I IDOVH  FRPSDQLRQREMHFW^ YDO6DYHU UXQ^` `

    ` #6WDEOH FODVV%RRN9LHZHU6WDWH FRURXWLQH6FRSH&RURXWLQH6FRSH YDOVWDWH'DWD%RRN9LHZHU6WDWH'DWD ^ IXQXSGDWH7RF9LVLEOH YLVLEOH%RROHDQ ^  VWDWH'DWDLV72&9LVLEOH YLVLEOH ` 
  23. ʨʧ #6WDEOH FODVV%RRN9LHZHU6WDWH'DWD^ YDULV72&9LVLEOH%RROHDQE\PXWDEOH6WDWH2I IDOVH  FRPSDQLRQREMHFW^ YDO6DYHU UXQ^` `

    ` #6WDEOH FODVV%RRN9LHZHU6WDWH FRURXWLQH6FRSH&RURXWLQH6FRSH YDOVWDWH'DWD%RRN9LHZHU6WDWH'DWD ^ IXQXSGDWH7RF9LVLEOH YLVLEOH%RROHDQ ^  VWDWH'DWDLV72&9LVLEOH YLVLEOH ` 
  24. (SXE9LHZHU6XFFHVV&RQWHQW (SXE9LHZHU6FUHHQ (UURU&RQWHQW (SXE7RS&RQWHQW &RQWUROOHU 72& HWF ʨʩ 9LHZ0RGHO6WDWH %RRN9LHZHU6WDWH

    (SXE9LHZHU&RQWHQW ˊ˛˘˥˘˧ˢʻˢ˜˦˧ˆ˧˔˧˘ 9LHZ0RGHO6WDWH 9LHZ0RGHO6WDWH %RRN9LHZHU6WDWH %RRN9LHZHU6WDWH
  25. ʨʪ (38%9LHZHU 2WKHU &RPSRVDEOHV« 6WDWH+ROGHU 9LHZ0RGHO ˆ˧˔˧˘ ˖˔˟˟˨ˣ˗˔˧˘ˮ˰ ˈʼ˜ˡˣ˨˧ ˆ˧˔˧˘

    ˆ˧˔˧˘ ʸ˩˘ˡ˧ ˆ˧˔˧˘ ˙˔˖˧ˢ˥ˬˮ˟˜˦˧˘ˡ˘˥˰ ʸ˩˘ˡ˧˧˥˜˚˚˘˥ ˈʼ˜ˡˣ˨˧ (YHQW+DQGOHU (YHQW+DQGOHU ˇ˛˘˂˩˘˥˔˟˟ˆ˧˔˧˘ˆ˧˥˨˖˧˨˥˘
  26. ʩʥ 6WDWH7\SH /RJLF7\SH 6XUYLYDO &RQILJXUDWLRQ &KDQJHV &RPSOH[LW\ 9LHZ0RGHO 6FUHHQ8, 6WDWH

    %XVLQHVV ORJLF <HV &RPSOH[VXSSRUW ODUJHGDWD 3ODLQ6WDWH +ROGHU&ODVV 8,(OHPHQW 6WDWH 8,ORJLF 2SWLRQDOXVH UHPHPEHU6DYHDEOH 6LPSOH :LWKLQ FRPSRVDEOH 8,(OHPHQW 6WDWH 8,ORJLF 2SWLRQDOXVH UHPHPEHU6DYHDEOH 9HU\6LPSOH ʶˢˠˣ˔˥˜˦ˢˡ˪˜˧˛ˆ˧˔˧˘ʻˢ˟˗˘˥ 䠆˞˘˘ˣ˦˧˔˧˘˖˟ˢ˦˘˦˧˧ˢ˪˛˘˥˘˜˧˜˦˖ˢˡ˦˨ˠ˘˗ʡ
  27. ʩʧ Ɣ (38%6'. ż 0DLQWDLQVRQHLQGH[YDOXHLQVLGH Ɣ 6WDWH+ROGHU ż +DQGOHVLQGH[VWDWHV\QFZLWK6'.¶VYDOXH Ɣ

    8,HOHPHQWV ż (38%9LHZHU ż &RPSRVDEOH6HHNEDU ʸ˫˔ˠˣ˟˘ʭʶ˨˥˥˘ˡ˧ʼˡ˗˘˫
  28. ʩʩ ˈ˦˘ʶ˔˦˘ʥʭˈ˦˘˥ʴ˗˝˨˦˧˦˃˥ˢ˚˥˘˦˦ˊ˜˧˛˜ˡˆ˘˘˞˕˔˥ (38%9LHZHU 6HHNEDU 6'. 6WDWH+ROGHU LQGH[ VWDWHLQGH[ ʦʡʴ˃ʼ˖˔˟˟ʟ˝˨ˠˣˇˢʛʡʡʡʜ ʧʡˆʷʾ˜ˡ˗˘˫˖˛˔ˡ˚˘

    ʨʡʿ˜˦˧˘ˡ˘˥˧˥˜˚˚˘˥˘˗ʟ ʠʱ˨ˣ˗˔˧˘˦˧˔˧˘ ʩʡˈʼˢ˕˦˘˥˩˘˦ ˦˧˔˧˘˖˛˔ˡ˚˘ ʥʡˈʼʸ˩˘ˡ˧˧˥˜˚˚˘˥˘˗ʭ ˅˘ˤ˨˘˦˧˃˔˚˜ˡ˚ ʤʡˈ˦˘˥˗˥˔˚˦ˣ˥ˢ˚˥˘˦˦ ʠʱˢˡˆ˘˘˞˕˔˥ʶ˛˔ˡ˚˘ʹ˜ˡ˜˦˛˘˗ˮ˰
  29. Ɣ ʶˢˠˣˢ˦˔˕˟˘ ż ʶˢˡ˙˜˚˨˥˘ˀ˔ˡ˜˙˘˦˧ʖ˔ˡ˗˥ˢ˜˗ʭ˖ˢˡ˙˜˚ʶ˛˔ˡ˚˘˦˧ˢ ˔˩ˢ˜˗ʸ˃ˈʵˉ˜˘˪˘˥˥˘˦˧˔˥˧˗˨˥˜ˡ˚˥ˢ˧˔˧˜ˢˡ Ɣ ʹˢˡ˧ˆ˧ˬ˟˘ ż ˁˢ˧˘ʽ˔ˣ˔ˡ˘˦˘˙ˢˡ˧˦˧ˬ˟˘˖˔ˡ˕˘˧˥˜˖˞ˬ Ɣ

    ʻ˔ˡ˗˟˘ʿ˔˥˚˘ʵˢˢ˞ʹ˜˟˘ ż ˀ˔˞˘˨˦˘ˢ˙ʶ˔˖˛˘ ż ˆ˞˜ˣ˟ˢˡ˚ʠ˧˜ˠ˘ʴˡ˔˟ˬ˦˜˦˜˙ˡ˘˘˗˘˗ ʪʣ ˂˧˛˘˥ˇ˜ˣ˦˔ˡ˗ʴ˗˩˔ˡ˖˘˗ʹ˘˔˧˨˥˘˦ ʴ˕ˢ˨˧ˇ˜ˣ˦