##      Package LibPath Version Priority Depends Imports LinkingTo Suggests
##      Enhances License License_is_FOSS License_restricts_use OS_type Archs
##      MD5sum NeedsCompilation Built

4.1. Giới thiệu chương

## Kích thước bộ dữ liệu: 2497 dòng và 11 cột
## tibble [2,497 × 11] (S3: tbl_df/tbl/data.frame)
##  $ Date    : POSIXct[1:2497], format: "2015-01-05" "2015-01-06" ...
##  $ VCB     : num [1:2497] 16822 17929 17718 18245 19458 ...
##  $ MBB     : num [1:2497] 4270 4401 4434 4467 4697 ...
##  $ BID     : num [1:2497] 8197 8388 8642 8642 9214 ...
##  $ CTG     : num [1:2497] 9134 9200 9463 9266 9529 ...
##  $ SHB     : num [1:2497] 3922 3984 4181 4230 4230 ...
##  $ ACB     : num [1:2497] 3780 3820 3985 3989 4042 ...
##  $ STB     : num [1:2497] 13462 13692 13769 13923 14231 ...
##  $ EIB     : num [1:2497] 10667 10833 11000 10917 11167 ...
##  $ VN_INDEX: num [1:2497] 550 552 553 570 574 ...
##  $ RF_daily: num [1:2497] 0.000182 0.000183 0.000183 0.000183 0.00018 ...
## # A tibble: 6 × 9
##   Date                 ret_VCB  ret_MBB ret_BID  ret_CTG ret_SHB  ret_ACB
##   <dttm>                 <dbl>    <dbl>   <dbl>    <dbl>   <dbl>    <dbl>
## 1 2015-01-05 00:00:00 NA       NA       NA      NA       NA      NA      
## 2 2015-01-06 00:00:00  0.0637   0.0303   0.0230  0.00717  0.0156  0.0106 
## 3 2015-01-07 00:00:00 -0.0118   0.00742  0.0298  0.0282   0.0482  0.0422 
## 4 2015-01-08 00:00:00  0.0293   0.00737  0      -0.0211   0.0117  0.00108
## 5 2015-01-09 00:00:00  0.0644   0.0502   0.0641  0.0280   0       0.0130 
## 6 2015-01-12 00:00:00  0.00809 -0.00703  0.0667  0.0137   0.0455  0.0128 
## # ℹ 2 more variables: ret_STB <dbl>, ret_EIB <dbl>

4.2. Thống kê mô tả

## # A tibble: 2 × 9
##   variable     n     mean       sd    skew  kurt   min      p50       max
##   <chr>    <dbl>    <dbl>    <dbl>   <dbl> <dbl> <dbl>    <dbl>     <dbl>
## 1 RF_daily  2496   0.0001   0.0001 -0.119  -1.17    0    0.0001    0.0002
## 2 VN_INDEX  2497 978.     261.     -0.0058 -0.94  522. 983.     1529.
## # A tibble: 10 × 8
##    asset        n   mean_ret   sd_ret skew_ret kurt_ret   mean_ex   sd_ex
##    <chr>    <dbl>      <dbl>    <dbl>    <dbl>    <dbl>     <dbl>   <dbl>
##  1 ACB       2496   0.000769   0.0191 -1.02       12.4   0.000651  0.0191
##  2 BID       2496   0.000610   0.0228 -0.198       2.37  0.000500  0.0228
##  3 CTG       2496   0.000569   0.0217 -0.150       2.30  0.000461  0.0217
##  4 EIB       2496   0.000238   0.0220 -0.0810      3.85  0.000130  0.0220
##  5 MBB       2496   0.000654   0.0193 -0.771       7.23  0.000546  0.0194
##  6 SHB       2496   0.000385   0.0251 -0.0359      4.27  0.000277  0.0251
##  7 STB       2496   0.000404   0.0236  0.00696     1.47  0.000289  0.0236
##  8 VCB       2496   0.000677   0.0181 -0.259       4.76  0.000558  0.0181
##  9 RF_daily  2496   0.0001     0.0001 -0.119      -1.17 NA        NA     
## 10 VN_INDEX  2497 978.       261.     -0.0058     -0.94 NA        NA
##         ret_VCB ret_MBB ret_BID ret_CTG ret_SHB ret_ACB ret_STB ret_EIB
## ret_VCB   1.000   0.494   0.542   0.561   0.085   0.155   0.398   0.181
## ret_MBB   0.494   1.000   0.608   0.698   0.193   0.293   0.599   0.244
## ret_BID   0.542   0.608   1.000   0.708   0.138   0.220   0.498   0.219
## ret_CTG   0.561   0.698   0.708   1.000   0.146   0.250   0.568   0.284
## ret_SHB   0.085   0.193   0.138   0.146   1.000   0.181   0.189   0.108
## ret_ACB   0.155   0.293   0.220   0.250   0.181   1.000   0.261   0.126
## ret_STB   0.398   0.599   0.498   0.568   0.189   0.261   1.000   0.267
## ret_EIB   0.181   0.244   0.219   0.284   0.108   0.126   0.267   1.000

