Web Analytics

Phương pháp đánh giá dịch bệnh, từ đó đưa ra các quyết định trong phòng chống dịch bệnh.

Mục lục

Bài 1: Phương pháp đánh giá dịch bệnh, từ đó đưa ra các quyết định trong phòng chống dịch bệnh [được chuyển đến đây từ link gốc đã xuất bản ngày 10/7/2021]

Bài 2: Một phương pháp dự báo dịch bệnh

Bài 3: Sóng Siêu lây nhiễm

Bài 4: Bàn thêm về mô hình: khoảng thời gian nối tiếp và số ca được báo cáo

Bài 5: Một góc nhìn định lượng cho vắc-xin

             Bài 5a: Phụ lục - Lựa chọn khoảng thời gian giữa hai mũi vắc-xin

Bài 6: Một giải pháp

Phụ lục: Các bài phân tích làn sóng dịch Covid-19 thứ 4 từ 14/07 - 29/08


Phương pháp đánh giá dịch bệnh, từ đó đưa ra các quyết định trong phòng chống dịch bệnh

1. Hệ số lây nhiễm cơ bản (basic reproduction number) và khoảng thời gian nối tiếp (serial interval)

Đối với một bệnh dịch, hệ số lây nhiễm cơ bản R0 và khoảng thời gian nối tiếp trung bình T là hai tham số quan trọng nhất. Ta bắt đầu bằng một ví dụ trong kinh tế. Để đánh giá tăng trưởng kinh tế, ta tính GDP và nó được tính cho quãng thời gian một năm. Đối với một bệnh dịch, tương tự ta cần tính hai tham số R0 và T (đơn vị của T là ngày).

Trong giai đoạn đầu của bệnh dịch, trung bình 1 cá thể bệnh sẽ sinh ra R0 cá thể bệnh mới trong khoảng thời gian T. Từ đó ta có thể tính ra rằng, trong giai đoạn đầu n*T ngày, nếu R> 1, trung bình 1 cá thể bệnh sẽ sinh ra tổng số cá thể bệnh:

Ví dụ 1: Các chủng COVID-19 có các trung bình của khoảng thời gian nối tiếp gần như nhau và loanh quanh 4, nên ta giả sử T = [1,2]. Với 20 ngày, ta có n = 20 / T = 20 / 4 = 5.

Bảng dưới cho tổng số ca sau 20 ngày với các giá trị khác nhau của R0 [3].

Chủng COVID-19

R0

Tổng số ca sau 20 ngày

SARS-CoV-2

2

63

Alpha

3.4

643

Delta

5

3906

Ví dụ 2: R0 lớn không nói lên được vấn đề nếu thiếu T. Cặp (R0 = 5, T = 4) sẽ khiến số ca tăng nhanh hơn cặp (R0 = 25, T = 8) cho dù 25 lớn hơn 5 nhiều.

Với R0 lớn và T nhỏ, số ca tăng lên rất nhanh nên ta phải phong tỏa chặt hơn khi quá khả năng truy vết.

2. Phát hiện một ổ dịch

Giả sử ta không có điều kiện xét nghiệm tầm soát toàn dân, vậy làm thế nào để phát hiện một ổ dịch và số ca trong ổ dịch là bao nhiêu khi ta phát hiện ra?

Để giải quyết bài toán này, ta cần thêm hai tham số ngoài R0 và T. Gọi p là xác suất một người sẽ đến viện do mắc bệnh. Gọi t là số ngày trung bình từ khi mắc bệnh cho tới khi đi bệnh viện. Với COVID-19, số ca có triệu chứng chiếm ít nhất 20% và số ca nặng ít nhất là 3% nên ta tạm giả thiết p = 10%. Những ai mắc COVID-19 và có triệu chứng, thì trung bình triệu chứng xuất hiện sau 5 ngày mắc nên ta giả thiết t = 7.

Trước tiên ta tính số ca tối thiểu để phát hiện ra ổ. Giả sử ta phát hiện ra ổ khi có người mắc đi viện. Xác suất để ổ dịch có m người mà vẫn chưa ai đi viện là (1 - p)m (nên ta chưa phát hiện ra ổ). Vậy ta cần m = 29 thì xác suất này mới là 0.929 = 4.7% < 5%. Tức là ta phát hiện ra ổ với xác suất 95% khi ổ có đến 29 ca.

Tiếp theo ta quy đổi số ca tối thiểu ra số ngày. Giả sử T = 4, bảng dưới cho kết quả với các giá trị khác nhau của R0.

Chủng

COVID-19

R0

Số ngày để có ít nhất 29 ca

Số ngày cho tới khi đi viện

Tổng số ca khi phát hiện ổ

SARS-CoV-2

2

16

23

63 đến 127

Alpha

3.4

12

19

188 đến 643

Delta

5

8

15

156 đến 781

Với R0 lớn, số ca khi ta phát hiện ra ổ rất lớn. Đặc biệt tốc độ số ca tăng rất nhanh như đã thấy trong mục trước, nên ta phải xem xét phong tỏa nhanh khi quá khả năng truy vết. Các ước lượng sẽ chính xác hơn nếu ta ước lượng được p và thay vì tạm giả thiết. Phương pháp này không yêu cầu giá trị p quá chính xác. Ví dụng với chủng Delta, p từ 10% đến 20% cho kết quả như nhau. Tuy nhiên nếu p = 5% (như có triệu chứng mà không đi viện, hoặc đi viện mà không hẳn đã được phát hiện ra) và t = 10 thì sẽ là tai họa với chủng Delta (tổng số ca khi phát hiện ổ lên tới khoảng 2600).

Cuối cùng ta chú ý rằng tổng số ca khi phát hiện ổ chỉ là tổng số ca hôm nay, nên số ca tương lai tiếp tục tăng. Kể cả ta áp các biện pháp phong tỏa và hệ số lây nhiễm giảm xuống 1, thì cứ 4 ngày, tổng số ca trong 4 ngày cuối cùng (chứ không phải toàn bộ 781 ca trong trường hợp Delta) lại lây ra chừng đó ca nữa. Phần tiếp theo và bài về dự báo sẽ nói sâu thêm về điều này.

3. Đánh giá diễn biến dịch qua số ca mới mắc mỗi ngày

Ở phần trên ta đánh giá nguy cơ khi dịch mới bắt đầu. Điều này là khả thi khi một chủng virus xuất hiện ở nước ta sau khi đã xuất hiện vài tháng ở nước khác. Lúc đó các tham số đã được ước lượng trước.

Khi bệnh dịch diễn ra, số người có miễn dịch do đã mắc bệnh hoặc được tiêm vắc-xin tăng lên, và ta cũng thay đổi liên tục các biện pháp chống dịch. Khi đó để đánh giá dịch, ta không sử dụng R0 mà sử dụng một hệ số tổng quát hơn R0. Đó là hệ số lây nhiễm thực Re (effective reproduction number).

Gọi Vt là số ca mới mắc bệnh ngày thứ t. Giả sử T = 4, khi đó Re tại thời điểm t được ước lượng bởi tổng số ca T ngày tương lai chia cho tổng số ca T ngày gần nhất (khi mẫu số dương),

Trong giai đoạn đầu của dịch, ta có bảng đánh giá sau.

RT(t)

Ý nghĩa

RT(t) xấp xỉ R0

Ta không can thiệp gì

R0 > RT(t) > 1 nhưng RT(t) không có xu hướng giảm dần xuống dưới 1 rõ rệt

Ta dập dịch chưa đủ tốt

R0 > RT(t) > 1RT(t) có xu hướng giảm dần xuống dưới 1 rõ rệt trong nhiều ngày

Công tác dập dịch tiến triển tốt

1 > RT(t)

Ta dập dịch thành công nếu tiếp tục duy trì đến khi không còn ca bệnh nào

Tương tự như GDP trong kinh tế, RT có thể được tính cho từng vùng, tỉnh, hay thành phố và nó bị ảnh hưởng bởi rất nhiều yếu tố như khẩu trang, vệ sinh, mật độ dân số, quãng đường đi trung bình, cách ly, giãn cách .v.v. Do đó ta cần thêm các phân tích khác để hiểu yếu tố nào tác động đến sự biến đổi của RT.

4. Áp dụng cho đợt dịch từ cuối tháng 4/2021

Ta tính RT cho đợt dịch COVID-19 ở Việt Nam (VN) bắt đầu vào cuối tháng 4/2021. Dữ liệu số ca mắc mới mỗi ngày trên Việt Nam và tại mỗi tỉnh/thành phố được lấy từ VnExpress [4]. Ta loại bỏ khoảng 4 đến 7 giá trị ban đầu của RT do dữ liệu không ổn định trong các ngày đầu mới phát hiện ổ dịch. Chúng tôi tạm thời chỉ tính RT cho Việt Nam và hai tỉnh/thành phố có số ca nhiều nhất, Bắc Giang (BG) và Hồ Chí Minh (HCM). Khi tính RT cho một tỉnh, ta bỏ qua sai số tạo bởi các ca dịch chuyển giữa các tỉnh.