4.3. Ước lượng Camp

## # A tibble: 8 × 9
##   asset  alpha alpha_ci           beta beta_ci    p_alpha p_beta r_squared     n
##   <chr>  <dbl> <chr>             <dbl> <chr>        <dbl>  <dbl>     <dbl> <int>
## 1 VCB   0.0004 [-0.0002, 0.001]  0.788 [0.7334, …   0.231      0    0.246   2495
## 2 MBB   0.0003 [-0.0003, 0.0009] 1.07  [1.0214, …   0.320      0    0.399   2495
## 3 BID   0.0002 [-0.0005, 0.001]  1.10  [1.0329, …   0.518      0    0.301   2495
## 4 CTG   0.0002 [-0.0005, 0.0009] 1.14  [1.0753, …   0.566      0    0.356   2495
## 5 SHB   0.0002 [-0.0008, 0.0011] 0.489 [0.4042, …   0.738      0    0.049   2495
## 6 ACB   0.0005 [-0.0002, 0.0012] 0.525 [0.4629, …   0.144      0    0.0984  2495
## 7 STB   0      [-0.0007, 0.0008] 1.15  [1.0802, …   0.948      0    0.307   2495
## 8 EIB   0      [-0.0008, 0.0009] 0.479 [0.4057, …   0.964      0    0.0615  2495

Phương trình CAPM cho từng mã

Phương trình tổng quát:

\[ R_{i,t} - R_{f,t} = \hat{\alpha}_i + \hat{\beta}_i \,\big( R_{m,t} - R_{f,t} \big) + \varepsilon_{i,t} \]

VCB
\[ R_{\text{VCB},t} - R_{f,t} = 0.0004 + 0.7876 \,\big( R_{m,t} - R_{f,t} \big) \]

MBB
\[ R_{\text{MBB},t} - R_{f,t} = 0.0003 + 1.0731 \,\big( R_{m,t} - R_{f,t} \big) \]

BID
\[ R_{\text{BID},t} - R_{f,t} = 0.0002 + 1.0987 \,\big( R_{m,t} - R_{f,t} \big) \]

CTG
\[ R_{\text{CTG},t} - R_{f,t} = 0.0002 + 1.1352 \,\big( R_{m,t} - R_{f,t} \big) \]

SHB
\[ R_{\text{SHB},t} - R_{f,t} = 0.0002 + 0.4887 \,\big( R_{m,t} - R_{f,t} \big) \]

ACB
\[ R_{\text{ACB},t} - R_{f,t} = 0.0005 + 0.5253 \,\big( R_{m,t} - R_{f,t} \big) \]

STB
\[ R_{\text{STB},t} - R_{f,t} = 0.0000 + 1.1479 \,\big( R_{m,t} - R_{f,t} \big) \]

EIB
\[ R_{\text{EIB},t} - R_{f,t} = 0.0000 + 0.4793 \,\big( R_{m,t} - R_{f,t} \big) \]

4.4. Lợi suất kì vọng Camp và phân loại định giá

## # A tibble: 8 × 13
##   asset  alpha alpha_ci     beta beta_ci p_alpha p_beta r_squared     n mean_ret
##   <chr>  <dbl> <chr>       <dbl> <chr>     <dbl>  <dbl>     <dbl> <int>    <dbl>
## 1 VCB   0.0004 [-0.0002, … 0.788 [0.733…   0.231      0    0.246   2495 0.000677
## 2 MBB   0.0003 [-0.0003, … 1.07  [1.021…   0.320      0    0.399   2495 0.000654
## 3 BID   0.0002 [-0.0005, … 1.10  [1.032…   0.518      0    0.301   2495 0.000610
## 4 CTG   0.0002 [-0.0005, … 1.14  [1.075…   0.566      0    0.356   2495 0.000569
## 5 SHB   0.0002 [-0.0008, … 0.489 [0.404…   0.738      0    0.049   2495 0.000385
## 6 ACB   0.0005 [-0.0002, … 0.525 [0.462…   0.144      0    0.0984  2495 0.000769
## 7 STB   0      [-0.0007, … 1.15  [1.080…   0.948      0    0.307   2495 0.000404
## 8 EIB   0      [-0.0008, … 0.479 [0.405…   0.964      0    0.0615  2495 0.000238
## # ℹ 3 more variables: er_capm <dbl>, gap <dbl>, price_flag <chr>