Ta nhận thấy ba đỉnh của RT,VN vào các ngày 14/5, 22/5, và 13/6 tương ứng với ba đỉnh của RT,BG. Hai đỉnh của RT,VN vào các ngày 24/6 và 29/6 tương ứng với hai đỉnh của RT,HCM. Đây là lý do ta cần phân tích riêng rẽ BG và HCM.

Đối với BG, do năng lực xét nghiệp ban đầu không bằng năng lực cách ly, nên RT,BG biến đổi mạnh. Tuy nhiên RT,BG > 1 chỉ diễn ra trong các khoảng thời gian trên dưới 1 tuần, và đặc biệt có giai đoạn dài loanh quanh 1. Điều này cho thấy BG kiểm soát tốt.

Đối với HCM, RT,HCM loanh quanh 1.5 nên số ca tăng dần. RT,HCM có giảm trong khoảng 4 ngày từ 17/6 đến 20/6 (nhưng vẫn trên 1), tuy nhiên khoảng thời gian này quá ngắn nên không phải là xu hướng. Sau khi phát hiện thêm ổ dịch thì RT,HCM lập tức tăng lại. RT,HCM sau đó giảm xuống dưới 1 trong 4 ngày, nhưng đây là do số ca phát hiện bị cộng dồn chứ không phải do kiểm soát dịch tốt (quãng thời gian 4 ngày là ngắn không thể hiện xu hướng). Điểm khác biệt lớn nhất giữa BG và HCM là HCM không có giai đoạn dài nào mà thực sự RT,HCM loanh quanh 1 hay có xu hướng giảm mạnh để cho thấy việc kiểm soát dịch là hiệu quả.

Đối với chủng Delta, như đã phân tích ở trên, khi một ổ dịch mới được phát hiện qua người bệnh đến viện thay vì xét nghiệm tầm soát thì số ca trong ổ có thể tương đối lớn. Do đó nếu ta không kiểm soát tốt RT thì nên tính toán các biện pháp phong tỏa mới mạnh hơn và nhanh hơn (so với khi dập các chủng COVID-19 trước).

 

5. Xét nghiệm gộp

Để giảm chi phí xét nghiệm, ta gộp nhiều mẫu xét nghiệm chung. Thuật toán là ta xét nghiệm gộp g mẫu, nếu âm tính thì toàn bộ các mẫu trong đó là âm tính, nếu dương tính thì ta xét nghiệm riêng từng mẫu trong đó. Có nghiên cứu chỉ ra rằng ta có thể gộp đến 64 mẫu [5]. Câu hỏi đặt ra là đâu là giá trị tối ưu cho g?

Chúng tôi chưa có thời gian để cho một câu trả lời thỏa đáng, nên chúng tôi chỉ có vài ý kiến tạm thời. Gọi tổng số dân là N và tỷ lệ số ca bệnh trong toàn dân là q. Ví dụ N = 200 và chỉ 1 ca bệnh trong đó (q = 1/200), ta có bảng sau.

g

Số xét nghiệm cần làm

1

200

10

20 + 10 = 30

15

19 đến 29

20

10 + 20 = 30

40

5 + 40 = 45

200

1 + 200 = 201

 

Ta thấy rằng không phải cứ gộp càng nhiều là càng tốt. Giá trị tối ưu của g phụ thuộc qcàng nhỏ thì giá trị tối ưu của g càng lớn (tỷ lệ ca bệnh càng nhỏ thì ta càng có thể gộp nhiều mẫu).

Nhận xét tiếp theo là trường hợp xấu nhất xảy ra khi mỗi mẫu gộp chỉ có một ca bệnh, vì khi đó số mẫu ta phải xét nghiệm riêng lẻ là lớn nhất. Khi xét trường hợp xấu nhất, ta có thể quy bài toán trên về bài toán đơn giản hơn như trong ví dụ trên. Khi đó tổng số dân là 1/q và chỉ có 1 ca bệnh.

Để giải bài toán tổng quát, chúng tôi nghĩ rằng ta có thể sử dụng phương pháp mô phỏng.

6. Phần kết

Ở trên chúng tôi đã trình bày cụ thể cách đánh giá nguy cơ khi dịch mới bắt đầu và cách đánh giá diễn biến dịch. Để biết thêm chi tiết, các bạn có thể xem thêm hai slide đính kèm. Các bạn có thể tìm đọc cách ước lượng T và R0 trong các tài liệu tham khảo dưới đây. Chúng tôi áp dụng các phương pháp này với đợt dịch COVID-19 mới nhất ở Việt Nam. Chúng tôi cũng trình bày qua về số mẫu gộp tối ưu trong xét nghiệm. Chúng tôi sẽ bàn thêm về các chủ đề khác như dự báo, các phương pháp xét nghiệm, xác suất dương/âm tính giả, vắc-xin .v.v. trong các bài viết sau.

- trunght@onyx.vn -


Tài liệu tham khảo

(Xem thêm 11 tài liệu tham khảo khác trong 2 slide đính kèm)

SIR (thời gian rời rạc và tham số thay đổi): SIR review - 210709.pdf

Đánh giá diễn biến dịch qua số ca mới mắc mỗi ngày: time-since-infection model - 210710.pdf

1. Geismar, C. et al. Serial interval of COVID-19 and the effect of Variant B.1.1.7: analyses from a prospective community cohort study (Virus Watch). medRxiv 2021.05.17.21257223 (2021). doi:10.1101/2021.05.17.21257223

2. Pung, R., Mak, T. M., group, C. C.-19 working, Kucharski, A. J. & Lee, V. J. Serial intervals observed in SARS-CoV-2 B.1.617.2 variant cases. medRxiv 2021.06.04.21258205 (2021). doi:10.1101/2021.06.04.21258205

3. Wikipedia. Variants of SARS-CoV-2. Available at: https://en.wikipedia.org/wiki/Variants_of_SARS-CoV-2.

4. Số liệu Covid-19 tại Việt Nam. Available at: https://vnexpress.net/covid-19/covid-19-viet-nam. (Accessed: 10th July 2021)

5. Yelin, I. et al. Evaluation of COVID-19 RT-qPCR test in multi-sample pools. medRxiv 2020.03.26.20039438 (2020). doi:10.1101/2020.03.26.20039438

Bình luận:

Chưa có bình luận nào.

Thông tin bình luận:

Chưa nhập họ tên.
Chưa nhập email.