LS0tCnRpdGxlOiAiVMOgaSBjaMOtbmggMiIKYXV0aG9yOiAiUGjhuqFtIFh1w6JuIEhvYW4gIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jOiB0cnVlCiAgd29yZF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAnNCcKICBwZGZfZG9jdW1lbnQ6CiAgICBsYXRleF9lbmdpbmU6IHhlbGF0ZXgKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAoJZWNobyA9IEZBTFNFLAoJbWVzc2FnZSA9IEZBTFNFLAoJd2FybmluZyA9IEZBTFNFCikKYGBgCgo8c3R5bGU+CmJvZHkgewogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE2cHg7CiAgdGV4dC1hbGlnbjoganVzdGlmeTsKICBsaW5lLWhlaWdodDogMS41Owp9CmgyIHsKICBjb2xvcjogcmVkOwp9CmgzIHsKICBjb2xvcjogZGFya2JsdWU7Cn0KPC9zdHlsZT4KCmBgYHtyfQppbnN0YWxsZWQucGFja2FnZXMoInhsc3giKQpsaWJyYXJ5KG9wZW54bHN4KQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShEVCkKbGlicmFyeShwYW5kZXIpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShza2ltcikKbGlicmFyeShwc3ljaCkKbGlicmFyeShmb3JtYXR0YWJsZSkKbGlicmFyeShodG1sdG9vbHMpCmxpYnJhcnkoRGVzY1Rvb2xzKQpsaWJyYXJ5KGVwaXRvb2xzKQpsaWJyYXJ5KHBST0MpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKCgojIDQuMS4gR2nhu5tpIHRoaeG7h3UgY2jGsMahbmcKCmBgYHtyfQojID09PT0gNC4xIEdJ4buaSSBUSEnhu4ZVIENIxq/GoE5HID09PT0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKCiMgPT09PSA0LjEgR0nhu5pJIFRISeG7hlUgQ0jGr8agTkcgPT09PQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShyZWFkeGwpCgojIDEuIMSQ4buNYyBmaWxlIEV4Y2VsCmhvYW5nYW5hbHlzaXMgPC0gcmVhZF9leGNlbCgiL1VzZXJzL3BoYW14dWFuaG9hbi9Eb2N1bWVudHMvVGllzILMiXUgbHVhzKPMgm4gL8SQacyjbmggZ2lhzIEgdGHMgGkgc2HMiW4gdGHMgGkgY2hpzIFuaCAyL0R1IGxpZXUgY2h1YW4ueGxzeCIpIHw+CiAgYXJyYW5nZShEYXRlKQoKIyAyLiBYZW0gY+G6pXUgdHLDumMgZOG7ryBsaeG7h3UKY2F0KCJLw61jaCB0aMaw4bubYyBi4buZIGThu68gbGnhu4d1OiIsIG5yb3coaG9hbmdhbmFseXNpcyksICJkw7JuZyB2w6AiLCBuY29sKGhvYW5nYW5hbHlzaXMpLCAiY+G7mXRcbiIpCnN0cihob2FuZ2FuYWx5c2lzKQoKIyAzLiBEYW5oIHPDoWNoIG3DoyBj4buVIHBoaeG6v3UgKGxv4bqhaSBi4buPIGPhu5l0IGNo4buJIHPhu5EgJiBSRikKdGlja2VycyA8LSBzZXRkaWZmKG5hbWVzKGhvYW5nYW5hbHlzaXMpLCBjKCJEYXRlIiwgIlZOX0lOREVYIikpCgojIDQuMSDigJQgdMOtbmggbOG7o2kgc3XhuqV0OiBLSMOUTkcgdMOtbmggY2hvIFZOX0lOREVYICYgUkZfZGFpbHkKdGlja2VycyA8LSBzZXRkaWZmKG5hbWVzKGhvYW5nYW5hbHlzaXMpLCBjKCJEYXRlIiwgIlZOX0lOREVYIiwgIlJGX2RhaWx5IikpCgojIENI4buIIHTDrW5oIHJldF8qIGNobyBjw6FjIG3DoyBj4buVIHBoaeG6v3UKcmV0dXJucyA8LSBob2FuZ2FuYWx5c2lzIHw+CiAgbXV0YXRlKGFjcm9zcyhhbGxfb2YodGlja2VycyksCiAgICAgICAgICAgICAgICB+IGxvZygueCAvIGxhZygueCkpLCAubmFtZXMgPSAicmV0X3suY29sfSIpKSB8PgogIHNlbGVjdChEYXRlLCBzdGFydHNfd2l0aCgicmV0XyIpKQoKIyBUw61uaCBybSB2w6AgcmYgUknDik5HIChraMO0bmcgdOG6oW8gcmV0X1ZOX0lOREVYKQpob2FuZ2FuYWx5c2lzIDwtIGhvYW5nYW5hbHlzaXMgfD4KICBtdXRhdGUoCiAgICByZiA9IFJGX2RhaWx5LAogICAgcm0gPSBsb2coVk5fSU5ERVggLyBsYWcoVk5fSU5ERVgpKSwgICAjIGzhu6NpIHN14bqldCB0aOG7iyB0csaw4budbmcKICAgIHJtX2V4Y2VzcyA9IHJtIC0gcmYKICApCgojIDUuIELhuqNuZyBs4bujaSBzdeG6pXQgKDYgZMOybmcgxJHhuqd1KQpoZWFkKHJldHVybnMpCgoKYGBgCgojIDQuMi4gVGjhu5FuZyBrw6ogbcO0IHThuqMKCmBgYHtyfQojID09PT0gNC4yIFRI4buQTkcgS8OKIE3DlCBU4bqiIChraMO0bmcgY+G6p24gaG9hbmdhbmFseXNpc19sb25nIOG7nyA0LjEpID09PT0KbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShlMTA3MSkKbGlicmFyeShnZ3Bsb3QyKQoKIyAoQSkgVGjhu5FuZyBrw6ogbcO0IHThuqMgY2hvIFZOX0lOREVYICYgUkZfZGFpbHkgKGxldmVsLCBraMO0bmcgcGjhuqNpIHJldHVybikKdm5fcmZfZGVzYyA8LSBob2FuZ2FuYWx5c2lzIHw+CiAgZHBseXI6OnNlbGVjdChWTl9JTkRFWCwgUkZfZGFpbHkpIHw+CiAgdGlkeXI6OnBpdm90X2xvbmdlcihldmVyeXRoaW5nKCksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgfD4KICBkcGx5cjo6Z3JvdXBfYnkodmFyaWFibGUpIHw+CiAgZHBseXI6OnN1bW1hcmlzZSgKICAgIG4gICAgPSBzdW0oIWlzLm5hKHZhbHVlKSksCiAgICBtZWFuID0gbWVhbih2YWx1ZSwgbmEucm0gPSBUUlVFKSwKICAgIHNkICAgPSBzZCh2YWx1ZSwgICBuYS5ybSA9IFRSVUUpLAogICAgc2tldyA9IGUxMDcxOjpza2V3bmVzcyh2YWx1ZSwgbmEucm0gPSBUUlVFKSwKICAgIGt1cnQgPSBlMTA3MTo6a3VydG9zaXModmFsdWUsIG5hLnJtID0gVFJVRSksCiAgICBtaW4gID0gbWluKHZhbHVlLCAgbmEucm0gPSBUUlVFKSwKICAgIHA1MCAgPSBtZWRpYW4odmFsdWUsIG5hLnJtID0gVFJVRSksCiAgICBtYXggID0gbWF4KHZhbHVlLCAgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICApIHw+CiAgZHBseXI6Om11dGF0ZShkcGx5cjo6YWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCB+IHJvdW5kKC54LCA0KSkpCgpwcmludCh2bl9yZl9kZXNjKQoKIyAwKSBYw6FjIMSR4buLbmggY8OhYyBj4buZdCBs4bujaSBzdeG6pXQKcmV0X2NvbHMgPC0gZ3JlcCgiXnJldF8iLCBuYW1lcyhyZXR1cm5zKSwgdmFsdWUgPSBUUlVFKQoKIyAxKSBU4bqhbyBk4buvIGxp4buHdSBMT05HIHThuqFpIMSRw6J5IChrw6htIHJtLCByZiB2w6AgZXhjZXNzKQojICAgIC0gcm06IGzhu6NpIHN14bqldCB0aOG7iyB0csaw4budbmcgPSByZXRfVk5fSU5ERVggKMSRw6MgY8OzIHRyb25nICdyZXR1cm5zJykKIyAgICAtIHJmOiBsw6NpIHN14bqldCBwaGkgcuG7p2kgcm8gdOG7qyBj4buZdCBSRl9kYWlseSBj4bunYSAnaG9hbmdhbmFseXNpcycKCgpob2FuZ2FuYWx5c2lzX2xvbmcgPC0gcmV0dXJucyAlPiUKICBtdXRhdGUoCiAgICByZiAgICAgICAgPSBob2FuZ2FuYWx5c2lzJFJGX2RhaWx5LAogICBybSA9IGhvYW5nYW5hbHlzaXMkcm0sCiAgICBybV9leGNlc3MgPSBybSAtIHJmCiAgKSAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzICAgICAgPSBhbGxfb2YocmV0X2NvbHMpLAogICAgbmFtZXNfdG8gID0gImFzc2V0IiwKICAgIHZhbHVlc190byA9ICJyaSIKICApICU+JQogIG11dGF0ZSgKICAgIGFzc2V0ICAgICA9IGdzdWIoIl5yZXRfIiwgIiIsIGFzc2V0KSwKICAgIHJpX2V4Y2VzcyA9IHJpIC0gcmYKICApCgojIDIpIFRo4buRbmcga8OqIG3DtCB04bqjIHRoZW8gbcOjCmRlc2NfdGJsIDwtIGhvYW5nYW5hbHlzaXNfbG9uZyAlPiUKICBncm91cF9ieShhc3NldCkgJT4lCiAgc3VtbWFyaXNlKAogICAgbiAgICAgICAgPSBzdW0oIWlzLm5hKHJpKSksCiAgICBtZWFuX3JldCA9IG1lYW4ocmksIG5hLnJtID0gVFJVRSksCiAgICBzZF9yZXQgICA9IHNkKHJpLCBuYS5ybSA9IFRSVUUpLAogICAgc2tld19yZXQgPSBza2V3bmVzcyhyaSwgbmEucm0gPSBUUlVFKSwKICAgIGt1cnRfcmV0ID0ga3VydG9zaXMocmksIG5hLnJtID0gVFJVRSksCiAgICBtZWFuX2V4ICA9IG1lYW4ocmlfZXhjZXNzLCBuYS5ybSA9IFRSVUUpLAogICAgc2RfZXggICAgPSBzZChyaV9leGNlc3MsIG5hLnJtID0gVFJVRSksCiAgICAuZ3JvdXBzICA9ICJkcm9wIgogICkKCnByaW50KAogIGRwbHlyOjpiaW5kX3Jvd3MoCiAgICBkZXNjX3RibCwKICAgIHZuX3JmX2Rlc2MgJT4lIGRwbHlyOjp0cmFuc211dGUoCiAgICAgIGFzc2V0ICAgID0gdmFyaWFibGUsCiAgICAgIG4gICAgICAgID0gbiwgICAgICAgICAgICAgICAgICMgaG/hurdjOiBuID0gbiAtIDFMIMSR4buDIGto4bubcCBz4buRIGvhu7MgduG7m2kgcmV0dXJucwogICAgICBtZWFuX3JldCA9IG1lYW4sCiAgICAgIHNkX3JldCAgID0gc2QsCiAgICAgIHNrZXdfcmV0ID0gc2tldywKICAgICAga3VydF9yZXQgPSBrdXJ0LAogICAgICBtZWFuX2V4ICA9IE5BX3JlYWxfLAogICAgICBzZF9leCAgICA9IE5BX3JlYWxfCiAgICApCiAgKQopCgojIDMpIE1hIHRy4bqtbiB0xrDGoW5nIHF1YW4gZ2nhu69hIGPDoWMgbOG7o2kgc3XhuqV0IChiYW8gZ+G7k20gdGjhu4sgdHLGsOG7nW5nKQpyZXRfd2lkZSA8LSByZXR1cm5zICU+JQogIGRwbHlyOjpzZWxlY3QoYWxsX29mKHJldF9jb2xzKSkgJT4lCiAgdGlkeXI6OmRyb3BfbmEoKQoKcHJpbnQocm91bmQoY29yKHJldF93aWRlLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksIDMpKQoKYGBgCgoKIyA0LjMuIMav4bubYyBsxrDhu6NuZyBDYW1wCgpgYGB7cn0KIyA9PT09IDQuMyDGr+G7mkMgTMav4buiTkcgQ0FQTSAobMOgbSB0csOybiA0IGNo4buvIHPhu5EgdGjhuq1wIHBow6JuKSA9PT09CmxpYnJhcnkoYnJvb20pCmxpYnJhcnkocHVycnIpCm9wdGlvbnMoc2NpcGVuID0gOTk5KSAjIHRyw6FuaCBk4bqhbmcga2hvYSBo4buNYwoKIyBEYW5oIHPDoWNoIG3Dowp0aWNrZXJzIDwtIHVuaXF1ZShob2FuZ2FuYWx5c2lzX2xvbmckYXNzZXQpCgojIEjDoG0gxrDhu5tjIGzGsOG7o25nIENBUE0gY2hvIDEgbcOjCmZpdF9jYXBtX29uZSA8LSBmdW5jdGlvbihzeW0pIHsKICBkZiA8LSBob2FuZ2FuYWx5c2lzX2xvbmcgfD4gZmlsdGVyKGFzc2V0ID09IHN5bSkgfD4gZHJvcF9uYShyaV9leGNlc3MsIHJtX2V4Y2VzcykKICBpZiAobnJvdyhkZikgPCAxMCkgcmV0dXJuKE5VTEwpCiAgCiAgbSA8LSBsbShyaV9leGNlc3MgfiBybV9leGNlc3MsIGRhdGEgPSBkZikKICB0ZCA8LSB0aWR5KG0sIGNvbmYuaW50ID0gVFJVRSkKICAKICB0aWJibGUoCiAgICBhc3NldCAgICA9IHN5bSwKICAgIGFscGhhICAgID0gcm91bmQodGQkZXN0aW1hdGVbdGQkdGVybSA9PSAiKEludGVyY2VwdCkiXSwgNCksCiAgICBhbHBoYV9jaSA9IHBhc3RlMCgiWyIsCiAgICAgICAgICAgICAgICAgICAgICByb3VuZCh0ZCRjb25mLmxvd1t0ZCR0ZXJtID09ICIoSW50ZXJjZXB0KSJdLCA0KSwgIiwgIiwKICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKHRkJGNvbmYuaGlnaFt0ZCR0ZXJtID09ICIoSW50ZXJjZXB0KSJdLCA0KSwgIl0iKSwKICAgIGJldGEgICAgID0gcm91bmQodGQkZXN0aW1hdGVbdGQkdGVybSA9PSAicm1fZXhjZXNzIl0sIDQpLAogICAgYmV0YV9jaSAgPSBwYXN0ZTAoIlsiLAogICAgICAgICAgICAgICAgICAgICAgcm91bmQodGQkY29uZi5sb3dbdGQkdGVybSA9PSAicm1fZXhjZXNzIl0sIDQpLCAiLCAiLAogICAgICAgICAgICAgICAgICAgICAgcm91bmQodGQkY29uZi5oaWdoW3RkJHRlcm0gPT0gInJtX2V4Y2VzcyJdLCA0KSwgIl0iKSwKICAgIHBfYWxwaGEgID0gcm91bmQodGQkcC52YWx1ZVt0ZCR0ZXJtID09ICIoSW50ZXJjZXB0KSJdLCA0KSwKICAgIHBfYmV0YSAgID0gcm91bmQodGQkcC52YWx1ZVt0ZCR0ZXJtID09ICJybV9leGNlc3MiXSwgNCksCiAgICByX3NxdWFyZWQgPSByb3VuZChnbGFuY2UobSkkci5zcXVhcmVkLCA0KSwKICAgIG4gICAgICAgID0gbm9icyhtKQogICkKfQoKIyBDaOG6oXkgY2hvIHThuqV0IGPhuqMgbcOjCmNhcG1fdGJsIDwtIG1hcF9kZnIodGlja2VycywgZml0X2NhcG1fb25lKQoKIyBIaeG7g24gdGjhu4sKcHJpbnQoY2FwbV90YmwsIG4gPSBucm93KGNhcG1fdGJsKSkKCgpgYGAKCioqUGjGsMahbmcgdHLDrG5oIENBUE0gY2hvIHThu6tuZyBtw6MqKgoKUGjGsMahbmcgdHLDrG5oIHThu5VuZyBxdcOhdDoKCiQkClJfe2ksdH0gLSBSX3tmLHR9ID0gXGhhdHtcYWxwaGF9X2kgKyBcaGF0e1xiZXRhfV9pIFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykgKyBcdmFyZXBzaWxvbl97aSx0fQokJAoKKipWQ0IqKiAgCiQkClJfe1x0ZXh0e1ZDQn0sdH0gLSBSX3tmLHR9ID0gMC4wMDA0ICsgMC43ODc2IFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqTUJCKiogIAokJApSX3tcdGV4dHtNQkJ9LHR9IC0gUl97Zix0fSA9IDAuMDAwMyArIDEuMDczMSBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKkJJRCoqICAKJCQKUl97XHRleHR7QklEfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDIgKyAxLjA5ODcgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipDVEcqKiAgCiQkClJfe1x0ZXh0e0NUR30sdH0gLSBSX3tmLHR9ID0gMC4wMDAyICsgMS4xMzUyIFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqU0hCKiogIAokJApSX3tcdGV4dHtTSEJ9LHR9IC0gUl97Zix0fSA9IDAuMDAwMiArIDAuNDg4NyBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKkFDQioqICAKJCQKUl97XHRleHR7QUNCfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDUgKyAwLjUyNTMgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipTVEIqKiAgCiQkClJfe1x0ZXh0e1NUQn0sdH0gLSBSX3tmLHR9ID0gMC4wMDAwICsgMS4xNDc5IFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqRUlCKiogIAokJApSX3tcdGV4dHtFSUJ9LHR9IC0gUl97Zix0fSA9IDAuMDAwMCArIDAuNDc5MyBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoKIyA0LjQuIEzhu6NpIHN14bqldCBrw6wgduG7jW5nIENhbXAgdsOgIHBow6JuIGxv4bqhaSDEkeG7i25oIGdpw6EKCmBgYHtyfQojID09PT0gNC40IEzhu6JJIFNV4bqkVCBL4buyIFbhu4xORyBDQVBNICYgUEjDgk4gTE/huqBJIMSQ4buKTkggR0nDgSA9PT09CmxpYnJhcnkoZ2dyZXBlbCkKCnJmX2JhciAgICA8LSBtZWFuKGhvYW5nYW5hbHlzaXNfbG9uZyRyZiwgbmEucm0gPSBUUlVFKQpta3RfZXhiYXIgPC0gbWVhbihob2FuZ2FuYWx5c2lzX2xvbmckcm1fZXhjZXNzLCBuYS5ybSA9IFRSVUUpCgptZWFuX3JlYWxpemVkIDwtIGhvYW5nYW5hbHlzaXNfbG9uZyAlPiUKICBncm91cF9ieShhc3NldCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fcmV0ID0gbWVhbihyaSwgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikKCmNhcG1fZXZhbCA8LSBjYXBtX3RibCAlPiUKICBsZWZ0X2pvaW4obWVhbl9yZWFsaXplZCwgYnkgPSAiYXNzZXQiKSAlPiUKICBtdXRhdGUoCiAgICBlcl9jYXBtID0gcmZfYmFyICsgYmV0YSAqIG1rdF9leGJhciwKICAgIGdhcCAgICAgPSBtZWFuX3JldCAtIGVyX2NhcG0sCiAgICBwcmljZV9mbGFnID0gY2FzZV93aGVuKAogICAgICBnYXAgPiAwICB+ICJVbmRlcnByaWNlZCIsCiAgICAgIGdhcCA8IDAgIH4gIk92ZXJwcmljZWQiLAogICAgICBUUlVFICAgICB+ICJGYWlybHkgcHJpY2VkIgogICAgKQogICkKCnByaW50KGNhcG1fZXZhbCkKCiMgU2VjdXJpdHkgTWFya2V0IExpbmU6IGNo4bqlbSDEkWVuID0gRVtSX2ldX0NBUE0sIHbDsm5nIHRyw7JuIHRy4bqvbmcgPSBtZWFuX3JldApnZ3Bsb3QoY2FwbV9ldmFsLCBhZXMoeCA9IGJldGEpKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gcmZfYmFyLCBzbG9wZSA9IG1rdF9leGJhcikgKwogIGdlb21fcG9pbnQoYWVzKHkgPSBlcl9jYXBtKSwgc2l6ZSA9IDIpICsgICAgICAgICAgICAgICAgICAgICAjIMSRaeG7g20gxJFlbiAoRVtSaV1fQ0FQTSkKICBnZW9tX3BvaW50KGFlcyh5ID0gbWVhbl9yZXQpLCBzaGFwZSA9IDEsIHNpemUgPSAyLCBzdHJva2UgPSAxKSArICAjIMSRaeG7g20gdHLhuq9uZyAobWVhbl9yZXQpCiAgZ2VvbV90ZXh0KGFlcyh5ID0gbWVhbl9yZXQsIGxhYmVsID0gYXNzZXQpLCAgICAgICAgICAgICAgICAgICMgPC0tIE5Iw4NOIFRSw4pOIMSQSeG7gk0gVFLhuq5ORwogICAgICAgICAgICB2anVzdCA9IC0wLjksIHNpemUgPSAzLCBjaGVja19vdmVybGFwID0gVFJVRSkgKwogIGxhYnModGl0bGUgPSAiU2VjdXJpdHkgTWFya2V0IExpbmUiLAogICAgICAgeCA9ICJCZXRhIiwgeSA9ICJSZXR1cm4iKSArCiAgdGhlbWVfbWluaW1hbCgpCgpgYGAKCgoKCgoK