Whoops! There was an error.
Predis \ Response \ ServerException
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error. Predis\Response\ServerException thrown with message "MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error." Stacktrace: #12 Predis\Response\ServerException in /var/www/html/onyx.vn/covid19/vendor/predis/predis/src/Client.php:370 #11 Predis\Client:onErrorResponse in /var/www/html/onyx.vn/covid19/vendor/predis/predis/src/Client.php:335 #10 Predis\Client:executeCommand in /var/www/html/onyx.vn/covid19/vendor/predis/predis/src/Client.php:314 #9 Predis\Client:__call in /var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:96 #8 Illuminate\Redis\Connections\Connection:command in /var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:108 #7 Illuminate\Redis\Connections\Connection:__call in /var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php:93 #6 Illuminate\Cache\RedisStore:put in /var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Cache/Repository.php:195 #5 Illuminate\Cache\Repository:put in /var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php:66 #4 Illuminate\Session\CacheBasedSessionHandler:write in /var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Session/Store.php:129 #3 Illuminate\Session\Store:save in /var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:87 #2 Illuminate\Session\Middleware\StartSession:terminate in /var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:218 #1 Illuminate\Foundation\Http\Kernel:terminateMiddleware in /var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:189 #0 Illuminate\Foundation\Http\Kernel:terminate in /var/www/html/onyx.vn/covid19/index.php:60
12
Predis\Response\ServerException
/vendor/predis/predis/src/Client.php370
11
Predis\Client onErrorResponse
/vendor/predis/predis/src/Client.php335
10
Predis\Client executeCommand
/vendor/predis/predis/src/Client.php314
9
Predis\Client __call
/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php96
8
Illuminate\Redis\Connections\Connection command
/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php108
7
Illuminate\Redis\Connections\Connection __call
/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php93
6
Illuminate\Cache\RedisStore put
/vendor/laravel/framework/src/Illuminate/Cache/Repository.php195
5
Illuminate\Cache\Repository put
/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php66
4
Illuminate\Session\CacheBasedSessionHandler write
/vendor/laravel/framework/src/Illuminate/Session/Store.php129
3
Illuminate\Session\Store save
/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php87
2
Illuminate\Session\Middleware\StartSession terminate
/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php218
1
Illuminate\Foundation\Http\Kernel terminateMiddleware
/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php189
0
Illuminate\Foundation\Http\Kernel terminate
/index.php60
/var/www/html/onyx.vn/covid19/vendor/predis/predis/src/Client.php
     *
     * @return mixed
     */
    protected function onErrorResponse(CommandInterface $command, ErrorResponseInterface $response)
    {
        if ($command instanceof ScriptCommand && $response->getErrorType() === 'NOSCRIPT') {
            $eval = $this->createCommand('EVAL');
            $eval->setRawArguments($command->getEvalArguments());
 
            $response = $this->executeCommand($eval);
 
            if (!$response instanceof ResponseInterface) {
                $response = $command->parseResponse($response);
            }
 
            return $response;
        }
 
        if ($this->options->exceptions) {
            throw new ServerException($response->getMessage());
        }
 
        return $response;
    }
 
    /**
     * Executes the specified initializer method on `$this` by adjusting the
     * actual invokation depending on the arity (0, 1 or 2 arguments). This is
     * simply an utility method to create Redis contexts instances since they
     * follow a common initialization path.
     *
     * @param string $initializer Method name.
     * @param array  $argv        Arguments for the method.
     *
     * @return mixed
     */
    private function sharedContextFactory($initializer, $argv = null)
    {
        switch (count($argv)) {
            case 0:
Arguments
  1. "MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error."
    
/var/www/html/onyx.vn/covid19/vendor/predis/predis/src/Client.php
    }
 
    /**
     * {@inheritdoc}
     */
    public function createCommand($commandID, $arguments = array())
    {
        return $this->profile->createCommand($commandID, $arguments);
    }
 
    /**
     * {@inheritdoc}
     */
    public function executeCommand(CommandInterface $command)
    {
        $response = $this->connection->executeCommand($command);
 
        if ($response instanceof ResponseInterface) {
            if ($response instanceof ErrorResponseInterface) {
                $response = $this->onErrorResponse($command, $response);
            }
 
            return $response;
        }
 
        return $command->parseResponse($response);
    }
 
    /**
     * Handles -ERR responses returned by Redis.
     *
     * @param CommandInterface       $command  Redis command that generated the error.
     * @param ErrorResponseInterface $response Instance of the error response.
     *
     * @throws ServerException
     *
     * @return mixed
     */
    protected function onErrorResponse(CommandInterface $command, ErrorResponseInterface $response)
    {
Arguments
  1. Predis\Command\StringSetExpire {}
    
  2. Predis\Response\Error {}
    
/var/www/html/onyx.vn/covid19/vendor/predis/predis/src/Client.php
        );
 
        if ($response instanceof ResponseInterface) {
            if ($response instanceof ErrorResponseInterface) {
                $error = true;
            }
 
            return (string) $response;
        }
 
        return $response;
    }
 
    /**
     * {@inheritdoc}
     */
    public function __call($commandID, $arguments)
    {
        return $this->executeCommand(
            $this->createCommand($commandID, $arguments)
        );
    }
 
    /**
     * {@inheritdoc}
     */
    public function createCommand($commandID, $arguments = array())
    {
        return $this->profile->createCommand($commandID, $arguments);
    }
 
    /**
     * {@inheritdoc}
     */
    public function executeCommand(CommandInterface $command)
    {
        $response = $this->connection->executeCommand($command);
 
        if ($response instanceof ResponseInterface) {
            if ($response instanceof ErrorResponseInterface) {
Arguments
  1. Predis\Command\StringSetExpire {}
    
/var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php
     *
     * @param  array|string  $channels
     * @param  \Closure  $callback
     * @return void
     */
    public function psubscribe($channels, Closure $callback)
    {
        return $this->createSubscription($channels, $callback, __FUNCTION__);
    }
 
    /**
     * Run a command against the Redis database.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
    public function command($method, array $parameters = [])
    {
        return $this->client->{$method}(...$parameters);
    }
 
    /**
     * Pass other method calls down to the underlying client.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return $this->command($method, $parameters);
    }
}
 
Arguments
  1. "setex"
    
  2. array:3 [
      0 => "laravel_cache:RqqF1DSP8642Y6MRkIHjoBRzKduhKjviqcoW07Aq"
      1 => 7200
      2 => "s:192:"a:3:{s:6:"_token";s:40:"7wf0y970Vbz1mPQsvBGontiWOqMwjL5NBflbhTr5";s:9:"_previous";a:1:{s:3:"url";s:34:"https://onyx.vn/covid19/baiviet/12";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}";"
    ]
    
/var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
    public function command($method, array $parameters = [])
    {
        return $this->client->{$method}(...$parameters);
    }
 
    /**
     * Pass other method calls down to the underlying client.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return $this->command($method, $parameters);
    }
}
 
Arguments
  1. "setex"
    
  2. array:3 [
      0 => "laravel_cache:RqqF1DSP8642Y6MRkIHjoBRzKduhKjviqcoW07Aq"
      1 => 7200
      2 => "s:192:"a:3:{s:6:"_token";s:40:"7wf0y970Vbz1mPQsvBGontiWOqMwjL5NBflbhTr5";s:9:"_previous";a:1:{s:3:"url";s:34:"https://onyx.vn/covid19/baiviet/12";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}";"
    ]
    
/var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php
 
        foreach ($values as $index => $value) {
            $results[$keys[$index]] = ! is_null($value) ? $this->unserialize($value) : null;
        }
 
        return $results;
    }
 
    /**
     * Store an item in the cache for a given number of minutes.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @param  float|int  $minutes
     * @return void
     */
    public function put($key, $value, $minutes)
    {
        $this->connection()->setex(
            $this->prefix.$key, (int) max(1, $minutes * 60), $this->serialize($value)
        );
    }
 
    /**
     * Store multiple items in the cache for a given number of minutes.
     *
     * @param  array  $values
     * @param  float|int  $minutes
     * @return void
     */
    public function putMany(array $values, $minutes)
    {
        $this->connection()->multi();
 
        foreach ($values as $key => $value) {
            $this->put($key, $value, $minutes);
        }
 
        $this->connection()->exec();
    }
Arguments
  1. "setex"
    
  2. array:3 [
      0 => "laravel_cache:RqqF1DSP8642Y6MRkIHjoBRzKduhKjviqcoW07Aq"
      1 => 7200
      2 => "s:192:"a:3:{s:6:"_token";s:40:"7wf0y970Vbz1mPQsvBGontiWOqMwjL5NBflbhTr5";s:9:"_previous";a:1:{s:3:"url";s:34:"https://onyx.vn/covid19/baiviet/12";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}";"
    ]
    
/var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Cache/Repository.php
            $this->forget($key);
        });
    }
 
    /**
     * Store an item in the cache.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @param  \DateTimeInterface|\DateInterval|float|int|null  $minutes
     * @return void
     */
    public function put($key, $value, $minutes = null)
    {
        if (is_array($key)) {
            return $this->putMany($key, $value);
        }
 
        if (! is_null($minutes = $this->getMinutes($minutes))) {
            $this->store->put($this->itemKey($key), $value, $minutes);
 
            $this->event(new KeyWritten($key, $value, $minutes));
        }
    }
 
    /**
     * {@inheritdoc}
     */
    public function set($key, $value, $ttl = null)
    {
        $this->put($key, $value, $ttl);
    }
 
    /**
     * Store multiple items in the cache for a given number of minutes.
     *
     * @param  array  $values
     * @param  \DateTimeInterface|\DateInterval|float|int  $minutes
     * @return void
     */
Arguments
  1. "RqqF1DSP8642Y6MRkIHjoBRzKduhKjviqcoW07Aq"
    
  2. "a:3:{s:6:"_token";s:40:"7wf0y970Vbz1mPQsvBGontiWOqMwjL5NBflbhTr5";s:9:"_previous";a:1:{s:3:"url";s:34:"https://onyx.vn/covid19/baiviet/12";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}"
    
  3. "120"
    
/var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php
     */
    public function close()
    {
        return true;
    }
 
    /**
     * {@inheritdoc}
     */
    public function read($sessionId)
    {
        return $this->cache->get($sessionId, '');
    }
 
    /**
     * {@inheritdoc}
     */
    public function write($sessionId, $data)
    {
        return $this->cache->put($sessionId, $data, $this->minutes);
    }
 
    /**
     * {@inheritdoc}
     */
    public function destroy($sessionId)
    {
        return $this->cache->forget($sessionId);
    }
 
    /**
     * {@inheritdoc}
     */
    public function gc($lifetime)
    {
        return true;
    }
 
    /**
     * Get the underlying cache repository.
Arguments
  1. "RqqF1DSP8642Y6MRkIHjoBRzKduhKjviqcoW07Aq"
    
  2. "a:3:{s:6:"_token";s:40:"7wf0y970Vbz1mPQsvBGontiWOqMwjL5NBflbhTr5";s:9:"_previous";a:1:{s:3:"url";s:34:"https://onyx.vn/covid19/baiviet/12";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}"
    
  3. "120"
    
/var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Session/Store.php
     *
     * @param  string  $data
     * @return string
     */
    protected function prepareForUnserialize($data)
    {
        return $data;
    }
 
    /**
     * Save the session data to storage.
     *
     * @return bool
     */
    public function save()
    {
        $this->ageFlashData();
 
        $this->handler->write($this->getId(), $this->prepareForStorage(
            serialize($this->attributes)
        ));
 
        $this->started = false;
    }
 
    /**
     * Prepare the serialized session data for storage.
     *
     * @param  string  $data
     * @return string
     */
    protected function prepareForStorage($data)
    {
        return $data;
    }
 
    /**
     * Age the flash data for the session.
     *
     * @return void
Arguments
  1. "RqqF1DSP8642Y6MRkIHjoBRzKduhKjviqcoW07Aq"
    
  2. "a:3:{s:6:"_token";s:40:"7wf0y970Vbz1mPQsvBGontiWOqMwjL5NBflbhTr5";s:9:"_previous";a:1:{s:3:"url";s:34:"https://onyx.vn/covid19/baiviet/12";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}"
    
/var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php
        if ($this->sessionConfigured()) {
            $this->storeCurrentUrl($request, $session);
 
            $this->addCookieToResponse($response, $session);
        }
 
        return $response;
    }
 
    /**
     * Perform any final actions for the request lifecycle.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Symfony\Component\HttpFoundation\Response  $response
     * @return void
     */
    public function terminate($request, $response)
    {
        if ($this->sessionHandled && $this->sessionConfigured() && ! $this->usingCookieSessions()) {
            $this->manager->driver()->save();
        }
    }
 
    /**
     * Start the session for the given request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Contracts\Session\Session
     */
    protected function startSession(Request $request)
    {
        return tap($this->getSession($request), function ($session) use ($request) {
            $session->setRequestOnHandler($request);
 
            $session->start();
        });
    }
 
    /**
     * Get the session implementation from the manager.
/var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php
     * @return void
     */
    protected function terminateMiddleware($request, $response)
    {
        $middlewares = $this->app->shouldSkipMiddleware() ? [] : array_merge(
            $this->gatherRouteMiddleware($request),
            $this->middleware
        );
 
        foreach ($middlewares as $middleware) {
            if (! is_string($middleware)) {
                continue;
            }
 
            [$name] = $this->parseMiddleware($middleware);
 
            $instance = $this->app->make($name);
 
            if (method_exists($instance, 'terminate')) {
                $instance->terminate($request, $response);
            }
        }
    }
 
    /**
     * Gather the route middleware for the given request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    protected function gatherRouteMiddleware($request)
    {
        if ($route = $request->route()) {
            return $this->router->gatherRouteMiddleware($route);
        }
 
        return [];
    }
 
    /**
Arguments
  1. Illuminate\Http\Request {
      #json: null
      #convertedFiles: null
      #userResolver: Closure($guard = null) { …4}
      #routeResolver: Closure() { …4}
      +attributes: Symfony\Component\HttpFoundation\ParameterBag {}
      +request: Symfony\Component\HttpFoundation\ParameterBag {#1}
      +query: Symfony\Component\HttpFoundation\ParameterBag {#1}
      +server: Symfony\Component\HttpFoundation\ServerBag {}
      +files: Symfony\Component\HttpFoundation\FileBag {}
      +cookies: Symfony\Component\HttpFoundation\ParameterBag {}
      +headers: Symfony\Component\HttpFoundation\HeaderBag {}
      #content: null
      #languages: null
      #charsets: null
      #encodings: null
      #acceptableContentTypes: array:4 [
        0 => "text/html"
        1 => "application/xhtml+xml"
        2 => "application/xml"
        3 => "*/*"
      ]
      #pathInfo: "/baiviet/12"
      #requestUri: "/covid19/baiviet/12"
      #baseUrl: "/covid19"
      #basePath: null
      #method: "GET"
      #format: null
      #session: Illuminate\Session\Store {}
      #locale: null
      #defaultLocale: "en"
      -preferredFormat: null
      -isHostValid: true
      -isForwardedValid: true
      basePath: "/covid19"
      format: "html"
    }
    
  2. Illuminate\Http\Response {}
    
/var/www/html/onyx.vn/covid19/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php
     */
    protected function dispatchToRouter()
    {
        return function ($request) {
            $this->app->instance('request', $request);
 
            return $this->router->dispatch($request);
        };
    }
 
    /**
     * Call the terminate method on any terminable middleware.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Http\Response  $response
     * @return void
     */
    public function terminate($request, $response)
    {
        $this->terminateMiddleware($request, $response);
 
        $this->app->terminate();
    }
 
    /**
     * Call the terminate method on any terminable middleware.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Http\Response  $response
     * @return void
     */
    protected function terminateMiddleware($request, $response)
    {
        $middlewares = $this->app->shouldSkipMiddleware() ? [] : array_merge(
            $this->gatherRouteMiddleware($request),
            $this->middleware
        );
 
        foreach ($middlewares as $middleware) {
            if (! is_string($middleware)) {
Arguments
  1. Illuminate\Http\Request {
      #json: null
      #convertedFiles: null
      #userResolver: Closure($guard = null) { …4}
      #routeResolver: Closure() { …4}
      +attributes: Symfony\Component\HttpFoundation\ParameterBag {}
      +request: Symfony\Component\HttpFoundation\ParameterBag {#1}
      +query: Symfony\Component\HttpFoundation\ParameterBag {#1}
      +server: Symfony\Component\HttpFoundation\ServerBag {}
      +files: Symfony\Component\HttpFoundation\FileBag {}
      +cookies: Symfony\Component\HttpFoundation\ParameterBag {}
      +headers: Symfony\Component\HttpFoundation\HeaderBag {}
      #content: null
      #languages: null
      #charsets: null
      #encodings: null
      #acceptableContentTypes: array:4 [
        0 => "text/html"
        1 => "application/xhtml+xml"
        2 => "application/xml"
        3 => "*/*"
      ]
      #pathInfo: "/baiviet/12"
      #requestUri: "/covid19/baiviet/12"
      #baseUrl: "/covid19"
      #basePath: null
      #method: "GET"
      #format: null
      #session: Illuminate\Session\Store {}
      #locale: null
      #defaultLocale: "en"
      -preferredFormat: null
      -isHostValid: true
      -isForwardedValid: true
      basePath: "/covid19"
      format: "html"
    }
    
  2. Illuminate\Http\Response {}
    
/var/www/html/onyx.vn/covid19/index.php
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/
 
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
 
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);
 
$response->send();
 
$kernel->terminate($request, $response);
 
Arguments
  1. Illuminate\Http\Request {
      #json: null
      #convertedFiles: null
      #userResolver: Closure($guard = null) { …4}
      #routeResolver: Closure() { …4}
      +attributes: Symfony\Component\HttpFoundation\ParameterBag {}
      +request: Symfony\Component\HttpFoundation\ParameterBag {#1}
      +query: Symfony\Component\HttpFoundation\ParameterBag {#1}
      +server: Symfony\Component\HttpFoundation\ServerBag {}
      +files: Symfony\Component\HttpFoundation\FileBag {}
      +cookies: Symfony\Component\HttpFoundation\ParameterBag {}
      +headers: Symfony\Component\HttpFoundation\HeaderBag {}
      #content: null
      #languages: null
      #charsets: null
      #encodings: null
      #acceptableContentTypes: array:4 [
        0 => "text/html"
        1 => "application/xhtml+xml"
        2 => "application/xml"
        3 => "*/*"
      ]
      #pathInfo: "/baiviet/12"
      #requestUri: "/covid19/baiviet/12"
      #baseUrl: "/covid19"
      #basePath: null
      #method: "GET"
      #format: null
      #session: Illuminate\Session\Store {}
      #locale: null
      #defaultLocale: "en"
      -preferredFormat: null
      -isHostValid: true
      -isForwardedValid: true
      basePath: "/covid19"
      format: "html"
    }
    
  2. Illuminate\Http\Response {}
    

Environment & details:

empty
empty
empty
empty
empty
Key Value
REDIRECT_UNIQUE_ID
"aWY9X2SMvIFwZj1Z67exrgAAAAI"
REDIRECT_HTTPS
"on"
REDIRECT_SSL_TLS_SNI
"onyx.vn"
REDIRECT_STATUS
"200"
UNIQUE_ID
"aWY9X2SMvIFwZj1Z67exrgAAAAI"
HTTPS
"on"
SSL_TLS_SNI
"onyx.vn"
HTTP_USER_AGENT
"CCBot/2.0 (https://commoncrawl.org/faq/)"
HTTP_ACCEPT
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
HTTP_ACCEPT_LANGUAGE
"en-US,en;q=0.5"
HTTP_ACCEPT_ENCODING
"br,gzip"
HTTP_HOST
"onyx.vn"
HTTP_CONNECTION
"Keep-Alive"
PATH
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
SERVER_SIGNATURE
""
SERVER_SOFTWARE
"Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.1.33"
SERVER_NAME
"onyx.vn"
SERVER_ADDR
"103.63.109.98"
SERVER_PORT
"443"
REMOTE_ADDR
"18.97.9.173"
DOCUMENT_ROOT
"/var/www/html/onyx.vn"
REQUEST_SCHEME
"https"
CONTEXT_PREFIX
""
CONTEXT_DOCUMENT_ROOT
"/var/www/html/onyx.vn"
SERVER_ADMIN
"root@localhost"
SCRIPT_FILENAME
"/var/www/html/onyx.vn/covid19/index.php"
REMOTE_PORT
"37320"
REDIRECT_URL
"/covid19/baiviet/12"
GATEWAY_INTERFACE
"CGI/1.1"
SERVER_PROTOCOL
"HTTP/1.1"
REQUEST_METHOD
"GET"
QUERY_STRING
""
REQUEST_URI
"/covid19/baiviet/12"
SCRIPT_NAME
"/covid19/index.php"
PHP_SELF
"/covid19/index.php"
REQUEST_TIME_FLOAT
1768308063.071
REQUEST_TIME
1768308063
empty
0. Whoops\Handler\PrettyPageHandler