TÓM TẮT QUYỂN 2019_GENAERALIZED LINEAR MODELS WITH R EXAMPLES

CHƯƠNG 1: Mô hình Thống kê

Vẽ Biểu đồ Dữ liệu (Plotting Data): Phần này nhấn mạnh tầm quan trọng của việc trực quan hóa dữ liệu thông qua biểu đồ. Các nguồn cung cấp nhiều ví dụ về biểu đồ, chẳng hạn như mối quan hệ giữa Thể tích Thở Ra Gắng Sức (FEV) và tuổi hoặc chiều cao (dữ liệu lungcap trong Ví dụ 1.1)…, chiều cao theo tuổi (dữ liệu lungcap), cân nặng sơ sinh trung bình theo tuổi thai, chỉ số sâu răng, mất răng, trám răng (dmft) trung bình theo lượng đường tiêu thụ…, số lượng chim noisy miner theo mật độ cây bạch đàn, tỷ lệ tuabin bị nứt theo giờ sử dụng. Việc vẽ biểu đồ giúp hiểu rõ hơn mối quan hệ giữa các biến.

Mô hình Thống kê Mô tả cả Thành phần Ngẫu nhiên và Hệ thống (Statistical Models Describe Both Random and Systematic): Giới thiệu một trong những ý tưởng cốt lõi của mô hình thống kê, đó là phân tách biến phản hồi thành hai phần: thành phần hệ thống (mô tả xu hướng hoặc mối quan hệ trung bình) và thành phần ngẫu nhiên (mô tả sự biến đổi không giải thích được hoặc nhiễu).

Mô hình Hồi quy (Regression Models): Giới thiệu lớp các mô hình hồi quy, bao gồm tất cả các mô hình được thảo luận trong sách. Các mô hình này là mô hình hồi quy tuyến tính theo tham số. Bộ dự báo tuyến tính (linear predictor), thường có dạng \(\beta_0 + \beta_1 x_{1i} + \cdots + \beta_p x_{pi}\), được định nghĩa trong phần này. Các quy ước ký hiệu cho số lượng biến giải thích (p) và số lượng tham số hồi quy (p’, bao gồm cả hệ số chặn β₀ nếu có) cũng được đưa ra. Ví dụ 1.3 sử dụng dữ liệu lungcap (Ví dụ 1.1) để minh họa thành phần hệ thống và bộ dự báo tuyến tính.

Tiêu chí Đánh giá Mô hình Thống kê (Criteria for Assessing Statistical Models): Trình bày hai tiêu chí quan trọng để đánh giá một mô hình thống kê: độ chính xác (mô hình khớp với dữ liệu tốt đến mức nào) và tính tiết kiệm (mô hình càng đơn giản với ít tham số càng tốt, trong khi vẫn giải thích được dữ liệu).

Sử dụng R cho Mô hình Thống kê (Using R for Statistical Models): Cung cấp lời giới thiệu ban đầu về việc sử dụng ngôn ngữ và môi trường R để thực hiện phân tích mô hình thống kê. R được tích hợp xuyên suốt cuốn sách, và cuốn sách sử dụng hàm glm() để phù hợp với các mô hình GLMs. Các bộ dữ liệu thực tế được sử dụng gần như độc quyền trong sách, và chúng được thu thập trong gói R có tên GLMsData.

CHƯƠNG 2: Mô hình hồi quy tuyến tính

Kiểm định Giả thuyết (Hypothesis Tests): Chương này thảo luận về cách kiểm định giả thuyết cho các hệ số hồi quy βj. Để kiểm định giả thuyết không \(H_0 : \beta_j = \beta_0\) (thường là \({β_{0j}} = 0\)) chống lại giả thuyết đối một phía hoặc hai phía, thống kê \(T = \frac{\beta_j - \beta_{0j}}{SE(\beta_j)}\) được sử dụng. Khi \(H_0\) đúng, T có phân phối t với n − p′ bậc tự do khi phương sai σ² chưa biết. Mức ý nghĩa được xác định bằng cách tham chiếu đến phân phối t này.

So sánh Mô hình Lồng nhau (Comparing Nested Models): Một phần quan trọng là so sánh các mô hình lồng nhau. Một mô hình A được gọi là lồng nhau trong mô hình B nếu mô hình A là trường hợp đặc biệt của mô hình B thu được bằng cách đặt một số hệ số hồi quy (β) bằng 0. Khi so sánh hai mô hình lồng nhau, mục đích là xác định xem mô hình phức tạp hơn có cần thiết hay mô hình đơn giản hơn là đủ. Giả thuyết không chính thức là hai mô hình tương đương.

Kiểm định F trong Phân tích Phương sai (ANOVA F-tests): Phân tích phương sai (ANOVA) được sử dụng để so sánh các mô hình. Kiểm định F cuối cùng trong bảng ANOVA tuần tự, nếu có 1 bậc tự do, thì tương đương với kiểm định t hai phía tương ứng. Thống kê F là bình phương của thống kê t.

Sự Khác biệt giữa Kiểm định t và Kiểm định F: Kết quả từ kiểm định t và kiểm định F thường khác nhau vì kiểm định t luôn điều chỉnh cho tất cả các thành phần khác trong mô hình. Tuy nhiên, như đã nói, chúng tương đương khi kiểm định F có 1 bậc tự do.

Thứ tự thêm biến: Thứ tự thêm các biến giải thích vào mô hình có thể ảnh hưởng đến việc chúng có ý nghĩa thống kê hay không. Mức ý nghĩa của một biến có thể phụ thuộc vào việc nó được thêm vào đầu tiên hay sau khi đã điều chỉnh cho các biến khác.

Hồi quy song song và Độc lập (Parallel and Independent Regressions): thảo luận một tập hợp các mô hình lồng nhau thường được so sánh. Dữ liệu dung tích phổi (lungcap) được sử dụng để minh họa trường hợp một biến đồng biến (chiều cao) và một yếu tố (tình trạng hút thuốc). Độ dốc khác nhau có thể được mô hình hóa bằng cách sử dụng tương tác giữa chiều cao và tình trạng hút thuốc như một biến giải thích.

Nguyên tắc Biên (Marginality Principle): Điều này ngụ ý rằng nếu một số hạng tương tác (ví dụ: A:B) có mặt trong mô hình, thì các số hạng chính tương ứng (A và B) cũng nên được giữ lại, ngay cả khi chúng không có ý nghĩa thống kê riêng lẻ.

Lựa chọn Mô hình (Model Selection):

  • Tiêu chí: AIC (Akaike Information Criterion) và BIC (Bayesian Information Criterion) được sử dụng để hỗ trợ lựa chọn mô hình. AIC được trích xuất bằng hàm extractAIC() trong R. BIC cũng sử dụng hàm này nhưng điều chỉnh hệ số phạt (k). AIC và BIC thấp hơn (gần −∞ hơn) được ưa chuộng hơn…. Ví dụ, dữ liệu lungcap cho thấy sự kết hợp Chiều cao (Ht) và Tình trạng hút thuốc (Smoke) hữu ích hơn Age và Smoke dựa trên AIC và BIC.
  • Công cụ Tự động: Các hàm R như add1() và drop1() giúp khám phá tác động của việc thêm hoặc bớt từng biến một dựa trên AIC (mặc định), kiểm định F hoặc kiểm định Chi bình phương. Hàm step() tự động sử dụng add1() và drop1() để đề xuất một mô hình dựa trên AIC (mặc định) hoặc BIC. step() hỗ trợ lựa chọn tiến (forward), lùi (backward) hoặc từng bước (stepwise).

Quy ước ký hiệu và giải thích: Chương này tiếp tục sử dụng và giới thiệu các quy ước ký hiệu cho mô hình hồi quy tuyến tính theo tham số , bao gồm số lượng biến giải thích (p) và số lượng tham số hồi quy (p’). Việc giải thích các hệ số trong mô hình hồi quy tuyến tính được thảo luận. Ví dụ, giải pháp cho một bài tập ở Chương 3 (sử dụng mô hình tuyến tính cho dữ liệu lungcap) giải thích ý nghĩa của hệ số Smoke khi mô hình có các biến khác (Age, Ht, Gender) hoặc khi biến phản hồi được biến đổi log.

CHƯƠNG 3: Mô hình hồi quy tuyến tính: Chẩn đoán và xây dựng mô hình

Chẩn đoán Mô hình: Đây là một phần trọng tâm của chương. Mục tiêu là kiểm tra các giả định của mô hình hồi quy tuyến tính, đặc biệt là phân phối Chuẩn của sai số, tính độc lập và phương sai không đổi của sai số. Các công cụ chẩn đoán được thảo luận bao gồm:

Phân tích phần dư (Residual Analysis): Trực quan hóa các phần dư (residuals) để phát hiện các vấn đề.

  • Phần dư được chuẩn hóa (Standardized residuals): Thường được vẽ biểu đồ so với giá trị fitted (Fitted values) hoặc các biến giải thích (covariates). Biểu đồ này giúp phát hiện:

    • Phi tuyến tính (Non-linearity): Nếu phần dư có xu hướng cong, mô hình có thể cần thêm các biến phi tuyến hoặc biến đổi biến.

    • Phương sai không đổi (Constant variance) hay tính đồng nhất (homoscedasticity): Nếu phần dư phân tán ngẫu nhiên quanh 0 với độ rộng đồng đều, giả định phương sai không đổi được đáp ứng. Nếu độ rộng phân tán thay đổi theo giá trị fitted hoặc biến giải thích (Heteroscedasticity), cần xử lý, thường là biến đổi biến phản hồi.

    • Các quan sát ngoại lai (Outliers): Các điểm có phần dư lớn bất thường.

  • Phần dư deviance được chuẩn hóa (Standardized deviance residuals): Một dạng phần dư khác, đặc biệt hữu ích trong bối cảnh GLM rộng hơn, được vẽ biểu đồ so với giá trị fitted hoặc bộ dự báo tuyến tính (Linear predictor).

    • Phần dư làm việc (Working residuals): Một dạng phần dư khác nữa, được vẽ biểu đồ so với bộ dự báo tuyến tính.

    • Biểu đồ QQ Chuẩn (Normal Q-Q Plot): So sánh phân phối của phần dư với phân phối Chuẩn để kiểm tra giả định Chuẩn cho sai số.

    • Biểu đồ phần dư so với phần dư trễ (Residuals vs lagged residuals): Giúp kiểm tra tính độc lập của sai số, đặc biệt với dữ liệu chuỗi thời gian.

  • Phân tích điểm ảnh hưởng (Influence Analysis): Xác định các quan sát có ảnh hưởng lớn đến kết quả fitted của mô hình.

    • Khoảng cách Cook (Cook’s distance): Một thước đo phổ biến về mức độ ảnh hưởng của mỗi quan sát lên toàn bộ mô hình. Các điểm có khoảng cách Cook lớn cần được xem xét kỹ lưỡng. Việc loại bỏ các điểm ảnh hưởng và refit mô hình có thể làm thay đổi đáng kể kết quả kiểm định ý nghĩa thống kê.

    • Các thước đo ảnh hưởng khác: dfbeta, dffits, cov.ratio.

  • Biểu đồ phần dư riêng (Partial Residual Plots): Giúp đánh giá mối quan hệ giữa biến phản hồi (sau khi đã điều chỉnh cho các biến khác trong mô hình) và một biến giải thích cụ thể, đồng thời kiểm tra tính tuyến tính của mối quan hệ đó.

Xây dựng và Cải thiện Mô hình (Model-Building Techniques): Dựa trên kết quả chẩn đoán, chương này giới thiệu các kỹ thuật để sửa đổi mô hình nhằm đáp ứng tốt hơn các giả định và/hoặc mô tả mối quan hệ trong dữ liệu chính xác hơn.

  • Biến đổi biến (Transformations):

    • Biến đổi biến phản hồi (Response variable transformation): Áp dụng các hàm như log, căn bậc hai, nghịch đảo cho biến phản hồi để xử lý phương sai không đổi hoặc làm cho phân phối gần với Chuẩn hơn. Các ví dụ bao gồm sử dụng log(FEV), sqrt(FEV), log(Wind) hoặc 1/Wind3cho dữ liệu tương ứng. So sánh các mô hình với biến đổi khác nhau có thể được thực hiện bằng cách kiểm tra biểu đồ phần dư hoặc tiêu chí như AIC/BIC.

    • Biến đổi biến giải thích (Covariate transformation): Áp dụng các hàm (thường là log) cho các biến giải thích để tạo ra mối quan hệ tuyến tính với biến phản hồi.

  • Xu hướng Đa thức (Polynomial Trends): Thay vì một mối quan hệ tuyến tính đơn giản giữa biến phản hồi và một biến giải thích x, có thể thêm các số hạng x², x³, … vào mô hình để mô tả mối quan hệ cong. Việc sử dụng các hàm như poly() trong R được thảo luận. Ý nghĩa thống kê của các số hạng bậc cao hơn được kiểm tra để xác định bậc đa thức phù hợp.

  • Hồi quy Splines (Regression Splines): Một phương pháp linh hoạt hơn đa thức để mô hình hóa các mối quan hệ phi tuyến phức tạp, bằng cách nối các đa thức (hoặc các hàm đơn giản hơn) tại các “điểm nút” (knots). Các hàm như ns() (natural cubic splines) và bs() (basis splines) trong R được giới thiệu và minh họa.

  • Số hạng Tương tác (Interaction Terms): Bao gồm các biến là tích của hai hoặc nhiều biến giải thích (ví dụ: Chiều cao * Tình trạng hút thuốc) để mô hình hóa trường hợp hiệu ứng của một biến phụ thuộc vào giá trị của biến khác. Nguyên tắc Biên (Marginality Principle), khuyến nghị giữ lại các số hạng chính (main effects) nếu số hạng tương tác của chúng được đưa vào mô hình, thường được áp dụng.

  • Lựa chọn Mô hình (Model Selection): Tiếp tục sử dụng các tiêu chí như AIC và BIC để so sánh các mô hình đã fitted sau khi áp dụng các kỹ thuật xây dựng mô hình. Các trường hợp nghiên cứu và bài tập (Case Studies and Problems): Chương 3 sử dụng nhiều bộ dữ liệu khác nhau để minh họa các khái niệm và kỹ thuật này, cũng như cung cấp các bài tập cho người đọc thực hành. Một số bộ dữ liệu được đề cập nhiều lần bao gồm lungcap (dung tích phổi), heatcap (dung lượng nhiệt), dmft (răng sâu, mất, trám), foodcon (tiêu thụ thức ăn của cá), ruminant (năng lượng tiêu hóa ở động vật nhai lại), ratliver (thuốc giữ lại trong gan chuột), fluoro (thời gian và liều phóng xạ trong CT), butterfat (chất béo bơ trong sữa bò). Các bài tập yêu cầu người đọc thực hiện chẩn đoán, biến đổi biến, fitted các mô hình phức tạp hơn và giải thích kết quả.

CHƯƠNG 4: Ý tưởng ước lượng khả năng xảy ra cực đại

Khái quát hóa mô hình tuyến tính chuẩn (Generalizing the Normal Linear Model): Chương thảo luận về nhu cầu sử dụng các mô hình hồi quy không chuẩn tắc (non-normal regression models). Các tình huống điển hình bao gồm biến đáp ứng nhị phân hoặc đếm tuân theo phân phối nhị thức, dữ liệu đếm không giới hạn có thể tuân theo phân phối Poisson hoặc nhị thức âm, và các quan sát dương liên tục (có thể tuân theo phân phối Gamma hoặc Inverse Gaussian4).

Ước lượng khả năng xảy ra cực đại (Maximum Likelihood Estimation - MLE):

  • Ý tưởng cơ bản là xem xét hàm xác suất của dữ liệu đã quan sát như là một hàm của các tham số mô hình chưa biết. Hàm này được gọi là hàm khả năng xảy ra (likelihood function), ký hiệu L(ζ;y), trong đó y là dữ liệu quan sát và ζ là vector các tham số.

  • Nguyên tắc khả năng xảy ra cực đại là ước lượng các tham số bằng những giá trị (gọi là ước lượng khả năng xảy ra cực đại - MLE, ký hiệu có mũ, ví dụ: \(\hat{\zeta}\)) sao cho hàm khả năng xảy ra đạt giá trị lớn nhất.

  • Để thuận tiện trong tính toán, thường làm việc với hàm log-khả năng xảy ra (log-likelihood function), \((\zeta; y) = \log L(\zeta; y)\). Việc tối đa hóa hàm log-khả năng xảy ra là tương đương với việc tối đa hóa hàm khả năng xảy ra.

  • Một điểm quan trọng được nêu bật là phương pháp bình phương tối thiểu (least-squares) thực chất là một trường hợp đặc biệt của MLE khi mô hình tuân theo phân phối chuẩn tắc (normal linear regression model). Đối với mô hình hồi quy tuyến tính chuẩn, tối đa hóa hàm log-khả năng xảy ra đối với các hệ số hồi quy là tương đương với việc tối thiểu hóa tổng bình phương phần dư (residual sum of squares - rss).

    MLE cho một và nhiều tham số:

  • Để tìm MLE, một cách tiếp cận có hệ thống là sử dụng phép tính vi tích phân. Đối với một tham số duy nhất ζ, đạo hàm của hàm log-khả năng xảy ra theo ζ được gọi là hàm điểm (score function), ký hiệu \(U(\zeta) = \frac{d}{d\zeta}\). Ước lượng MLE \(\hat{\zeta}\) được tìm bằng cách giải phương trình điểm (score equation) \(U(\hat{\zeta}) = 0\). Đối với các hàm log-khả năng xảy ra được xét trong sách (đơn đỉnh và khả vi liên tục), lời giải của phương trình điểm luôn cho ra ước lượng MLE. Hàm điểm có tính chất quan trọng là kỳ vọng của nó bằng 0 khi được tính tại giá trị tham số thực.

  • Đối với nhiều tham số chưa biết, ví dụ như p’ tham số hồi quy βj, sẽ có p’ phương trình điểm tương ứng. Biến đáp ứng yi được giả định tuân theo một phân phối (thường từ họ EDM) được đặc trưng bởi trung bình μi và tham số phân tán φ. Trung bình μi là hàm của các biến giải thích và tham số hồi quy, thường thông qua bộ dự báo tuyến tính.

    Công thức ma trận cho MLE:

  • Phương pháp MLE có thể được biểu diễn bằng đại số ma trận. Vector các tham số được ký hiệu là ζ. Hàm điểm trở thành một vector điểm (score vector) U(ζ), chứa các đạo hàm riêng theo từng tham số. Phương trình điểm là \(U(\hat{\zeta}) = 0\).

  • Đạo hàm cấp hai (hoặc ma trận các đạo hàm riêng cấp hai) của hàm log-khả năng xảy ra được gọi là ma trận thông tin quan sát (observed information matrix), J(ζ). Ma trận thông tin kỳ vọng (Expected information matrix) hay ma trận thông tin Fisher là \(I(\zeta) = \mathbb{E}[J(\zeta)]\). Ma trận I(ζ) thường có dạng đơn giản hơn J(ζ) và có một mối quan hệ quan trọng với phương sai của hàm điểm và ước lượng MLE.

Thuật toán Fisher Scoring: Việc giải phương trình điểm \(U(\hat{\zeta}) = 0\) thường đòi hỏi các phương pháp lặp. Thuật toán Fisher Scoring là một phương pháp lặp hiệu quả để tính toán MLE, sử dụng ma trận thông tin kỳ vọng I(ζ) thay vì ma trận thông tin quan sát J(ζ). Công thức lặp của Fisher Scoring là \[ \hat{\zeta}^{(r+1)} = \hat{\zeta}^{(r)} + I\left( \hat{\zeta}^{(r)} \right)^{-1} U\left( \hat{\zeta}^{(r)} \right) \]

trong đó r là số lần lặp. Thuật toán này được sử dụng để ước lượng các tham số hồi quy βj trong GLMs.

Kiểm định giả thuyết:

  • Lý thuyết khả năng xảy ra cung cấp cơ sở cho ba loại kiểm định suy luận chính: kiểm định Wald (Wald test), kiểm định điểm (Score test), và kiểm định tỷ số khả năng xảy ra (Likelihood Ratio test).

  • Các kiểm định này dựa trên kết quả tiệm cận mẫu lớn (Large Sample Asymptotic Results), có nghĩa là phân phối của các thống kê kiểm định xấp xỉ tuân theo các phân phối lý thuyết (thường là phân phối chi-bình phương) khi cỡ mẫu n đủ lớn (n → ∞)

  • Kiểm định Wald có thể gặp vấn đề với dữ liệu nhị thức. Kiểm định điểm và kiểm định tỷ số khả năng xảy ra thường đáng tin cậy hơn. Kiểm định tỷ số khả năng xảy ra được sử dụng để so sánh các mô hình lồng nhau (nested models). Kiểm định điểm thường đòi hỏi ít tính toán hơn vì không cần ước lượng mô hình đầy đủ dưới giả thuyết đối.

CHƯƠNG 5: Các mô hình tuyến tính tổng quát (GLMs): Cấu trúc

Thành phần ngẫu nhiên (Random component): Thành phần này xác định phân phối xác suất của biến đáp ứng (y). Trong GLMs, biến đáp ứng được giả định tuân theo một phân phối thuộc họ Mô hình Phân tán Lũy thừa (Exponential Dispersion Model - EDM). Mỗi phân phối EDM có một Hàm phương sai (V(μ)) đặc trưng, mô tả mối quan hệ giữa phương sai và giá trị trung bình (μ) của y, và một biểu thức cho Độ lệch đơn vị (d(y, μ)). Các ví dụ phổ biến về EDM bao gồm phân phối Chuẩn (Normal), Poisson, Nhị thức (Binomial), và Gamma, mỗi loại có V(μ) và d(y, μ) riêng.

Thành phần có hệ thống (Systematic component): Thành phần này liên kết các biến giải thích (x) với giá trị trung bình (μ) của biến đáp ứng [previous summary]. Nó được xác định bởi:

  • Bộ dự báo tuyến tính (linear predictor - η): Là một tổ hợp tuyến tính của các biến giải thích và các tham số mô hình \[ \eta = \beta_0 + \sum \beta_j x_j \]

  • Hàm liên kết (link function - g): Là một hàm đơn điệu và khả vi liên hệ giá trị trung bình μ với bộ dự báo tuyến tính η \(g(\mu) = \eta\). Hàm liên kết chính tắc (canonical link) là trường hợp đặc biệt khi η bằng với tham số chính tắc (θ) của phân phối EDM.

Định nghĩa GLM: Một GLM được định nghĩa bằng cách chỉ định cụ thể họ phân phối EDM cho thành phần ngẫu nhiên và hàm liên kết cho thành phần có hệ thống. Cấu trúc này thường được ký hiệu là glm(edm; Link function).

Hồi quy tuyến tính là một trường hợp đặc biệt của GLM, sử dụng phân phối Chuẩn (Normal) với hàm phương sai \(V(\mu) = 1\) (tức là phương sai hằng) và hàm liên kết đồng nhất (identity link) \(g(\mu) = \mu\).

Độ lệch tổng (Total Deviance): Đây là thước đo mức độ phù hợp của mô hình, được tính bằng tổng trọng số của các độ lệch đơn vị cho tất cả các quan sát Việc ước lượng tham số trong GLMs thường nhằm mục đích tối thiểu hóa. Độ lệch tổng, tương đương với việc tối đa hóa hàm log-likelihood.

CHƯƠNG 6: Các mô hình tuyến tính tổng quát: Ước lượng

Tính toán khả năng xảy ra (Likelihood Calculations):

  • Việc điều chỉnh GLMs dựa vào cấu trúc của EDMs.

  • Đối với EDMs, đạo hàm của hàm log khả năng xảy ra (log probability function) theo μ có dạng đơn giản2. Cụ thể \[ \frac{\partial \log P(y; \mu, \phi/w)}{\partial \mu} = \frac{w(y - \mu)}{\phi V(\mu)} \]

Phương trình Score và Thông tin (Score Equations and Information):

  • Dạng ma trận của phương trình score là \[U = X^\top W M (y - \mu) / \phi\].

  • Dạng ma trận của ma trận thông tin cho β là \[I = \frac{X^\top W X}{\phi}\].

  • Trong đó: W là ma trận đường chéo của trọng số làm việc (working weights) Wᵢ; M là ma trận đường chéo của đạo hàm hàm liên kết (link derivatives) \(\frac{d \eta_i}{d \mu_i}\).

Tính toán ước lượng của β (Computing Estimates of β):

  • Các nguồn được cung cấp không mô tả chi tiết thuật toán (ví dụ: Fisher scoring hoặc IRLS) được sử dụng trong Chương 6 để tính toán ước lượng \(\hat{\beta}\).

  • Tuy nhiên, chúng cung cấp các đạo hàm của hàm log khả năng xảy ra theo μ và βⱼ, là những thành phần cần thiết cho các thuật toán ước lượng dựa trên đạo hàm (như phương pháp Newton-Raphson hoặc Fisher scoring).

Độ lệch dư (Residual Deviance ):

  • Residual deviance được định nghĩa dựa trên đơn vị độ lệch (unit deviance) d(y, μ).

  • Đơn vị độ lệch d(y, μ) là một thước đo sự khác biệt (discrepancy) giữa y và μ. Nó được định nghĩa là \[d(y, \mu) = 2 \big\{ t(y, y) - t(y, \mu) \big\}\] trong đó \(t(y,μ) = yθ - κ(θ)\) là phần của hàm xác suất EDM phụ thuộc vào θ (hoặc μ), d(y, μ) luôn không âm và bằng 0 khi \(y = μ\).

  • Đối với các trường hợp biên, định nghĩa giới hạn của đơn vị độ lệch được sử dụng11. Ví dụ, đối với phân phối Poisson, \(d(y, \mu) = 2 \left\{ y \log\left(\frac{y}{\mu}\right) - (y - \mu) \right\}\) cho y ≠ 0 và \(d(0, \mu) = 2\mu\) cho y = 0. Đối với phân phối chuẩn, \(d(y, \mu) = (y - \mu)^2\).

  • Hàm xác suất của EDM có thể viết lại dưới dạng mô hình phân tán sử dụng đơn vị độ lệch: \[ P(y; \mu, \phi) = b(y, \phi) \exp\left\{ -\frac{d(y, \mu)}{2 \phi} \right\} \]

  • Residual deviance tổng cộng cho mô hình đã fit μ̂ là tổng có trọng số của các đơn vị độ lệch cho mỗi quan sát.

  • Độ lệch dư được chia tỷ lệ (Scaled residual deviance) là \(D^*(y, \hat{\mu}) = \frac{D(y, \hat{\mu})}{\phi}\)

  • Độ lệch dư được liên kết với bậc tự do dư

  • Residual deviance có thể truy cập bằng hàm deviance() trong R

Sai số chuẩn cho β̂ (Standard Errors for β̂):

  • Sai số chuẩn (Std. Error) cho các ước lượng hệ số (β ) ̂được hiển thị trong kết quả tóm tắt mô hình tuyến tính (lm)16 và GLM (glm)

  • Các sai số chuẩn của \(\hat{\beta}_j\), ký hiệu là \(\mathrm{se}(\hat{\beta}_j)\), được tính bằng cách lấy căn bậc hai của các phần tử trên đường chéo chính của ma trận nghịch đảo của ma trận thông tin đã nhân với φ (hoặc ước lượng của nó). Công thức là \(\mathrm{se}(\hat{\beta}_j) = \sqrt{\phi \, \nu_j}\).

Ước lượng GLMs giống hồi quy tuyến tính cục bộ (Estimation of GLMs Is Locally Like Linear Regression):

  • Khái niệm “Ước lượng GLMs giống hồi quy tuyến tính cục bộ” được đề cập trong tóm tắt trước đây, nhưng tiêu đề hoặc nội dung chi tiết giải thích sự tương đồng này không có trong các đoạn trích nguồn hiện tại.

  • Tuy nhiên, các đoạn trích cho thấy các kỹ thuật chẩn đoán cho GLMs (như biểu đồ phần dư chuẩn hóa so với giá trị fit, biểu đồ Q-Q của phần dư, Cook’s distance) tương tự như các kỹ thuật được sử dụng trong hồi quy tuyến tính, cho thấy một sự tương đồng trong phân tích sau khi fit mô hình.

Ước lượng φ (Estimating φ): Tham số phân tán φ là một phần của định nghĩa EDM và ảnh hưởng đến phương sai \(\operatorname{var}(y) = \phi V(\mu)\). Đối với một số phân phối, φ được biết trước (ví dụ: φ = 1 cho phân phối Poisson). Đối với phân phối chuẩn, \(\phi = \sigma^2\).

Sử dụng R (Using R):

  • Hàm glm() được sử dụng để fit GLMs.

  • Cấu trúc cốt lõi của một GLM trong định nghĩa được ký hiệu là glm(edm; Link function). Trong R, điều này được chỉ định bằng cách sử dụng đối số family() với tên phân phối và hàm liên kết, ví dụ: family(“binomial”, link=“logit”).

  • Hàm summary() cung cấp thông tin phong phú về mô hình GLM đã fit. Kết quả từ summary() thường bao gồm các ước lượng hệ số, sai số chuẩn và giá trị p-value .

  • Có thể truy cập residual deviance bằng hàm deviance().

  • Có thể truy cập bậc tự do dư bằng hàm df.residual().

CHƯƠNG 7: Các mô hình tuyến tính tổng quát: Suy luận

Suy luận về các Hệ số trong GLMs: Suy luận về các tham số (ví dụ: các hệ số hồi quy β) là một phần quan trọng của việc hiểu mô hình. Các đoạn trích nguồn đề cập đến các phương pháp kiểm định giả thuyết về các tham số này, chẳng hạn như kiểm định giả thuyết null \(H_0: \beta_1 =0\) . Ba thống kê kiểm định chính được sử dụng cho mục đích này là:

  • Kiểm định Wald: Đây là một trong những kiểm định phổ biến được sử dụng để đánh giá sự ý nghĩa thống kê của các hệ số riêng lẻ trong mô hình GLM. Kết quả từ summary() trong R cho mô hình GLM thường bao gồm các ước lượng hệ số, sai số chuẩn và giá trị p-value, thường dựa trên kiểm định.

  • Kiểm định Score (hoặc Rao) : Kiểm định này cũng được sử dụng để kiểm định giả thuyết về các tham số.

  • Kiểm định Likelihood Ratio: Kiểm định này so sánh độ khớp của hai mô hình lồng nhau (một mô hình là trường hợp đặc biệt của mô hình kia) bằng cách sử dụng tỷ lệ giữa các hàm hợp lý (likelihood functions).

Theo lý thuyết tiệm cận, khi kích thước mẫu đủ lớn (n → ∞), mỗi thống kê kiểm định này (Wald, Score, Likelihood Ratio) sẽ tuân theo phân phối chi-square (χ²) với bậc tự do bằng số lượng tham số đang được kiểm định dưới giả thuyết. Giá trị thống kê kiểm định lớn cung cấp bằng chứng mạnh mẽ để bác bỏ giả thuyết null, cho thấy biến giải thích tương ứng có mối quan hệ có ý nghĩa thống kê với biến phản hồi .

Lựa chọn giữa các Mô hình GLMs: Việc lựa chọn mô hình phù hợp là rất quan trọng3. Nguồn tài liệu mô tả các phương pháp khác nhau tùy thuộc vào mối quan hệ giữa các mô hình đang được so sánh.

  • So sánh các Mô hình Lồng nhau (Nested Models):

    • Đối với các mô hình hồi quy tuyến tính (một trường hợp đặc biệt của GLMs), Phân tích Phương sai (ANOVA) có thể được sử dụng để so sánh hai mô hình lồng nhau.
    • Trong bảng ANOVA, tổng bình phương (Sum Sq) được phân tách thành các thành phần do từng biến giải thích đóng góp ( Sequential Analysis of Variance). Một bảng ANOVA có thể cho thấy sự đóng góp của từng biến khi được thêm vào mô hình theo một thứ tự nhất định.
    • Đối với GLMs nói chung, hàm anova() trong R có thể được sử dụng để so sánh các mô hình lồng nhau và có thể sử dụng các kiểm định như kiểm định Chi-square (test=“Chisq”).
  • So sánh các Mô hình không Lồng nhau (Non-nested Models):

    • Khi so sánh các mô hình không lồng nhau hoặc để lựa chọn mô hình tổng thể, các tiêu chí thông tin thường được sử dụng. Hai tiêu chí phổ biến được đề cập là:

      • Tiêu chí thông tin Akaike (AIC - Akaike Information Criterion): AIC được tính toán dựa trên hàm hợp lý cực đại và số lượng tham số trong mô hình. Công thức cơ bản (khi tham số phân tán φ đã biết) là \(\mathrm{AIC} = -2 \times \log\text{-likelihood} + 2p'\), trong đó p′ là số lượng tham số hồi quy (bao gồm cả hệ số chặn nếu có).

      • Tiêu chí thông tin Bayesian (BIC - Bayesian Information Criterion): BIC cũng dựa trên hàm hợp lý nhưng áp dụng một “hình phạt” lớn hơn cho số lượng tham số so với AIC, đặc biệt là với kích thước mẫu lớn [trích dẫn trước đó]. Công thức cơ bản (khi φ đã biết) là \(\mathrm{BIC} = -2 \times \log\text{-likelihood} + (\log n) \cdot p'\).

    • Khi tham số phân tán φ chưa biết, công thức tính AIC và BIC thường thêm 1 vào số tham số (p′+1) để tính đến việc ước lượng φ, và ước lượng deviance trung bình thường được R sử dụng cho φ.

    • Mô hình có giá trị AIC hoặc BIC nhỏ hơn (gần -∞ hơn) được coi là mô hình được ưa chuộng hơn vì nó đạt được sự cân bằng tốt hơn giữa độ khớp dữ liệu và sự đơn giản của mô hình (tính tiết kiệm - parsimony). Các nguồn tài liệu minh họa việc sử dụng AIC và BIC để so sánh các mô hình khác nhau, ví dụ như trong bài toán ước lượng tuổi bị sâu răng (DMFT) hoặc chọn phân phối phù hợp cho dữ liệu.

Chẩn đoán Mô hình (Model Diagnostics): Sau khi mô hình được trang bị, việc kiểm tra các giả định của mô hình là rất quan trọng. Nguồn tài liệu minh họa nhiều loại biểu đồ chẩn đoán có thể tạo ra trong R:

  • Biểu đồ phần dư (Residuals): Biểu đồ phần dư chuẩn hóa (standardized residuals) so với các giá trị dự đoán (fitted values) có thể giúp phát hiện các vấn đề như sai số không đồng nhất (heteroscedasticity) hoặc dạng phi tuyến tính không được mô hình nắm bắt.

  • Biểu đồ Q-Q (Quantile-Quantile Plot): Biểu đồ này so sánh phân phối của phần dư (ví dụ: phần dư deviance hoặc quantile) với phân phối lý thuyết (thường là phân phối Chuẩn) để kiểm tra giả định về phân phối sai số hoặc biến ngẫu nhiên. Nguồn tài liệu đề cập đến phần dư quantile ngẫu nhiên (randomized quantile residuals) như một loại phần dư hữu ích cho GLMs.

  • Biểu đồ Cook’s Distance: Giúp xác định các điểm dữ liệu có ảnh hưởng lớn (influential points) đến các ước lượng hệ số của mô hình.

  • Biểu đồ Partial (Component-plus-Residual Plots): Có thể giúp đánh giá mối quan hệ giữa biến phản hồi (sau khi tính đến các biến khác) và một biến giải thích cụ thể, hỗ trợ kiểm tra dạng hàm của biến giải thích. Các loại phần dư khác nhau (như phần dư deviance, phần dư working, phần dư quantile) có thể được sử dụng cho các mục đích chẩn đoán khác nhau trong GLMs.

Sử dụng R: R là một môi trường và ngôn ngữ để tính toán thống kê và là công cụ chính được sử dụng trong nguồn tài liệu để fit và phân tích GLMs.

  • Hàm glm() được sử dụng để trang bị (fit) các mô hình GLM .

  • Hàm summary() cung cấp tóm tắt mô hình, bao gồm các ước lượng hệ số, sai số chuẩn, và p-value.

  • Hàm anova() được dùng để so sánh các mô hình lồng nhau.

CHƯƠNG 8: Các mô hình tuyến tính tổng quát: Chẩn đoán

Các giả định của GLMs: GLMs có hai thành phần chính: thành phần ngẫu nhiên và thành phần hệ thống.

  • Thành phần ngẫu nhiên: Các quan sát yi độc lập và xuất phát từ một mô hình phân tán mũ (edm) xác định, với \(y_i \sim \text{EDM}\left(\mu_i, \frac{\phi}{w_i}\right)\), trong đó wi là các trọng số cố định đã biết và φ là tham số phân tán chưa biết.

  • Thành phần hệ thống: Có một hàm liên kết g(·) đơn điệu, khả vi đã biết sao cho \(g(\mu_i) = \eta_i = o_i + \beta_0 + \sum_j \beta_j x_{j,i}\), với \(ηi\) là bộ dự báo tuyến tính và oi là các offset (thường bằng 0).

Các loại phần dư cho GLMs: Các phần dư đơn thuần \(r_i = y_i - \hat{\mu}_i\) không đủ vì phương sai của chúng không cố định. Cần sử dụng các loại phần dư khác:

  • Phần dư Pearson (Pearson Residuals): \(r_P = \frac{y - \hat{\mu}}{\sqrt{V(\hat{\mu})}}\). Chúng có phân phối xấp xỉ chuẩn.

  • Phần dư Deviance (Deviance Residuals): \[ rD = \text{sign}(y - \hat{\mu}) \cdot \sqrt{2w \cdot d(y, \hat{\mu})} \] trong đó \(d(y, \hat{\mu})\) là deviance đơn vị.

Phần dư deviance có khả năng phân phối chuẩn hơn phần dư Pearson và chính xác là phân phối chuẩn cho các GLM Phân phối Chuẩn (Normal) và Inverse Gaussian.

  • Phần dư Quantile (Quantile Residuals): rQ được định nghĩa sao cho xác suất tích lũy của nó trên phân phối chuẩn tắc bằng với xác suất tích lũy của quan sát y trên edm đã fitted. Chúng có phân phối chính xác là chuẩn, ngoại trừ biến động trong ước lượng μ và φ. Đối với các edm rời rạc, cần có một điều chỉnh đơn giản liên quan đến việc ngẫu nhiên hóa, đôi khi được gọi là phần dư quantile ngẫu nhiên hóa. Phần dư Quantile không được định nghĩa cho các mô hình quasi-likelihood vì hàm phân phối tích lũy (cdf) không được xác định. Phần dư quantile tốt nhất để sử dụng trong các biểu đồ phần dư để tìm kiếm xu hướng và mẫu.

Leverages trong GLMs: Leverages (hi) là các phần tử trên đường chéo của ma trận mũ H. Đối với GLMs,

\[ H = W^{0.5} X (X^T W X)^{-1} X^T W^{1/2} \]

Trong đó W là ma trận đường chéo của các trọng số làm việc (working weights). Leverages phụ thuộc vào giá trị của các biến giải thích và trọng số, không phụ thuộc vào giá trị của biến phản hồi. Leverage cao (h > 3p’/n) cho thấy quan sát đó có giá trị covariate (biến giải thích) cực đoan và ảnh hưởng mạnh đến giá trị fitted tương ứng \((η̂i)\). Có thể tính toán leverages trong R bằng hàm hatvalues().

Leverage Standardized Residuals: Phần dư chuẩn hóa (Leverage Standardized Residuals) có phương sai xấp xỉ hằng số5…. Chúng được tính bằng cách chia phần dư (Pearson hoặc deviance) cho ước lượng độ lệch chuẩn của nó, bao gồm tham số phân tán φ và leverage h. Công thức cho phần dư Pearson chuẩn hóa \[rP' = rP / sqrt(φ(1-h))\] Phần dư quantile đã được ánh xạ tới phân phối chuẩn tắc, nên phương sai của chúng gần bằng một. Phần dư Studentized cũng liên quan và hữu ích để xác định điểm ngoại lai.

Khi nào sử dụng loại phần dư nào: Phần dư quantile, deviance và Pearson đều có phân phối chính xác là chuẩn khi dữ liệu xuất phát từ phân phối Chuẩn. Phần dư deviance cũng chính xác là chuẩn cho GLMs Inverse Gaussian. Tuy nhiên, với các edm rời rạc, phần dư Pearson và deviance không đảm bảo gần chuẩn trừ khi đáp ứng các điều kiện nhất định về kích thước trung bình. Phần dư Quantile rất được khuyến khích sử dụng cho các edm rời rạc và thường được dùng để kiểm tra các giả định mô hình trong các biểu đồ phần dư. Nên sử dụng phần dư chuẩn hóa hoặc Studentized vì chúng có phương sai xấp xỉ hằng số.

Kiểm tra các giả định mô hình: Một chiến lược phân tích chẩn đoán cho GLMs bao gồm kiểm tra các giả định:

  • Độc lập: Vẽ biểu đồ phần dư so với phần dư bị trễ (lagged residuals) để kiểm tra tính độc lập của các quan sát theo thời gian.

  • Thành phần hệ thống (tính tuyến tính): Sử dụng các biểu đồ phần dư (deviance hoặc quantile) so với các biến giải thích hoặc giá trị fitted (μ̂). Mục tiêu là thấy các điểm phân tán ngẫu nhiên không có mẫu hoặc xu hướng rõ ràng.

  • Thành phần ngẫu nhiên (phương sai và phân phối): Sử dụng các biểu đồ phần dư so với giá trị fitted (μ̂) để kiểm tra phương sai hằng số (mong muốn không thấy mẫu). Sử dụng biểu đồ Q-Q (Quantile-Quantile) của phần dư (quantile, deviance chuẩn hóa, hoặc Studentized) để kiểm tra giả định phân phối (tính chuẩn)19. Trên biểu đồ Q-Q chuẩn, các điểm nên nằm gần đường thẳng y=x. Các mẫu khác nhau trên biểu đồ Q-Q có thể gợi ý về độ xiên, đuôi nặng/nhẹ hoặc phân phối hai đỉnh.

Các điểm ngoại lai và các quan sát có ảnh hưởng:

  • Điểm ngoại lai (Outliers): Các quan sát có phần dư bất thường lớn (dương hoặc âm). Biểu đồ Q-Q thường tiện lợi để xác định chúng. Phần dư deviance chuẩn hóa hoặc phần dư quantile thường được sử dụng.

  • Các quan sát có ảnh hưởng (Influential Observations): Những quan sát ảnh hưởng mạnh đến các ước lượng trong mô hình fitted. Các thống kê như Cook’s distance, dfbetas, dffits, và covariance ratio được sử dụng để xác định các quan sát có ảnh hưởng. Cook’s distance kết hợp kích thước của phần dư (đo bằng phần dư Pearson chuẩn hóa) và leverage. Các tiêu chí để đánh dấu các điểm có ảnh hưởng đã được thảo luận cho hồi quy tuyến tính và áp dụng tương tự cho GLMs. Hàm influence.measures() trong R tính toán các thống kê này và đánh dấu các điểm có ảnh hưởng. Một quan sát có thể có leverage cao nhưng không ảnh hưởng nếu phần dư nhỏ, và ngược lại.

Khắc phục sự cố (Remedies): thảo luận về việc khắc phục các vấn đề được xác định. Nếu phần dư cho thấy sự phụ thuộc lẫn nhau, cần sử dụng các phương pháp khác. Các vấn đề liên quan đến thành phần hệ thống (không tuyến tính) có thể được giải quyết bằng cách thêm các biến giải thích, các hạng tử bậc cao (polynomial) hoặc splines. Các vấn đề về thành phần ngẫu nhiên (như overdispersion hoặc phương sai không hằng số) có thể được giải quyết bằng cách sử dụng mô hình quasi-likelihood hoặc các phân phối khác trong họ edm như Negative Binomial hoặc Tweedie, nếu phù hợp với cấu trúc phương sai.

Quasi-Likelihood và Extended Quasi-Likelihood: Được sử dụng khi mối quan hệ trung bình-phương sai của dữ liệu gợi ý một phân phối không thuộc họ edm. Hàm quasi-likelihood Q hoạt động giống như hàm log-likelihood nhưng không tương ứng với bất kỳ hàm mật độ xác suất nào. Các mô hình quasi-likelihood phổ biến nhất là cho dữ liệu đếm hoặc tỷ lệ bị overdispersion (phương sai lớn hơn mức kỳ vọng theo phân phối Poisson hoặc Binomial chuẩn). Các mô hình này (quasi-Poisson, quasi-binomial) ước lượng một tham số phân tán φ > 1. Các mô hình quasi không thể tính toán AIC hoặc phần dư quantile (vì không có cdf). Suy luận cho các mô hình này sử dụng kiểm định Wald (summary()), kiểm định Score (glm.scoretest()) và kiểm định tỷ số quasi-likelihood (tương đương với ANOVA cho GLMs), trong đó sử dụng kiểm định F vì φ được ước lượng. Extended quasi-likelihood Q+ có thể được sử dụng để ước lượng φ hoặc mô hình hóa cấu trúc phương sai.

Đa cộng tuyến (Collinearity): Xảy ra khi các biến giải thích có tương quan cao . Điều này có thể làm cho các ước lượng hệ số không ổn định và sai số chuẩn lớn .

Sử dụng R: Có thể thực hiện phân tích chẩn đoán GLM trong R.

  • Sử dụng summary() để xem kết quả kiểm định Wald.

  • Sử dụng anova() để so sánh các mô hình lồng nhau; dùng test=“F” cho mô hình quasi và test=“Chisq” cho mô hình Binomial/Poisson/Gamma/Inverse Gaussian chuẩn.

  • Sử dụng hatvalues() để tính leverages.

  • Sử dụng cooks.distance(), dffits(), dfbetas(), covratio(), influence.measures() để tính và xác định các quan sát có ảnh hưởng.

  • Sử dụng rstandard() để tính phần dư chuẩn hóa.

  • Sử dụng qresid() từ package statmod để tính phần dư quantile (cho các edm có cdf).

  • Sử dụng các hàm vẽ biểu đồ chuẩn như plot(), qqnorm(), qqline() để tạo các biểu đồ chẩn đoán.

  • Các mô hình quasi được chỉ định trong glm() bằng cách sử dụng family=quasibinomial(), family=quasipoisson(), hoặc family=quasi() với đối số link và variance phù hợp.

CHƯƠNG 9: Mô hình cho tỷ lệ: Binomial GLMs

Mô hình hóa tỷ lệ: Dữ liệu tỷ lệ thường là số “thành công” (y) trong tổng số thử nghiệm cố định (m). Trong R, biến phản hồi có thể được chỉ định là y/m với weights=m hoặc cbind(success, fail). Đối với dữ liệu nhị phân (m=1), có thể sử dụng vector số 0/1, factor, hoặc logicals.

Hàm liên kết:

  • Kết nối giá trị trung bình (μ) với bộ dự báo tuyến tính (η).

  • Các hàm phổ biến cho phân phối Binomial bao gồm Logit (liên kết chính tắc), Probit, và Complementary log-log (cloglog).

  • Tỷ lệ Odds và Logit Link: Hàm logit \(\log\left(\frac{\mu}{1 - \mu}\right)\) mô hình hóa logarit của odds1. Hệ số hồi quy (β1) cho một biến x biểu thị mức tăng log-odds khi x tăng một đơn vị. Tỷ lệ odds (odds ratio) khi x tăng một đơn vị là exp(β1).

Overdispersion: Xảy ra khi phương sai thực tế của dữ liệu lớn hơn phương sai kỳ vọng theo phân phối Binomial tiêu chuẩn (mμ(1−μ)). Overdispersion làm cho sai số chuẩn ước lượng bị thấp hơn, khoảng tin cậy hẹp hơn. Khi có overdispersion, nên sử dụng mô hình quasi-binomial (family=quasibinomial()) trong R, mô hình này ước lượng tham số phân tán φ > 1.

Khi Wald Tests thất bại: Kiểm định Wald (dựa trên \(t\text{-statistic} = \frac{\hat{\beta}_j}{\mathrm{se}(\hat{\beta}_j)}\) có thể không đáng tin cậy, đặc biệt khi các giá trị fitted (μ̂) rất gần 0 hoặc 1. Trong các trường hợp này, kiểm định tỷ số khả năng (Likelihood Ratio Tests - LRT) hoặc kiểm định Score thường đáng tin cậy hơn.

Goodness-of-Fit cho binary responses: Đối với dữ liệu hoàn toàn nhị phân (mỗi quan sát là một thử nghiệm duy nhất), các thống kê goodness-of-fit tiêu chuẩn (như deviance hoặc Pearson) không cung cấp thông tin hữu ích về sự phù hợp của mô hình .Để đánh giá mô hình, nên so sánh các mô hình lồng nhau bằng LRT hoặc kiểm định Score.

Sử dụng R:

  • Sử dụng hàm glm() với family=binomial().

  • Có thể chỉ định hàm liên kết khác bằng đối số link trong binomial.

  • Hàm summary() cung cấp kết quả ước lượng tham số và kiểm định Wald.

  • Hàm anova() được dùng để so sánh mô hình lồng nhau. Sử dụng test=“Chisq” cho Binomial tiêu chuẩn và test=“F” cho quasi-binomial (khi φ được ước lượng).

  • Hàm dose.p() trong package MASS có thể ước lượng ED50 (liều gây ra phản ứng ở 50% đối tượng).

CHƯƠNG 10: Mô hình cho số lượng: Poisson và Negative Binomial GLMs

Poisson GLMs:

  • Phân phối Poisson là lựa chọn mặc định cho dữ liệu đếm. Hàm phương sai của nó là V(μ) = μ (kỳ vọng bằng phương sai).

  • Hàm liên kết chính tắc là logarit (log), đảm bảo giá trị fitted $μ̂ $luôn dương. Mô hình có dạng log μ = η, trong đó η là bộ dự báo tuyến tính.

  • Khi các biến giải thích đều là định tính, mô hình Poisson GLM được gọi là mô hình log-linear.

  • Đối với Poisson GLMs, nên sử dụng phần dư quantile.

Mô hình hóa tỷ lệ (Rates): Poisson GLMs có thể mô hình hóa tỷ lệ bằng cách đưa biện pháp phơi nhiễm (exposure) vào mô hình như một phần bù (offset) trong bộ dự báo tuyến tính6. Dạng mô hình là \(\log\left(\frac{\mu}{T}\right) = \eta\), tương đương với \(\log(\mu) = \log T + \eta\), trong đó log T là offset. Offset là thành phần đã biết và không cần ước lượng.

Bảng tương tác: Log-Linear Models:

  • Khi dữ liệu đếm được tóm tắt trong bảng tương tác với các biến định tính, Poisson GLM trở thành mô hình log-linear.

  • Ngược lại, khi mô hình Poisson log-linear bao gồm thuật ngữ hằng số, nó có thể tương đương với mô hình multinomial khi có điều kiện trên tổng lớn.

  • “Nghịch lý Simpson” được liệt kê trong mục này trong nguồn4, nhưng không có thông tin chi tiết nào được cung cấp về nó.

Sự tương đương giữa Binomial và Poisson GLMs: Trong các trường hợp cụ thể (ví dụ: dữ liệu tỷ lệ từ bảng tương tác khi tổng số thử nghiệm lớn và tỷ lệ thành công nhỏ), phân phối Binomial xấp xỉ phân phối Poisson. Điều này dẫn đến sự tương đương giữa Binomial GLM (với liên kết logit) và Poisson GLM (log-linear) trong những điều kiện này.

Negative Binomial GLMs:

  • Được sử dụng khi dữ liệu đếm có hiện tượng phân tán quá mức (overdispersion), tức là phương sai lớn hơn giá trị trung bình.

  • Mô hình Negative Binomial có hàm phương sai dạng bậc hai \(V(\mu) = \mu + \frac{\mu^2}{k}\), cho phép phương sai tăng nhanh hơn trung bình so với Poisson \(V(\mu) = \mu)\).

  • Mô hình này ước lượng thêm một tham số phụ (k) ngoài các hệ số hồi quy. Hàm liên kết mặc định là logarit. Nên sử dụng phần dư quantile cho mô hình này.

Sử dụng R:

  • Poisson GLMs: glm(…, family=poisson()) với liên kết mặc định “log”.

  • Negative Binomial GLMs: Sử dụng glm.nb() từ package MASS.

  • Quasi-Poisson models: Sử dụng glm(…, family=quasipoisson()) để xử lý overdispersion mà không cần mô hình phân phối đầy đủ.

  • Offset: Chỉ định bằng offset(log(Exposure)) trong công thức mô hình.

  • Sử dụng summary() để xem kết quả ước lượng và kiểm định Wald.

  • Sử dụng anova() để so sánh mô hình lồng nhau, với test=“Chisq” cho Poisson (φ=1) và test=“F” cho các mô hình có φ được ước lượng.

  • Các plot chẩn đoán như phần dư so với giá trị fitted, Cook’s distance và Q-Q plot phần dư rất quan trọng để kiểm tra giả định mô hình. Phần dư quantile được khuyến nghị cho các mô hình phân phối đầy đủ (Poisson, Negative Binomial).

  • Tiêu chí AIC có thể được dùng để so sánh các mô hình có phân phối đầy đủ. AIC không được định nghĩa cho quasi-GLMs.

CHƯƠNG 11: Dữ liệu liên tục dương: Gamma và Inverse Gaussian GLMs

Mô hình hóa dữ liệu liên tục dương:

  • Các phân phối Gamma và Inverse Gaussian đặc biệt hữu ích cho việc mô hình hóa dữ liệu liên tục dương.

  • Chúng được sử dụng khi các phương pháp khác, như mô hình hồi quy tuyến tính chuẩn (normal linear regression models), không đủ phù hợp với dữ liệu liên tục dương.

  • Các EDMs (Mô hình Phân tán Hàm mũ) có hàm phương sai dạng \(V(\mu) = \mu^{\xi}\) với ξ ≥ 2 phù hợp cho dữ liệu liên tục dương.

  • Phân phối Gamma (ξ = 2) và Inverse Gaussian (ξ = 3) là hai trường hợp đặc biệt của họ Tweedie phù hợp với dữ liệu liên tục dương.

Phân phối Gamma:

  • Phân phối Gamma là một loại phân phối thống kê liên quan đến phân phối beta. \[ P(y; \alpha, \beta) = \frac{y^{\alpha - 1} \exp(-y / \beta)}{\Gamma(\alpha) \beta^\alpha} \]

  • Hàm phương sai của nó là V(μ) = μ². Đây là một trong những hàm phương sai tăng đơn giản nhất sau V(μ)=μ.

  • Nó phù hợp khi hệ số biến thiên (coefficient of variation), được định nghĩa là tỷ lệ giữa độ lệch chuẩn và giá trị trung bình, là xấp xỉ hằng số.

  • Phân phối Gamma mô hình hóa thời gian chờ đợi giữa các sự kiện xảy ra ngẫu nhiên theo phân phối Poisson.

  • Phạm vi giá trị (support) của phân phối Gamma là y > 0, và miền xác định (domain) cho giá trị trung bình μ là μ > 0.

Phân phối Inverse Gaussian:

  • Phân phối Inverse Gaussian cũng là một EDM.

  • Hàm phương sai của nó là V(μ) = μ³.

  • Nó liên quan đến thời gian đạt điểm lần đầu tiên (first-passage time) trong chuyển động Brownian.

  • Phạm vi giá trị (support) của nó là y > 0, và miền xác định (domain) cho giá trị trung bình μ là μ > 0.

Hàm liên kết:

  • Đối với cả GLMs Gamma và Inverse Gaussian, các hàm liên kết thường được sử dụng là logarit (“log”), nghịch đảo (“inverse”) và đồng nhất (“identity”).

  • Hàm liên kết logarit (“log”) là một hàm liên kết được phép cho cả hai phân phối này.

  • Hàm liên kết chính tắc (canonical link) cho phân phối Inverse Gaussian là “1/mu^2”.

  • Lựa chọn cẩn thận hàm liên kết và biến đổi của biến giải thích có thể giúp mô tả các mối quan hệ tiệm cận giữa biến phản hồi và biến giải thích.

Ước lượng tham số phân tán:

  • Đối với cả GLMs Gamma và Inverse Gaussian, tham số phân tán φ thường cần được ước lượng.

  • Có nhiều phương pháp ước lượng φ, bao gồm ước lượng Hợp lý cực đại (MLE), ước lượng Độ lệch trung bình (Mean Deviance), và ước lượng Pearson [8, 11.6.2-11.6.5].

  • Ước lượng Pearson của φ được khuyến nghị sử dụng cho cả phân phối Gamma và Inverse Gaussian.

  • Ước lượng MLE của φ là chính xác cho phân phối Inverse Gaussian.

  • Ước lượng Độ lệch trung bình của φ được tính bằng công thức: D(y, μ̂) / (n - p’), trong đó D là độ lệch dư và n-p’ là bậc tự do dư.

Sử dụng R:

  • Để fit GLMs Gamma và Inverse Gaussian trong R, sử dụng hàm glm() và chỉ định family tương ứng.

  • GLM Gamma được chỉ định bằng family=Gamma().

  • GLM Inverse Gaussian được chỉ định bằng family=inverse.gaussian().

  • Các hàm liên kết được phép trong R cho cả hai family này bao gồm “inverse”, “identity”, và “log”. Family inverse.gaussian() cũng chấp nhận “1/mu^2”.

  • Ước lượng Pearson của φ có thể được truy xuất từ kết quả summary() của mô hình ($dispersion).

  • Các plot chẩn đoán, bao gồm phần dư chuẩn hóa (standardized residuals) so với giá trị fitted (rstandard(), fitted()), khoảng cách Cook (Cook’s distance) (cooks.distance()), và Q-Q plots của phần dư quantile (qqnorm(), qresid(), qqline()) được sử dụng để kiểm tra các giả định của mô hình.

  • Tiêu chí thông tin Akaike (AIC) có thể được sử dụng để so sánh sự phù hợp của các EDM khác nhau, chẳng hạn như Gamma và Inverse Gaussian. Hàm AIC() có thể được sử dụng để tính AIC.

CHƯƠNG 12: Mô hình Tuyến tính Tổng quát Tweedie (Tweedie GLMs)

Tweedie EDMs: Phân phối Tweedie là một lớp con của EDMs có hàm phương sai có dạng V(μ) = μ^ξ, trong đó μ là giá trị trung bình và ξ (xi) là tham số chỉ số Tweedie.Tham số chỉ số ξ xác định phân phối cụ thể trong họ Tweedie.

  • Một số phân phối thông thường là trường hợp đặc biệt của phân phối Tweedie với các giá trị ξ cụ thể:

    • Chuẩn (Normal) khi ξ = 0.

    • Poisson khi ξ = 1 và tham số phân tán φ = 1.

    • Gamma khi ξ = 2.

    • Inverse Gaussian khi ξ = 3.

  • Không có EDM Tweedie nào tồn tại khi 0 < ξ < 1.

  • Các phân phối Tweedie được định nghĩa là EDMs có hàm phương sai V(μ) = μ^ξ.

Cấu trúc Tweedie EDMs:

  • Từ mối quan hệ V(μ) = μ^ξ, có thể suy ra biểu thức cho tham số chính tắc (canonical parameter) θ và hàm tích lũy (cumulant function) κ(θ).Biểu thức này phụ thuộc vào ξ.

  • Phân phối Tweedie chỉ là một EDM nếu tham số ξ được biết. Trong thực tế, giá trị của ξ thường không biết và phải được ước lượng.

  • Độ lệch dư đơn vị (unit deviance) d(y, μ) cho các EDM Tweedie. Độ lệch dư đơn vị là hữu hạn khi y = 0 đối với các trường hợp ξ ≤ 0 và 1 < ξ < 2, vì y = 0 chỉ được chấp nhận trong các trường hợp này.

  • Theo xấp xỉ điểm yên ngựa (saddlepoint approximation), độ lệch dư dư (residual deviance) D(y, μ̂) xấp xỉ theo phân phối χ² với n-p’ bậc tự do, với điều kiện \(\phi \leq y^{2 - \frac{\xi}{3}}\) khi ξ ≥ 1. Tuy nhiên, xấp xỉ này có thể kém chính xác đối với dữ liệu liên tục có chứa giá trị 0 chính xác (khi 1 < ξ < 2). Xấp xỉ này là chính xác đối với phân phối Inverse Gaussian (ξ = 3).

  • Tweedie có tính chất nhận dạng đổi tỷ lệ (rescaling identity).

Dữ liệu liên tục dương và dữ liệu có giá trị không chính xác:

  • Các phân phối Tweedie phù hợp với nhiều loại dữ liệu khác nhau tùy thuộc vào giá trị của ξ.

  • Đối với ξ ≥ 2, phân phối Tweedie thích hợp để mô hình hóa dữ liệu liên tục dương. Phân phối Gamma (ξ = 2) và Inverse Gaussian (ξ = 3) là các trường hợp đặc biệt. Các phân phối Tweedie với ξ ≥ 2 được sử dụng khi phân phối Gamma hoặc Inverse Gaussian không đủ, đặc biệt đối với dữ liệu bị lệch nghiêm trọng.

  • Đối với 1 < ξ < 2, phân phối Tweedie thích hợp để mô hình hóa dữ liệu liên tục dương với giá trị không chính xác (exact zeros). Loại dữ liệu này có thể được cấu trúc như tổng của N biến ngẫu nhiên Gamma độc lập, trong đó N tuân theo phân phối Poisson. Điều này dẫn đến một xác suất dương cho giá trị y = 0 (π0). Ví dụ về dữ liệu này là dữ liệu lượng mưa. hoặc dữ liệu yêu cầu bảo hiểm.

  • Đối với ξ = 1, phân phối Tweedie thích hợp cho dữ liệu rời rạc (phân phối Poisson là trường hợp đặc biệt khi φ=1).

  • Đối với ξ ≤ 0, phân phối Tweedie thích hợp cho dữ liệu liên tục trên toàn trục số thực, nhưng giá trị trung bình μ > 0. Các phân phối này ít có ứng dụng thực tế.

Tweedie GLMs:

  • Các GLMs dựa trên phân phối Tweedie được gọi là Tweedie GLMs.

  • Đối với các trường hợp được xem xét trong chương (ξ > 2 và 1 < ξ < 2), giá trị trung bình μ > 0. Do đó, hàm liên kết (link function) thường được sử dụng là hàm liên kết logarit (logarithmic link function).

  • Để fit một Tweedie GLM, giá trị của ξ phải được biết hoặc ước lượng11. Sau khi có ước lượng cho ξ, mô hình có thể được fit.

  • Tham số phân tán φ thường được ước lượng bằng cách sử dụng ước lượng Pearson11…. Tuy nhiên, ước lượng hợp lý cực đại (MLE) của φ là cần thiết để tính toán MLE của xác suất bằng không chính xác (π0) khi 1 < ξ < 2.

Sử dụng R để fit Tweedie GLMs:

  • Việc fit Tweedie GLMs trong R yêu cầu cài đặt và tải các gói thư viện bổ sung.

  • Gói tweedierất hữu ích cho việc ước lượng giá trị ξ phù hợp cho dữ liệu bằng cách sử dụng hàm tweedie.profile(). Hàm này hoạt động bằng cách tính log-likelihood cho nhiều giá trị ξ khác nhau để tìm ước lượng hợp lý cực đại. tweedie.profile() trả về ước lượng MLE của ξ (xi.max), MLE của φ (phi.max), và khoảng tin cậy cho ξ.

  • Gói statmod là cần thiết để fit Tweedie GLMs, cung cấp hàm family tweedie() cho hàm glm(). Khi sử dụng family=tweedie(), cần chỉ định giá trị của ξ bằng đối số var.power và hàm liên kết bằng link.power (mặc định 0 cho link logarit).

  • Hàm qresid() trong gói statmod được khuyến nghị sử dụng để tính toán phần dư quantile (quantile residuals) cho Tweedie GLMs.

  • Giá trị AIC không được tính mặc định trong kết quả summary() của glm() cho Tweedie GLMs vì có thể tốn thời gian tính toán. Nếu cần, AIC có thể được tính toán trực tiếp bằng hàm AICtweedie() trong gói tweedie.

  • Hàm tweedie.convert() có thể được sử dụng để chuyển đổi ước lượng tham số GLM thành các tham số của các phân phối Poisson và Gamma cơ bản khi 1 < ξ < 2, phục vụ mục đích diễn giải.

THỐNG KÊ MÔ TẢ

1. Mô tả dữ liệu

Bộ dữ liệu Supermarket Transactions gồm 14059, mỗi số liệu đại diện cho một giao dịch tại siêu thị. Dữ liệu bao gồm 16 cột với thông tin như sau: PurchaseDate (Ngày mua hàng), CustomerID (Mã khách hàng), Gender (Giới tính), MaritalStatus (Tình trạng hôn nhân), Homeowner (Tình trạng sở hữu nhà), Children (Số con), AnnualIncome (Thu nhập hàng năm), City (Thành phố), StateorProvince (Bang hoặc tỉnh), Country (Quốc gia), ProductFamily (Nhóm sản phẩm), ProductDepartment (Bộ phận sản phẩm), ProductCategory (Danh mục sản phẩm), UnitsSold (Số lượng bán ra), và Revenue (Doanh thu). Dữ liệu này cho phép phân tích hành vi người tiêu dùng, xu hướng tiêu thụ sản phẩm và đánh giá hiệu quả kinh doanh theo từng phân khúc khách hàng cũng như khu vực địa lý.

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(DT)
## Warning: package 'DT' was built under R version 4.3.3
library(scales)
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
library(psych)
## Warning: package 'psych' was built under R version 4.3.3
## 
## Attaching package: 'psych'
## 
## The following objects are masked from 'package:scales':
## 
##     alpha, rescale
## 
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(knitr)
## Warning: package 'knitr' was built under R version 4.3.3
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.3.3
## 
## Attaching package: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows
d <- read.csv('D:/HK2_PTDLDT_TMT/Supermarket Transactions.csv',header = T)
str(d)
## 'data.frame':    14059 obs. of  16 variables:
##  $ X                : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ PurchaseDate     : chr  "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
##  $ CustomerID       : int  7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
##  $ Gender           : chr  "F" "M" "F" "M" ...
##  $ MaritalStatus    : chr  "S" "M" "M" "M" ...
##  $ Homeowner        : chr  "Y" "Y" "N" "Y" ...
##  $ Children         : int  2 5 2 3 3 3 2 2 3 1 ...
##  $ AnnualIncome     : chr  "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
##  $ City             : chr  "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
##  $ StateorProvince  : chr  "CA" "CA" "WA" "OR" ...
##  $ Country          : chr  "USA" "USA" "USA" "USA" ...
##  $ ProductFamily    : chr  "Food" "Food" "Food" "Food" ...
##  $ ProductDepartment: chr  "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
##  $ ProductCategory  : chr  "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
##  $ UnitsSold        : int  5 5 3 4 4 3 4 6 1 2 ...
##  $ Revenue          : num  27.38 14.9 5.52 4.44 14 ...
dt <- d
datatable(dt,options = list(scrollX = TRUE))
## Warning in instance$preRenderHook(instance): It seems your data is too big for
## client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html

2. Thống kê biến định lượng

#Tính thống kê
desc <- describe(d$UnitsSold)
# Hiển thị bảng đẹp
kable(desc) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F)
vars n mean sd median trimmed mad min max range skew kurtosis se
X1 1 14059 4.080589 1.174421 4 4.076985 1.4826 1 8 7 0.0124645 -0.4381643 0.0099048

Biến UnitsSold gồm 14059 quan sát, trung bình 4.08 đơn vị với độ lệch chuẩn 1.17, cho thấy mức phân tán nhẹ quanh trung bình. Giá trị trung vị là 4, gần trung bình, cùng độ lệch gần 0 (0.012) phản ánh phân phối gần như đối xứng. Hệ số nhọn -0.44 cho thấy phân phối bẹt hơn chuẩn. Giá trị dao động từ 1 đến 8, phạm vi hẹp. Sai số chuẩn 0.0099 chứng tỏ ước lượng trung bình chính xác. Tổng thể, UnitsSold phân phối gần chuẩn, tập trung quanh 4 sản phẩm mỗi giao dịch.

#Tính thống kê
desc <- describe(d$Revenue)
# Hiển thị bảng đẹp
kable(desc) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F)
vars n mean sd median trimmed mad min max range skew kurtosis se
X1 1 14059 13.00451 8.215543 11.25 12.04553 7.398174 0.53 56.7 56.17 1.134659 1.390813 0.0692882

Biến Revenue (X1) gồm 14,059 quan sát, trung bình 13.00, độ lệch chuẩn 8.22, phân phối lệch phải (skewness 1.13) với phạm vi rộng (0.53 đến 56.7). Giá trị trung vị 11.25 thấp hơn trung bình, cho thấy sự phân bố không đối xứng. Kurtosis 1.39 chỉ ra đuôi dày hơn chuẩn. Sai số chuẩn 0.069 cho ước lượng trung bình chính xác.

#Tính thống kê
desc <- describe(d$Children)
# Hiển thị bảng đẹp
kable(desc) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F)
vars n mean sd median trimmed mad min max range skew kurtosis se
X1 1 14059 2.530336 1.491852 3 2.532492 1.4826 0 5 5 -0.0212564 -1.031539 0.012582

3. Thống kê các biến định tính

Biến Gender

prop.table(table(d$Gender)) %>% addmargins()
## 
##         F         M       Sum 
## 0.5099936 0.4900064 1.0000000
# Tính tỷ lệ phần trăm
c1 <- prop.table(table(d$Gender)) * 100

# Vẽ biểu đồ tròn
pie(c1,
    labels = paste(names(c1), round(c1, 2), "%"),
    main = "Tỷ lệ Gender")

Biểu đồ trên thể hiện phân bố giới tính của khách hàng trong bộ dữ liệu, với hai nhóm là F (Female - Nữ) và M (Male - Nam). Số lượng giao dịch của khách hàng nữ chiếm 51% tỷ lệ nhỉnh hơn so với nam 49% cho thấy phụ nữ có xu hướng tham gia mua sắm nhiều hơn trong siêu thị. Sự chênh lệch này tuy không lớn nhưng có thể phản ánh vai trò của phụ nữ trong việc chi tiêu và lựa chọn hàng hóa trong gia đình. Thông tin này hữu ích cho các chiến lược tiếp thị, giúp siêu thị có thể điều chỉnh danh mục sản phẩm và các chương trình khuyến mãi phù hợp hơn với nhóm khách hàng nữ, đồng thời khai thác thêm tiềm năng từ nhóm khách hàng nam.

Biến MaritalStatus

table(d$ MaritalStatus) %>% as.data.frame() ->o
colnames(o)<-c("value","count")
o
##   value count
## 1     M  6866
## 2     S  7193
ggplot(o, aes(x = value, y = count, fill = value)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.3, size = 3.5) +
  labs(title = "Biểu đồ cột", x = "MaritalStatus", y = "Số lượng") +
  theme_minimal()

Qua biểu đồ trên ta thấy phân bố biến MaritalStatus (Tình trạng hôn nhân) của khách hàng, gồm hai nhóm là đã kết hôn (Married - M) và độc thân (Single - S). Kết quả cho thấy số lượng khách hàng độc thân cao hơn một chút so với khách hàng đã kết hôn, với 7193 người độc thân so với 6866 người đã kết hôn. Sự chênh lệch không lớn nhưng phần nào phản ánh xu hướng người độc thân có thể mua sắm thường xuyên hơn hoặc linh hoạt hơn trong hành vi tiêu dùng. Thông tin này có thể hữu ích cho việc xây dựng chiến lược tiếp thị phù hợp với từng nhóm khách hàng dựa trên tình trạng hôn nhân.

Biến Homeowner

prop.table(table(d$Homeowne)) %>% addmargins()
## 
##         N         Y       Sum 
## 0.3993883 0.6006117 1.0000000
# Tính tỷ lệ phần trăm
c2 <- prop.table(table(d$Homeowne)) * 100

# Vẽ biểu đồ tròn
pie(c2,
    labels = paste(names(c2), round(c2, 2), "%"),
    main = "Tỷ lệ Homeowne")

Biểu đồ trên thể hiện tỷ lệ biến Homeowner (Chủ sở hữu nhà) trong tập dữ liệu, gồm hai nhóm: Y (Yes - Có sở hữu nhà) chiếm 60.06%, N (No - Không sở hữu nhà) chiếm 39.94%. Như vậy, phần lớn khách hàng trong dữ liệu là người có sở hữu nhà. Điều này có thể phản ánh đặc điểm nhân khẩu học của tệp khách hàng, chẳng hạn như mức độ ổn định tài chính hoặc độ tuổi trưởng thành cao hơn. Sở hữu nhà thường liên quan đến những người có thu nhập ổn định, có thể chi tiêu nhiều hơn trong mua sắm, do đó đây là một yếu tố quan trọng để doanh nghiệp cân nhắc trong việc phân khúc và tiếp cận khách hàng. Việc phân tích theo biến này cũng có thể kết hợp với các yếu tố khác như giới tính, độ tuổi hoặc thu nhập để hiểu rõ hơn về hành vi tiêu dùng.

Biến AnnualIncome

c2 <- d |>
  group_by(AnnualIncome) |>
  summarise(freq = n()) |>
  mutate(per = freq / sum(freq),
         label = paste0(freq, " (", round(per * 100, 1), "%)"))

ggplot(c2, aes(x = "", y = per, fill = AnnualIncome)) +
  geom_col(width = 1, color = "white") +
  coord_polar("y") +
  geom_text(aes(label = label),
            position = position_stack(vjust = 0.5),
            size = 4) +
  scale_fill_brewer(palette = "Set3") +  # Bạn có thể chọn Set1, Set2...
  labs(title = "Tỷ lệ AnnualIncome", fill = "Thu nhập") +
  theme_void()

Biểu đồ trên là biểu đồ tròn thể hiện tỷ lệ phân bố theo mức thu nhập hàng năm (AnnualIncome) của khách hàng trong bộ dữ liệu Supermarket Transactions. Biểu đồ chia khách hàng thành các nhóm thu nhập từ 10K đô đến trên 150K đô, được mã hóa bằng các sắc độ xanh khác nhau. Nhóm thu nhập từ 30K đô - 50K đô chiếm tỷ lệ lớn nhất, cho thấy phần lớn khách hàng có thu nhập trung bình. Các nhóm thu nhập cao hơn ($110K trở lên) chiếm tỷ lệ nhỏ hơn, phản ánh rằng siêu thị chủ yếu phục vụ đối tượng có thu nhập trung bình và trung bình – thấp. Biểu đồ giúp ta hình dung rõ ràng về cơ cấu thu nhập của khách hàng trong dữ liệu.

Biến City

table(d$City) %>% as.data.frame() ->o2
colnames(o2)<-c("value","count")
o2
##            value count
## 1       Acapulco   383
## 2     Bellingham   143
## 3  Beverly Hills   811
## 4      Bremerton   834
## 5        Camacho   452
## 6    Guadalajara    75
## 7        Hidalgo   845
## 8    Los Angeles   926
## 9         Merida   654
## 10   Mexico City   194
## 11       Orizaba   464
## 12      Portland   876
## 13         Salem  1386
## 14    San Andres   621
## 15     San Diego   866
## 16 San Francisco   130
## 17       Seattle   922
## 18       Spokane   875
## 19        Tacoma  1257
## 20     Vancouver   633
## 21      Victoria   176
## 22   Walla Walla   160
## 23        Yakima   376
ggplot(o2, aes(x = value, y = count, fill = value)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.3, size = 1.5) +
  labs(title = "Biểu đồ cột", x = "City", y = "Số lượng") +
  theme_minimal()

Biểu đồ cột trên thể hiện số lượng giao dịch theo từng thành phố trong bộ dữ liệu Supermarket Transactions. Trong đó, Salem (1.398 giao dịch) và Tacoma (1.257 giao dịch) là hai thành phố có số lượng giao dịch cao nhất, cho thấy đây là những thị trường trọng điểm với hoạt động mua sắm sôi động. Một số thành phố khác như Guadalajara, Seattle, San Diego, San Andres và Spokane cũng có số lượng giao dịch khá cao, phản ánh mức độ tiêu dùng ổn định. Ngược lại, các thành phố như Camacho, Hidalgo, San Francisco và Victoria có số lượng giao dịch thấp hơn đáng kể, do quy mô nhỏ hoặc mức độ hoạt động thương mại thấp hơn. Biểu đồ này giúp nhận diện rõ sự chênh lệch giữa các khu vực và có thể được sử dụng để phân tích tiềm năng thị trường, hỗ trợ quyết định mở rộng hoặc điều chỉnh chiến lược kinh doanh theo từng địa phương.

Biến StateorProvince

c4 <- table(d$StateorProvince)
c4 <- d |> group_by(StateorProvince) |> summarise(freq = n()) |> mutate(c4, per = freq/sum(freq))
c4 |> ggplot(aes(x = "", y = per, fill = StateorProvince)) + geom_col() + coord_polar('y')

Biểu đồ tròn thể hiện biến StateorProvince trong bộ dữ liệu Supermarket Transactions cho thấy sự phân bố tần suất giao dịch siêu thị theo từng bang hoặc tỉnh. Trong đó, các bang như WA (Washington) và CA (California) chiếm tỷ trọng lớn nhất, cho thấy đây là hai khu vực có hoạt động giao dịch sôi động hơn, có thể do dân số đông hoặc sự hiện diện của nhiều siêu thị. Ngược lại, các tỉnh như Guerrero, DF (Distrito Federal) và Jalisco chiếm tỷ lệ nhỏ hơn, phản ánh số lượng giao dịch ít hơn tại các khu vực này. Sự chênh lệch này có thể phản ánh sự khác biệt về quy mô thị trường, nhu cầu tiêu dùng hoặc mức độ hiện diện của hệ thống siêu thị trong từng vùng. Biểu đồ giúp nhận diện rõ các khu vực trọng điểm trong hoạt động bán lẻ siêu thị và có thể hỗ trợ cho các quyết định kinh doanh hoặc phân bổ nguồn lực.

Biến Country

c5 <- d
c5 <- table(d$Country)
c5 <- d |> group_by(Country) |> summarise(freq = n()) |> mutate(c5, per = freq/sum(freq))
c5 |> ggplot(aes(x = "", y = per, fill = Country)) + geom_col() + coord_polar('y')

Biểu đồ trên thể hiện tỷ lệ phân bố theo quốc gia trong bộ dữ liệu với ba quốc gia gồm Canada, Mexico và USA. Quan sát biểu đồ, có thể thấy USA chiếm tỷ lệ lớn nhất, chiếm hơn một nửa tổng số, thể hiện đây là thị trường chủ yếu trong dữ liệu. Mexico đứng thứ hai với tỷ lệ đáng kể nhưng nhỏ hơn USA, trong khi Canada chiếm tỷ lệ thấp nhất, chỉ chiếm một phần rất nhỏ. Điều này cho thấy hoạt động hoặc dữ liệu thu thập từ USA là chủ yếu, trong khi Canada chỉ đóng vai trò phụ trong tổng thể dữ liệu.

Biến ProductFamily

prop.table(table(d$ProductFamily)) %>% addmargins()
## 
##          Drink           Food Non-Consumable            Sum 
##     0.08891102     0.72217085     0.18891813     1.00000000
# Tính tỷ lệ phần trăm
c5 <- prop.table(table(d$ProductFamily)) * 100

# Vẽ biểu đồ tròn
pie(c5,
    labels = paste(names(c5), round(c5, 2), "%"),
    main = "Tỷ lệ ProductFamily")

Biểu đồ trên thể hiện tỷ lệ các nhóm sản phẩm trong bộ dữ liệu Supermarket Transactions, bao gồm Food (Thực phẩm), Drink (Đồ uống) và Non-Consumable (Không tiêu dùng). Kết quả cho thấy nhóm sản phẩm thực phẩm chiếm tỷ lệ cao nhất với 72.22%, cho thấy đây là mặt hàng chủ lực được tiêu thụ nhiều nhất tại siêu thị. Nhóm sản phẩm không tiêu dùng chiếm 18.89%, đứng thứ hai về tỷ trọng và có thể bao gồm các mặt hàng như đồ gia dụng hoặc văn phòng phẩm. Nhóm đồ uống chiếm tỷ lệ thấp nhất với 8.89%, phản ánh mức tiêu thụ hoặc sự ưu tiên phân phối chưa cao. Cơ cấu này cho thấy siêu thị đang tập trung mạnh vào các mặt hàng thiết yếu, đặc biệt là thực phẩm, và đây có thể là cơ sở để điều chỉnh chiến lược kinh doanh hoặc mở rộng danh mục sản phẩm trong tương lai.

Biến ProductDepartment

Tần số

table(d$ProductDepartment)
## 
## Alcoholic Beverages         Baked Goods        Baking Goods           Beverages 
##                 356                 425                1072                 680 
##     Breakfast Foods        Canned Foods     Canned Products            Carousel 
##                 188                 977                 109                  59 
##            Checkout               Dairy                Deli                Eggs 
##                  82                 903                 699                 198 
##        Frozen Foods  Health and Hygiene           Household                Meat 
##                1382                 893                1420                  89 
##         Periodicals             Produce             Seafood         Snack Foods 
##                 202                1994                 102                1600 
##              Snacks       Starchy Foods 
##                 352                 277

Tần suất

table(d$ProductDepartment)/sum(table(d$ProductDepartment))
## 
## Alcoholic Beverages         Baked Goods        Baking Goods           Beverages 
##         0.025321858         0.030229746         0.076250089         0.048367594 
##     Breakfast Foods        Canned Foods     Canned Products            Carousel 
##         0.013372217         0.069492852         0.007753041         0.004196600 
##            Checkout               Dairy                Deli                Eggs 
##         0.005832563         0.064229319         0.049719041         0.014083505 
##        Frozen Foods  Health and Hygiene           Household                Meat 
##         0.098300021         0.063518031         0.101002916         0.006330464 
##         Periodicals             Produce             Seafood         Snack Foods 
##         0.014368020         0.141830856         0.007255139         0.113806103 
##              Snacks       Starchy Foods 
##         0.025037343         0.019702682

Dựa trên phân tích tỷ lệ các danh mục sản phẩm được giao dịch tại siêu thị, ta thấy Produce (Rau củ quả tươi) chiếm tỷ trọng cao nhất với 14.18%, cho thấy đây là nhóm hàng được mua nhiều nhất, phù hợp với nhu cầu tiêu dùng hàng ngày. Tiếp theo là Snack Foods (Đồ ăn vặt) với 11.38% và Household (Đồ dùng gia đình) chiếm 10.10%, phản ánh nhu cầu cao với các mặt hàng tiện lợi và thiết yếu cho sinh hoạt. Một số nhóm khác cũng có tỷ lệ đáng kể như Frozen Foods (Đồ đông lạnh) chiếm 9.83%, Canned Foods (Đồ hộp) với 6.95%, và Dairy (Sản phẩm từ sữa) khoảng 6.42%. Ngược lại, các nhóm có tỷ lệ thấp như Carousel (0.42%), Meat (Thịt) (0.63%), Seafood (Hải sản) (0.73%), và Canned Products (0.78%) cho thấy chúng ít được lựa chọn hơn hoặc là những mặt hàng có tần suất mua sắm thấp hơn. Điều này phản ánh thói quen tiêu dùng hướng đến sự tiện lợi, bảo quản lâu và dễ sử dụng trong nhóm khách hàng của siêu thị.

Biến ProductCategory

Tần số

table(d$ProductCategory)
## 
##         Baking Goods    Bathroom Products        Beer and Wine 
##                  484                  365                  356 
##                Bread      Breakfast Foods              Candles 
##                  425                  417                   45 
##                Candy     Canned Anchovies         Canned Clams 
##                  352                   44                   53 
##       Canned Oysters      Canned Sardines        Canned Shrimp 
##                   35                   40                   38 
##          Canned Soup          Canned Tuna Carbonated Beverages 
##                  404                   87                  154 
##    Cleaning Supplies        Cold Remedies                Dairy 
##                  189                   93                  903 
##        Decongestants               Drinks                 Eggs 
##                   85                  135                  198 
##           Electrical      Frozen Desserts       Frozen Entrees 
##                  355                  323                  118 
##                Fruit             Hardware        Hot Beverages 
##                  765                  129                  226 
##              Hygiene     Jams and Jellies     Kitchen Products 
##                  197                  588                  217 
##            Magazines                 Meat        Miscellaneous 
##                  202                  761                   42 
##  Packaged Vegetables       Pain Relievers       Paper Products 
##                   48                  192                  345 
##                Pizza     Plastic Products Pure Juice Beverages 
##                  194                  141                  165 
##              Seafood          Side Dishes          Snack Foods 
##                  102                  153                 1600 
##            Specialty        Starchy Foods           Vegetables 
##                  289                  277                 1728

Tần suất

table(d$ProductCategory)/sum(table(d$ProductCategory))
## 
##         Baking Goods    Bathroom Products        Beer and Wine 
##          0.034426346          0.025962017          0.025321858 
##                Bread      Breakfast Foods              Candles 
##          0.030229746          0.029660716          0.003200797 
##                Candy     Canned Anchovies         Canned Clams 
##          0.025037343          0.003129668          0.003769827 
##       Canned Oysters      Canned Sardines        Canned Shrimp 
##          0.002489508          0.002845153          0.002702895 
##          Canned Soup          Canned Tuna Carbonated Beverages 
##          0.028736041          0.006188207          0.010953837 
##    Cleaning Supplies        Cold Remedies                Dairy 
##          0.013443346          0.006614980          0.064229319 
##        Decongestants               Drinks                 Eggs 
##          0.006045949          0.009602390          0.014083505 
##           Electrical      Frozen Desserts       Frozen Entrees 
##          0.025250729          0.022974607          0.008393200 
##                Fruit             Hardware        Hot Beverages 
##          0.054413543          0.009175617          0.016075112 
##              Hygiene     Jams and Jellies     Kitchen Products 
##          0.014012376          0.041823743          0.015434953 
##            Magazines                 Meat        Miscellaneous 
##          0.014368020          0.054129028          0.002987410 
##  Packaged Vegetables       Pain Relievers       Paper Products 
##          0.003414183          0.013656732          0.024539441 
##                Pizza     Plastic Products Pure Juice Beverages 
##          0.013798990          0.010029163          0.011736254 
##              Seafood          Side Dishes          Snack Foods 
##          0.007255139          0.010882709          0.113806103 
##            Specialty        Starchy Foods           Vegetables 
##          0.020556227          0.019702682          0.122910591

Dựa trên tỷ lệ phân bố các danh mục sản phẩm, có thể thấy khách hàng có xu hướng chi tiêu nhiều nhất cho các mặt hàng thiết yếu và phổ biến như rau củ quả (14.18%), rau (12.29%) và đồ ăn vặt (11.38%). Điều này phản ánh nhu cầu cao đối với thực phẩm tươi sống và các sản phẩm tiện lợi trong tiêu dùng hằng ngày. Ngoài ra, các nhóm như thực phẩm đông lạnh (9.83%), đồ dùng gia đình (10.10%) và nguyên liệu làm bánh (7.63%) cũng chiếm tỷ trọng đáng kể. Trong khi đó, các danh mục như đồ hộp đặc biệt, sản phẩm chăm sóc sức khỏe và các mặt hàng ít phổ biến (ví dụ: nến, sản phẩm carousel, sản phẩm đóng hộp hải sản) có tỷ lệ tiêu thụ rất thấp (dưới 1%). Nhìn chung, thói quen tiêu dùng tập trung mạnh vào nhu yếu phẩm và thực phẩm dễ chế biến, trong khi các sản phẩm đặc thù hoặc ít sử dụng chỉ chiếm một phần nhỏ trong cơ cấu tiêu dùng.

LS0tDQp0aXRsZTogIk5oaeG7h20gduG7pSAxIg0KYXV0aG9yOiAiUGhhbiBOZ3V54buFbiBRdeG7s25oIEjGsMahbmciDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlICANCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDUNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHRydWUNCiAgICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQpgYGB7Y3NzLGVjaG8gPSBGQUxTRX0NCmgxIHsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMzJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQNCiAgfQ0KDQpoMiB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDI4cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KIA0KfQ0KDQpoMyB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDI0cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCmg0IHtmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyMHB4Ow0KICBmb250LXN0eWxlOiBpdGFsaWN9DQoNCmJvZHkgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAxOHB4Ow0KICANCn0NCnA6bm90KGgxKTpub3QoaDIpOm5vdChoMyk6bm90KGg0KTpub3QoaDUpIHsNCiAgdGV4dC1pbmRlbnQ6IDJlbTt9DQpwIHsNCiAgdGV4dC1hbGlnbjoganVzdGlmeTsNCiAgfQ0KLnRvY2lmeS1oZWFkZXIgew0KICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KYGBgDQoNCg0KIyAqKlTDk00gVOG6rlQgUVVZ4buCTiAyMDE5X0dFTkFFUkFMSVpFRCBMSU5FQVIgTU9ERUxTIFdJVEggUiBFWEFNUExFUyoqDQoNCiMjICoqQ0jGr8agTkcgMTogTcO0IGjDrG5oIFRo4buRbmcga8OqKioNCg0KKipW4bq9IEJp4buDdSDEkeG7kyBE4buvIGxp4buHdSAoUGxvdHRpbmcgRGF0YSk6KiogUGjhuqduIG7DoHkgbmjhuqVuIG3huqFuaCB04bqnbSBxdWFuIHRy4buNbmcgY+G7p2Egdmnhu4djIHRy4buxYyBxdWFuIGjDs2EgZOG7ryBsaeG7h3UgdGjDtG5nIHF1YSBiaeG7g3UgxJHhu5MuIEPDoWMgbmd14buTbiBjdW5nIGPhuqVwIG5oaeG7gXUgdsOtIGThu6UgduG7gSBiaeG7g3UgxJHhu5MsIGNo4bqzbmcgaOG6oW4gbmjGsCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIFRo4buDIHTDrWNoIFRo4bufIFJhIEfhuq9uZyBT4bupYyAoRkVWKSB2w6AgdHXhu5VpIGhv4bq3YyBjaGnhu4F1IGNhbyAoZOG7ryBsaeG7h3UgbHVuZ2NhcCB0cm9uZyBWw60gZOG7pSAxLjEpLi4uLCBjaGnhu4F1IGNhbyB0aGVvIHR14buVaSAoZOG7ryBsaeG7h3UgbHVuZ2NhcCksIGPDom4gbuG6t25nIHPGoSBzaW5oIHRydW5nIGLDrG5oIHRoZW8gdHXhu5VpIHRoYWksIGNo4buJIHPhu5Egc8OidSByxINuZywgbeG6pXQgcsSDbmcsIHRyw6FtIHLEg25nIChkbWZ0KSB0cnVuZyBiw6xuaCB0aGVvIGzGsOG7o25nIMSRxrDhu51uZyB0acOqdSB0aOG7pS4uLiwgc+G7kSBsxrDhu6NuZyBjaGltIG5vaXN5IG1pbmVyIHRoZW8gbeG6rXQgxJHhu5kgY8OieSBi4bqhY2ggxJHDoG4sIHThu7cgbOG7hyB0dWFiaW4gYuG7iyBu4bupdCB0aGVvIGdp4budIHPhu60gZOG7pW5nLiBWaeG7h2MgduG6vSBiaeG7g3UgxJHhu5MgZ2nDunAgaGnhu4N1IHLDtSBoxqFuIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24uDQoNCioqTcO0IGjDrG5oIFRo4buRbmcga8OqIE3DtCB04bqjIGPhuqMgVGjDoG5oIHBo4bqnbiBOZ+G6q3Ugbmhpw6puIHbDoCBI4buHIHRo4buRbmcgKFN0YXRpc3RpY2FsIE1vZGVscyBEZXNjcmliZSBCb3RoIFJhbmRvbSBhbmQgU3lzdGVtYXRpYyk6KiogR2nhu5tpIHRoaeG7h3UgbeG7mXQgdHJvbmcgbmjhu69uZyDDvSB0xrDhu59uZyBj4buRdCBsw7VpIGPhu6dhIG3DtCBow6xuaCB0aOG7kW5nIGvDqiwgxJHDsyBsw6AgcGjDom4gdMOhY2ggYmnhur9uIHBo4bqjbiBo4buTaSB0aMOgbmggaGFpIHBo4bqnbjogdGjDoG5oIHBo4bqnbiBo4buHIHRo4buRbmcgKG3DtCB04bqjIHh1IGjGsOG7m25nIGhv4bq3YyBt4buRaSBxdWFuIGjhu4cgdHJ1bmcgYsOsbmgpIHbDoCB0aMOgbmggcGjhuqduIG5n4bqrdSBuaGnDqm4gKG3DtCB04bqjIHPhu7EgYmnhur9uIMSR4buVaSBraMO0bmcgZ2nhuqNpIHRow61jaCDEkcaw4bujYyBob+G6t2Mgbmhp4buFdSkuDQoNCioqTcO0IGjDrG5oIEjhu5NpIHF1eSAoUmVncmVzc2lvbiBNb2RlbHMpOioqIEdp4bubaSB0aGnhu4d1IGzhu5twIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSwgYmFvIGfhu5NtIHThuqV0IGPhuqMgY8OhYyBtw7QgaMOsbmggxJHGsOG7o2MgdGjhuqNvIGx14bqtbiB0cm9uZyBzw6FjaC4gQ8OhYyBtw7QgaMOsbmggbsOgeSBsw6AgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIHRoZW8gdGhhbSBz4buRLiBC4buZIGThu7EgYsOhbyB0dXnhur9uIHTDrW5oIChsaW5lYXIgcHJlZGljdG9yKSwgdGjGsOG7nW5nIGPDsyBk4bqhbmcgJFxiZXRhXzAgKyBcYmV0YV8xIHhfezFpfSArIFxjZG90cyArIFxiZXRhX3AgeF97cGl9JCwgxJHGsOG7o2MgxJHhu4tuaCBuZ2jEqWEgdHJvbmcgcGjhuqduIG7DoHkuIEPDoWMgcXV5IMaw4bubYyBrw70gaGnhu4d1IGNobyBz4buRIGzGsOG7o25nIGJp4bq/biBnaeG6o2kgdGjDrWNoIChwKSB2w6Agc+G7kSBsxrDhu6NuZyB0aGFtIHPhu5EgaOG7k2kgcXV5IChwJywgYmFvIGfhu5NtIGPhuqMgaOG7hyBz4buRIGNo4bq3biDOsuKCgCBu4bq/dSBjw7MpIGPFqW5nIMSRxrDhu6NjIMSRxrBhIHJhLiBWw60gZOG7pSAxLjMgc+G7rSBk4bulbmcgZOG7ryBsaeG7h3UgbHVuZ2NhcCAoVsOtIGThu6UgMS4xKSDEkeG7gyBtaW5oIGjhu41hIHRow6BuaCBwaOG6p24gaOG7hyB0aOG7kW5nIHbDoCBi4buZIGThu7EgYsOhbyB0dXnhur9uIHTDrW5oLg0KDQoNCioqVGnDqnUgY2jDrSDEkMOhbmggZ2nDoSBNw7QgaMOsbmggVGjhu5FuZyBrw6ogKENyaXRlcmlhIGZvciBBc3Nlc3NpbmcgU3RhdGlzdGljYWwgTW9kZWxzKToqKiBUcsOsbmggYsOgeSBoYWkgdGnDqnUgY2jDrSBxdWFuIHRy4buNbmcgxJHhu4MgxJHDoW5oIGdpw6EgbeG7mXQgbcO0IGjDrG5oIHRo4buRbmcga8OqOiDEkeG7mSBjaMOtbmggeMOhYyAobcO0IGjDrG5oIGto4bubcCB24bubaSBk4buvIGxp4buHdSB04buRdCDEkeG6v24gbeG7qWMgbsOgbykgdsOgIHTDrW5oIHRp4bq/dCBraeG7h20gKG3DtCBow6xuaCBjw6BuZyDEkcahbiBnaeG6o24gduG7m2kgw610IHRoYW0gc+G7kSBjw6BuZyB04buRdCwgdHJvbmcga2hpIHbhuqtuIGdp4bqjaSB0aMOtY2ggxJHGsOG7o2MgZOG7ryBsaeG7h3UpLg0KDQoNCioqU+G7rSBk4bulbmcgUiBjaG8gTcO0IGjDrG5oIFRo4buRbmcga8OqIChVc2luZyBSIGZvciBTdGF0aXN0aWNhbCBNb2RlbHMpOioqIEN1bmcgY+G6pXAgbOG7nWkgZ2nhu5tpIHRoaeG7h3UgYmFuIMSR4bqndSB24buBIHZp4buHYyBz4butIGThu6VuZyBuZ8O0biBuZ+G7ryB2w6AgbcO0aSB0csaw4budbmcgUiDEkeG7gyB0aOG7sWMgaGnhu4duIHBow6JuIHTDrWNoIG3DtCBow6xuaCB0aOG7kW5nIGvDqi4gUiDEkcaw4bujYyB0w61jaCBo4bujcCB4dXnDqm4gc3Xhu5F0IGN14buRbiBzw6FjaCwgdsOgIGN14buRbiBzw6FjaCBz4butIGThu6VuZyBow6BtIGdsbSgpIMSR4buDIHBow7kgaOG7o3AgduG7m2kgY8OhYyBtw7QgaMOsbmggR0xNcy4gQ8OhYyBi4buZIGThu68gbGnhu4d1IHRo4buxYyB04bq/IMSRxrDhu6NjIHPhu60gZOG7pW5nIGfhuqduIG5oxrAgxJHhu5ljIHF1eeG7gW4gdHJvbmcgc8OhY2gsIHbDoCBjaMO6bmcgxJHGsOG7o2MgdGh1IHRo4bqtcCB0cm9uZyBnw7NpIFIgY8OzIHTDqm4gR0xNc0RhdGEuDQoNCiMjICoqQ0jGr8agTkcgMjogTcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oKioNCg0KKipLaeG7g20gxJHhu4tuaCBHaeG6oyB0aHV54bq/dCAoSHlwb3RoZXNpcyBUZXN0cyk6KiogQ2jGsMahbmcgbsOgeSB0aOG6o28gbHXhuq1uIHbhu4EgY8OhY2gga2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QgY2hvIGPDoWMgaOG7hyBz4buRIGjhu5NpIHF1eSDOsmouIMSQ4buDIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IGtow7RuZyAkSF8wIDogXGJldGFfaiA9IFxiZXRhXzAkICh0aMaw4budbmcgbMOgICR7zrJfezBqfX0gPSAwJCkgY2jhu5FuZyBs4bqhaSBnaeG6oyB0aHV54bq/dCDEkeG7kWkgbeG7mXQgcGjDrWEgaG/hurdjIGhhaSBwaMOtYSwgdGjhu5FuZyBrw6ogJFQgPSBcZnJhY3tcYmV0YV9qIC0gXGJldGFfezBqfX17U0UoXGJldGFfail9JCDEkcaw4bujYyBz4butIGThu6VuZy4gS2hpICRIXzAkIMSRw7puZywgVCBjw7MgcGjDom4gcGjhu5FpIHQgduG7m2kgbiDiiJIgcOKAsiBi4bqtYyB04buxIGRvIGtoaSBwaMawxqFuZyBzYWkgz4PCsiBjaMawYSBiaeG6v3QuIE3hu6ljIMO9IG5naMSpYSDEkcaw4bujYyB4w6FjIMSR4buLbmggYuG6sW5nIGPDoWNoIHRoYW0gY2hp4bq/dSDEkeG6v24gcGjDom4gcGjhu5FpIHQgbsOgeS4NCg0KKipTbyBzw6FuaCBNw7QgaMOsbmggTOG7k25nIG5oYXUgKENvbXBhcmluZyBOZXN0ZWQgTW9kZWxzKToqKiBN4buZdCBwaOG6p24gcXVhbiB0cuG7jW5nIGzDoCBzbyBzw6FuaCBjw6FjIG3DtCBow6xuaCBs4buTbmcgbmhhdS4gTeG7mXQgbcO0IGjDrG5oIEEgxJHGsOG7o2MgZ+G7jWkgbMOgIGzhu5NuZyBuaGF1IHRyb25nIG3DtCBow6xuaCBCIG7hur91IG3DtCBow6xuaCBBIGzDoCB0csaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdCBj4bunYSBtw7QgaMOsbmggQiB0aHUgxJHGsOG7o2MgYuG6sW5nIGPDoWNoIMSR4bq3dCBt4buZdCBz4buRIGjhu4cgc+G7kSBo4buTaSBxdXkgKM6yKSBi4bqxbmcgMC4gS2hpIHNvIHPDoW5oIGhhaSBtw7QgaMOsbmggbOG7k25nIG5oYXUsIG3hu6VjIMSRw61jaCBsw6AgeMOhYyDEkeG7i25oIHhlbSBtw7QgaMOsbmggcGjhu6ljIHThuqFwIGjGoW4gY8OzIGPhuqduIHRoaeG6v3QgaGF5IG3DtCBow6xuaCDEkcahbiBnaeG6o24gaMahbiBsw6AgxJHhu6cuIEdp4bqjIHRodXnhur90IGtow7RuZyBjaMOtbmggdGjhu6ljIGzDoCBoYWkgbcO0IGjDrG5oIHTGsMahbmcgxJHGsMahbmcuDQoNCioqS2nhu4NtIMSR4buLbmggRiB0cm9uZyBQaMOibiB0w61jaCBQaMawxqFuZyBzYWkgKEFOT1ZBIEYtdGVzdHMpOioqIFBow6JuIHTDrWNoIHBoxrDGoW5nIHNhaSAoQU5PVkEpIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oLiBLaeG7g20gxJHhu4tuaCBGIGN14buRaSBjw7luZyB0cm9uZyBi4bqjbmcgQU5PVkEgdHXhuqduIHThu7EsIG7hur91IGPDsyAxIGLhuq1jIHThu7EgZG8sIHRow6wgdMawxqFuZyDEkcawxqFuZyB24bubaSBraeG7g20gxJHhu4tuaCB0IGhhaSBwaMOtYSB0xrDGoW5nIOG7qW5nLiBUaOG7kW5nIGvDqiBGIGzDoCBiw6xuaCBwaMawxqFuZyBj4bunYSB0aOG7kW5nIGvDqiB0Lg0KDQoqKlPhu7EgS2jDoWMgYmnhu4d0IGdp4buvYSBLaeG7g20gxJHhu4tuaCB0IHbDoCBLaeG7g20gxJHhu4tuaCBGOioqIEvhur90IHF14bqjIHThu6sga2nhu4NtIMSR4buLbmggdCB2w6Aga2nhu4NtIMSR4buLbmggRiB0aMaw4budbmcga2jDoWMgbmhhdSB2w6wga2nhu4NtIMSR4buLbmggdCBsdcO0biDEkWnhu4F1IGNo4buJbmggY2hvIHThuqV0IGPhuqMgY8OhYyB0aMOgbmggcGjhuqduIGtow6FjIHRyb25nIG3DtCBow6xuaC4gVHV5IG5oacOqbiwgbmjGsCDEkcOjIG7Ds2ksIGNow7puZyB0xrDGoW5nIMSRxrDGoW5nIGtoaSBraeG7g20gxJHhu4tuaCBGIGPDsyAxIGLhuq1jIHThu7EgZG8uDQoNCioqVGjhu6kgdOG7sSB0aMOqbSBiaeG6v246KiogVGjhu6kgdOG7sSB0aMOqbSBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIHbDoG8gbcO0IGjDrG5oIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24gdmnhu4djIGNow7puZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGhheSBraMO0bmcuIE3hu6ljIMO9IG5naMSpYSBj4bunYSBt4buZdCBiaeG6v24gY8OzIHRo4buDIHBo4bulIHRodeG7mWMgdsOgbyB2aeG7h2MgbsOzIMSRxrDhu6NjIHRow6ptIHbDoG8gxJHhuqd1IHRpw6puIGhheSBzYXUga2hpIMSRw6MgxJFp4buBdSBjaOG7iW5oIGNobyBjw6FjIGJp4bq/biBraMOhYy4NCg0KKipI4buTaSBxdXkgc29uZyBzb25nIHbDoCDEkOG7mWMgbOG6rXAgKFBhcmFsbGVsIGFuZCBJbmRlcGVuZGVudCBSZWdyZXNzaW9ucyk6KiogdGjhuqNvIGx14bqtbiBt4buZdCB04bqtcCBo4bujcCBjw6FjIG3DtCBow6xuaCBs4buTbmcgbmhhdSB0aMaw4budbmcgxJHGsOG7o2Mgc28gc8OhbmguIEThu68gbGnhu4d1IGR1bmcgdMOtY2ggcGjhu5VpIChsdW5nY2FwKSDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBtaW5oIGjhu41hIHRyxrDhu51uZyBo4bujcCBt4buZdCBiaeG6v24gxJHhu5NuZyBiaeG6v24gKGNoaeG7gXUgY2FvKSB2w6AgbeG7mXQgeeG6v3UgdOG7kSAodMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMpLiDEkOG7mSBk4buRYyBraMOhYyBuaGF1IGPDsyB0aOG7gyDEkcaw4bujYyBtw7QgaMOsbmggaMOzYSBi4bqxbmcgY8OhY2ggc+G7rSBk4bulbmcgdMawxqFuZyB0w6FjIGdp4buvYSBjaGnhu4F1IGNhbyB2w6AgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgbmjGsCBt4buZdCBiaeG6v24gZ2nhuqNpIHRow61jaC4NCg0KKipOZ3V5w6puIHThuq9jIEJpw6puIChNYXJnaW5hbGl0eSBQcmluY2lwbGUpOioqIMSQaeG7gXUgbsOgeSBuZ+G7pSDDvSBy4bqxbmcgbuG6v3UgbeG7mXQgc+G7kSBo4bqhbmcgdMawxqFuZyB0w6FjICh2w60gZOG7pTogQTpCKSBjw7MgbeG6t3QgdHJvbmcgbcO0IGjDrG5oLCB0aMOsIGPDoWMgc+G7kSBo4bqhbmcgY2jDrW5oIHTGsMahbmcg4bupbmcgKEEgdsOgIEIpIGPFqW5nIG7Dqm4gxJHGsOG7o2MgZ2nhu68gbOG6oWksIG5nYXkgY+G6oyBraGkgY2jDum5nIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHJpw6puZyBs4bq7Lg0KDQoqKkzhu7FhIGNo4buNbiBNw7QgaMOsbmggKE1vZGVsIFNlbGVjdGlvbik6KioNCg0KLSBUacOqdSBjaMOtOiBBSUMgKEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24pIHbDoCBCSUMgKEJheWVzaWFuIEluZm9ybWF0aW9uIENyaXRlcmlvbikgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgaOG7lyB0cuG7oyBs4buxYSBjaOG7jW4gbcO0IGjDrG5oLiBBSUMgxJHGsOG7o2MgdHLDrWNoIHh14bqldCBi4bqxbmcgaMOgbSBleHRyYWN0QUlDKCkgdHJvbmcgUi4gQklDIGPFqW5nIHPhu60gZOG7pW5nIGjDoG0gbsOgeSBuaMawbmcgxJFp4buBdSBjaOG7iW5oIGjhu4cgc+G7kSBwaOG6oXQgKGspLiBBSUMgdsOgIEJJQyB0aOG6pXAgaMahbiAoZ+G6p24g4oiS4oieIGjGoW4pIMSRxrDhu6NjIMawYSBjaHXhu5luZyBoxqFuLi4uLiBWw60gZOG7pSwgZOG7ryBsaeG7h3UgbHVuZ2NhcCBjaG8gdGjhuqV5IHPhu7Ega+G6v3QgaOG7o3AgQ2hp4buBdSBjYW8gKEh0KSB2w6AgVMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgKFNtb2tlKSBo4buvdSDDrWNoIGjGoW4gQWdlIHbDoCBTbW9rZSBk4buxYSB0csOqbiBBSUMgdsOgIEJJQy4NCi0gQ8O0bmcgY+G7pSBU4buxIMSR4buZbmc6IEPDoWMgaMOgbSBSIG5oxrAgYWRkMSgpIHbDoCBkcm9wMSgpIGdpw7pwIGtow6FtIHBow6EgdMOhYyDEkeG7mW5nIGPhu6dhIHZp4buHYyB0aMOqbSBob+G6t2MgYuG7m3QgdOG7q25nIGJp4bq/biBt4buZdCBk4buxYSB0csOqbiBBSUMgKG3hurdjIMSR4buLbmgpLCBraeG7g20gxJHhu4tuaCBGIGhv4bq3YyBraeG7g20gxJHhu4tuaCBDaGkgYsOsbmggcGjGsMahbmcuIEjDoG0gc3RlcCgpIHThu7EgxJHhu5luZyBz4butIGThu6VuZyBhZGQxKCkgdsOgIGRyb3AxKCkgxJHhu4MgxJHhu4EgeHXhuqV0IG3hu5l0IG3DtCBow6xuaCBk4buxYSB0csOqbiBBSUMgKG3hurdjIMSR4buLbmgpIGhv4bq3YyBCSUMuIHN0ZXAoKSBo4buXIHRy4bujIGzhu7FhIGNo4buNbiB0aeG6v24gKGZvcndhcmQpLCBsw7lpIChiYWNrd2FyZCkgaG/hurdjIHThu6tuZyBixrDhu5tjIChzdGVwd2lzZSkuDQoJDQoqKlF1eSDGsOG7m2Mga8O9IGhp4buHdSB2w6AgZ2nhuqNpIHRow61jaDoqKiBDaMawxqFuZyBuw6B5IHRp4bq/cCB04bulYyBz4butIGThu6VuZyB2w6AgZ2nhu5tpIHRoaeG7h3UgY8OhYyBxdXkgxrDhu5tjIGvDvSBoaeG7h3UgY2hvIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCB0aGVvIHRoYW0gc+G7kSAsIGJhbyBn4buTbSBz4buRIGzGsOG7o25nIGJp4bq/biBnaeG6o2kgdGjDrWNoIChwKSB2w6Agc+G7kSBsxrDhu6NuZyB0aGFtIHPhu5EgaOG7k2kgcXV5IChwJykuIFZp4buHYyBnaeG6o2kgdGjDrWNoIGPDoWMgaOG7hyBz4buRIHRyb25nIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCDEkcaw4bujYyB0aOG6o28gbHXhuq1uLiBWw60gZOG7pSwgZ2nhuqNpIHBow6FwIGNobyBt4buZdCBiw6BpIHThuq1wIOG7nyBDaMawxqFuZyAzIChz4butIGThu6VuZyBtw7QgaMOsbmggdHV54bq/biB0w61uaCBjaG8gZOG7ryBsaeG7h3UgbHVuZ2NhcCkgZ2nhuqNpIHRow61jaCDDvSBuZ2jEqWEgY+G7p2EgaOG7hyBz4buRIFNtb2tlIGtoaSBtw7QgaMOsbmggY8OzIGPDoWMgYmnhur9uIGtow6FjIChBZ2UsIEh0LCBHZW5kZXIpIGhv4bq3YyBraGkgYmnhur9uIHBo4bqjbiBo4buTaSDEkcaw4bujYyBiaeG6v24gxJHhu5VpIGxvZy4NCg0KIyMgKipDSMavxqBORyAzOiBNw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmg6IENo4bqpbiDEkW/DoW4gdsOgIHjDonkgZOG7sW5nIG3DtCBow6xuaCoqDQoNCioqQ2jhuqluIMSRb8OhbiBNw7QgaMOsbmg6KiogxJDDonkgbMOgIG3hu5l0IHBo4bqnbiB0cuG7jW5nIHTDom0gY+G7p2EgY2jGsMahbmcuIE3hu6VjIHRpw6p1IGzDoCBraeG7g20gdHJhIGPDoWMgZ2nhuqMgxJHhu4tuaCBj4bunYSBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmgsIMSR4bq3YyBiaeG7h3QgbMOgIHBow6JuIHBo4buRaSBDaHXhuqluIGPhu6dhIHNhaSBz4buRLCB0w61uaCDEkeG7mWMgbOG6rXAgdsOgIHBoxrDGoW5nIHNhaSBraMO0bmcgxJHhu5VpIGPhu6dhIHNhaSBz4buRLiBDw6FjIGPDtG5nIGPhu6UgY2jhuqluIMSRb8OhbiDEkcaw4bujYyB0aOG6o28gbHXhuq1uIGJhbyBn4buTbToNCg0KUGjDom4gdMOtY2ggcGjhuqduIGTGsCAoUmVzaWR1YWwgQW5hbHlzaXMpOiBUcuG7sWMgcXVhbiBow7NhIGPDoWMgcGjhuqduIGTGsCAocmVzaWR1YWxzKSDEkeG7gyBwaMOhdCBoaeG7h24gY8OhYyB24bqlbiDEkeG7gS4NCg0KLSBQaOG6p24gZMawIMSRxrDhu6NjIGNodeG6qW4gaMOzYSAoU3RhbmRhcmRpemVkIHJlc2lkdWFscyk6IFRoxrDhu51uZyDEkcaw4bujYyB24bq9IGJp4buDdSDEkeG7kyBzbyB24bubaSBnacOhIHRy4buLIGZpdHRlZCAoRml0dGVkIHZhbHVlcykgaG/hurdjIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggKGNvdmFyaWF0ZXMpLiBCaeG7g3UgxJHhu5MgbsOgeSBnacO6cCBwaMOhdCBoaeG7h246DQogICAtIFBoaSB0dXnhur9uIHTDrW5oIChOb24tbGluZWFyaXR5KTogTuG6v3UgcGjhuqduIGTGsCBjw7MgeHUgaMaw4bubbmcgY29uZywgbcO0IGjDrG5oIGPDsyB0aOG7gyBj4bqnbiB0aMOqbSBjw6FjIGJp4bq/biBwaGkgdHV54bq/biBob+G6t2MgYmnhur9uIMSR4buVaSBiaeG6v24uDQogICANCiAgIC0gUGjGsMahbmcgc2FpIGtow7RuZyDEkeG7lWkgKENvbnN0YW50IHZhcmlhbmNlKSBoYXkgdMOtbmggxJHhu5NuZyBuaOG6pXQgKGhvbW9zY2VkYXN0aWNpdHkpOiBO4bq/dSBwaOG6p24gZMawIHBow6JuIHTDoW4gbmfhuqt1IG5oacOqbiBxdWFuaCAwIHbhu5tpIMSR4buZIHLhu5luZyDEkeG7k25nIMSR4buBdSwgZ2nhuqMgxJHhu4tuaCBwaMawxqFuZyBzYWkga2jDtG5nIMSR4buVaSDEkcaw4bujYyDEkcOhcCDhu6luZy4gTuG6v3UgxJHhu5kgcuG7mW5nIHBow6JuIHTDoW4gdGhheSDEkeG7lWkgdGhlbyBnacOhIHRy4buLIGZpdHRlZCBob+G6t2MgYmnhur9uIGdp4bqjaSB0aMOtY2ggKEhldGVyb3NjZWRhc3RpY2l0eSksIGPhuqduIHjhu60gbMO9LCB0aMaw4budbmcgbMOgIGJp4bq/biDEkeG7lWkgYmnhur9uIHBo4bqjbiBo4buTaS4NCiAgIA0KICAgLSBDw6FjIHF1YW4gc8OhdCBuZ2/huqFpIGxhaSAoT3V0bGllcnMpOiBDw6FjIMSRaeG7g20gY8OzIHBo4bqnbiBkxrAgbOG7m24gYuG6pXQgdGjGsOG7nW5nLg0KDQotCVBo4bqnbiBkxrAgZGV2aWFuY2UgxJHGsOG7o2MgY2h14bqpbiBow7NhIChTdGFuZGFyZGl6ZWQgZGV2aWFuY2UgcmVzaWR1YWxzKTogTeG7mXQgZOG6oW5nIHBo4bqnbiBkxrAga2jDoWMsIMSR4bq3YyBiaeG7h3QgaOG7r3Ugw61jaCB0cm9uZyBi4buRaSBj4bqjbmggR0xNIHLhu5luZyBoxqFuLCDEkcaw4bujYyB24bq9IGJp4buDdSDEkeG7kyBzbyB24bubaSBnacOhIHRy4buLIGZpdHRlZCBob+G6t2MgYuG7mSBk4buxIGLDoW8gdHV54bq/biB0w61uaCAoTGluZWFyIHByZWRpY3RvcikuDQoNCiAgICArCVBo4bqnbiBkxrAgbMOgbSB2aeG7h2MgKFdvcmtpbmcgcmVzaWR1YWxzKTogTeG7mXQgZOG6oW5nIHBo4bqnbiBkxrAga2jDoWMgbuG7r2EsIMSRxrDhu6NjIHbhur0gYmnhu4N1IMSR4buTIHNvIHbhu5tpIGLhu5kgZOG7sSBiw6FvIHR1eeG6v24gdMOtbmguDQogICAgDQogICAgKwlCaeG7g3UgxJHhu5MgUVEgQ2h14bqpbiAoTm9ybWFsIFEtUSBQbG90KTogU28gc8OhbmggcGjDom4gcGjhu5FpIGPhu6dhIHBo4bqnbiBkxrAgduG7m2kgcGjDom4gcGjhu5FpIENodeG6qW4gxJHhu4Mga2nhu4NtIHRyYSBnaeG6oyDEkeG7i25oIENodeG6qW4gY2hvIHNhaSBz4buRLg0KICAgIA0KICAgICsJQmnhu4N1IMSR4buTIHBo4bqnbiBkxrAgc28gduG7m2kgcGjhuqduIGTGsCB0cuG7hSAoUmVzaWR1YWxzIHZzIGxhZ2dlZCByZXNpZHVhbHMpOiBHacO6cCBraeG7g20gdHJhIHTDrW5oIMSR4buZYyBs4bqtcCBj4bunYSBzYWkgc+G7kSwgxJHhurdjIGJp4buHdCB24bubaSBk4buvIGxp4buHdSBjaHXhu5dpIHRo4budaSBnaWFuLg0KDQotCVBow6JuIHTDrWNoIMSRaeG7g20g4bqjbmggaMaw4bufbmcgKEluZmx1ZW5jZSBBbmFseXNpcyk6IFjDoWMgxJHhu4tuaCBjw6FjIHF1YW4gc8OhdCBjw7Mg4bqjbmggaMaw4bufbmcgbOG7m24gxJHhur9uIGvhur90IHF14bqjIGZpdHRlZCBj4bunYSBtw7QgaMOsbmguDQoNCiAgICArCUtob+G6o25nIGPDoWNoIENvb2sgKENvb2sncyBkaXN0YW5jZSk6IE3hu5l0IHRoxrDhu5tjIMSRbyBwaOG7lSBiaeG6v24gduG7gSBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSBt4buXaSBxdWFuIHPDoXQgbMOqbiB0b8OgbiBi4buZIG3DtCBow6xuaC4gQ8OhYyDEkWnhu4NtIGPDsyBraG/huqNuZyBjw6FjaCBDb29rIGzhu5tuIGPhuqduIMSRxrDhu6NjIHhlbSB4w6l0IGvhu7kgbMaw4buhbmcuIFZp4buHYyBsb+G6oWkgYuG7jyBjw6FjIMSRaeG7g20g4bqjbmggaMaw4bufbmcgdsOgIHJlZml0IG3DtCBow6xuaCBjw7MgdGjhu4MgbMOgbSB0aGF5IMSR4buVaSDEkcOhbmcga+G7gyBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQogICAgDQogICAgKwlDw6FjIHRoxrDhu5tjIMSRbyDhuqNuaCBoxrDhu59uZyBraMOhYzogZGZiZXRhLCBkZmZpdHMsIGNvdi5yYXRpby4NCg0KLQlCaeG7g3UgxJHhu5MgcGjhuqduIGTGsCByacOqbmcgKFBhcnRpYWwgUmVzaWR1YWwgUGxvdHMpOiBHacO6cCDEkcOhbmggZ2nDoSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGJp4bq/biBwaOG6o24gaOG7k2kgKHNhdSBraGkgxJHDoyDEkWnhu4F1IGNo4buJbmggY2hvIGPDoWMgYmnhur9uIGtow6FjIHRyb25nIG3DtCBow6xuaCkgdsOgIG3hu5l0IGJp4bq/biBnaeG6o2kgdGjDrWNoIGPhu6UgdGjhu4MsIMSR4buTbmcgdGjhu51pIGtp4buDbSB0cmEgdMOtbmggdHV54bq/biB0w61uaCBj4bunYSBt4buRaSBxdWFuIGjhu4cgxJHDsy4NCg0KKipYw6J5IGThu7FuZyB2w6AgQ+G6o2kgdGhp4buHbiBNw7QgaMOsbmggKE1vZGVsLUJ1aWxkaW5nIFRlY2huaXF1ZXMpOioqIEThu7FhIHRyw6puIGvhur90IHF14bqjIGNo4bqpbiDEkW/DoW4sIGNoxrDGoW5nIG7DoHkgZ2nhu5tpIHRoaeG7h3UgY8OhYyBr4bu5IHRodeG6rXQgxJHhu4Mgc+G7rWEgxJHhu5VpIG3DtCBow6xuaCBuaOG6sW0gxJHDoXAg4bupbmcgdOG7kXQgaMahbiBjw6FjIGdp4bqjIMSR4buLbmggdsOgL2hv4bq3YyBtw7QgdOG6oyBt4buRaSBxdWFuIGjhu4cgdHJvbmcgZOG7ryBsaeG7h3UgY2jDrW5oIHjDoWMgaMahbi4NCg0KLQlCaeG6v24gxJHhu5VpIGJp4bq/biAoVHJhbnNmb3JtYXRpb25zKToNCg0KICAgICsJQmnhur9uIMSR4buVaSBiaeG6v24gcGjhuqNuIGjhu5NpIChSZXNwb25zZSB2YXJpYWJsZSB0cmFuc2Zvcm1hdGlvbik6IMOBcCBk4bulbmcgY8OhYyBow6BtIG5oxrAgbG9nLCBjxINuIGLhuq1jIGhhaSwgbmdo4buLY2ggxJHhuqNvIGNobyBiaeG6v24gcGjhuqNuIGjhu5NpIMSR4buDIHjhu60gbMO9IHBoxrDGoW5nIHNhaSBraMO0bmcgxJHhu5VpIGhv4bq3YyBsw6BtIGNobyBwaMOibiBwaOG7kWkgZ+G6p24gduG7m2kgQ2h14bqpbiBoxqFuLiBDw6FjIHbDrSBk4bulIGJhbyBn4buTbSBz4butIGThu6VuZyBsb2coRkVWKSwgc3FydChGRVYpLCBsb2coV2luZCkgaG/hurdjIDEvV2luZDNjaG8gZOG7ryBsaeG7h3UgdMawxqFuZyDhu6luZy4gU28gc8OhbmggY8OhYyBtw7QgaMOsbmggduG7m2kgYmnhur9uIMSR4buVaSBraMOhYyBuaGF1IGPDsyB0aOG7gyDEkcaw4bujYyB0aOG7sWMgaGnhu4duIGLhurFuZyBjw6FjaCBraeG7g20gdHJhIGJp4buDdSDEkeG7kyBwaOG6p24gZMawIGhv4bq3YyB0acOqdSBjaMOtIG5oxrAgQUlDL0JJQy4NCg0KICAgICsJQmnhur9uIMSR4buVaSBiaeG6v24gZ2nhuqNpIHRow61jaCAoQ292YXJpYXRlIHRyYW5zZm9ybWF0aW9uKTogw4FwIGThu6VuZyBjw6FjIGjDoG0gKHRoxrDhu51uZyBsw6AgbG9nKSBjaG8gY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCDEkeG7gyB04bqhbyByYSBt4buRaSBxdWFuIGjhu4cgdHV54bq/biB0w61uaCB24bubaSBiaeG6v24gcGjhuqNuIGjhu5NpLg0KDQotCVh1IGjGsOG7m25nIMSQYSB0aOG7qWMgKFBvbHlub21pYWwgVHJlbmRzKTogVGhheSB2w6wgbeG7mXQgbeG7kWkgcXVhbiBo4buHIHR1eeG6v24gdMOtbmggxJHGoW4gZ2nhuqNuIGdp4buvYSBiaeG6v24gcGjhuqNuIGjhu5NpIHbDoCBt4buZdCBiaeG6v24gZ2nhuqNpIHRow61jaCB4LCBjw7MgdGjhu4MgdGjDqm0gY8OhYyBz4buRIGjhuqFuZyB4wrIsIHjCsywgLi4uIHbDoG8gbcO0IGjDrG5oIMSR4buDIG3DtCB04bqjIG3hu5FpIHF1YW4gaOG7hyBjb25nLiBWaeG7h2Mgc+G7rSBk4bulbmcgY8OhYyBow6BtIG5oxrAgcG9seSgpIHRyb25nIFIgxJHGsOG7o2MgdGjhuqNvIGx14bqtbi4gw50gbmdoxKlhIHRo4buRbmcga8OqIGPhu6dhIGPDoWMgc+G7kSBo4bqhbmcgYuG6rWMgY2FvIGjGoW4gxJHGsOG7o2Mga2nhu4NtIHRyYSDEkeG7gyB4w6FjIMSR4buLbmggYuG6rWMgxJFhIHRo4bupYyBwaMO5IGjhu6NwLg0KDQotCUjhu5NpIHF1eSBTcGxpbmVzIChSZWdyZXNzaW9uIFNwbGluZXMpOiBN4buZdCBwaMawxqFuZyBwaMOhcCBsaW5oIGhv4bqhdCBoxqFuIMSRYSB0aOG7qWMgxJHhu4MgbcO0IGjDrG5oIGjDs2EgY8OhYyBt4buRaSBxdWFuIGjhu4cgcGhpIHR1eeG6v24gcGjhu6ljIHThuqFwLCBi4bqxbmcgY8OhY2ggbuG7kWkgY8OhYyDEkWEgdGjhu6ljIChob+G6t2MgY8OhYyBow6BtIMSRxqFuIGdp4bqjbiBoxqFuKSB04bqhaSBjw6FjICLEkWnhu4NtIG7DunQiIChrbm90cykuIEPDoWMgaMOgbSBuaMawIG5zKCkgKG5hdHVyYWwgY3ViaWMgc3BsaW5lcykgdsOgIGJzKCkgKGJhc2lzIHNwbGluZXMpIHRyb25nIFIgxJHGsOG7o2MgZ2nhu5tpIHRoaeG7h3UgdsOgIG1pbmggaOG7jWEuDQoNCi0JU+G7kSBo4bqhbmcgVMawxqFuZyB0w6FjIChJbnRlcmFjdGlvbiBUZXJtcyk6IEJhbyBn4buTbSBjw6FjIGJp4bq/biBsw6AgdMOtY2ggY+G7p2EgaGFpIGhv4bq3YyBuaGnhu4F1IGJp4bq/biBnaeG6o2kgdGjDrWNoICh2w60gZOG7pTogQ2hp4buBdSBjYW8gKiBUw6xuaCB0cuG6oW5nIGjDunQgdGh14buRYykgxJHhu4MgbcO0IGjDrG5oIGjDs2EgdHLGsOG7nW5nIGjhu6NwIGhp4buHdSDhu6luZyBj4bunYSBt4buZdCBiaeG6v24gcGjhu6UgdGh14buZYyB2w6BvIGdpw6EgdHLhu4sgY+G7p2EgYmnhur9uIGtow6FjLiBOZ3V5w6puIHThuq9jIEJpw6puIChNYXJnaW5hbGl0eSBQcmluY2lwbGUpLCBraHV54bq/biBuZ2jhu4sgZ2nhu68gbOG6oWkgY8OhYyBz4buRIGjhuqFuZyBjaMOtbmggKG1haW4gZWZmZWN0cykgbuG6v3Ugc+G7kSBo4bqhbmcgdMawxqFuZyB0w6FjIGPhu6dhIGNow7puZyDEkcaw4bujYyDEkcawYSB2w6BvIG3DtCBow6xuaCwgdGjGsOG7nW5nIMSRxrDhu6NjIMOhcCBk4bulbmcuDQoNCi0JTOG7sWEgY2jhu41uIE3DtCBow6xuaCAoTW9kZWwgU2VsZWN0aW9uKTogVGnhur9wIHThu6VjIHPhu60gZOG7pW5nIGPDoWMgdGnDqnUgY2jDrSBuaMawIEFJQyB2w6AgQklDIMSR4buDIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oIMSRw6MgZml0dGVkIHNhdSBraGkgw6FwIGThu6VuZyBjw6FjIGvhu7kgdGh14bqtdCB4w6J5IGThu7FuZyBtw7QgaMOsbmguDQpDw6FjIHRyxrDhu51uZyBo4bujcCBuZ2hpw6puIGPhu6l1IHbDoCBiw6BpIHThuq1wIChDYXNlIFN0dWRpZXMgYW5kIFByb2JsZW1zKTogQ2jGsMahbmcgMyBz4butIGThu6VuZyBuaGnhu4F1IGLhu5kgZOG7ryBsaeG7h3Uga2jDoWMgbmhhdSDEkeG7gyBtaW5oIGjhu41hIGPDoWMga2jDoWkgbmnhu4dtIHbDoCBr4bu5IHRodeG6rXQgbsOgeSwgY8WpbmcgbmjGsCBjdW5nIGPhuqVwIGPDoWMgYsOgaSB04bqtcCBjaG8gbmfGsOG7nWkgxJHhu41jIHRo4buxYyBow6BuaC4gTeG7mXQgc+G7kSBi4buZIGThu68gbGnhu4d1IMSRxrDhu6NjIMSR4buBIGPhuq1wIG5oaeG7gXUgbOG6p24gYmFvIGfhu5NtIGx1bmdjYXAgKGR1bmcgdMOtY2ggcGjhu5VpKSwgaGVhdGNhcCAoZHVuZyBsxrDhu6NuZyBuaGnhu4d0KSwgZG1mdCAocsSDbmcgc8OidSwgbeG6pXQsIHRyw6FtKSwgZm9vZGNvbiAodGnDqnUgdGjhu6UgdGjhu6ljIMSDbiBj4bunYSBjw6EpLCBydW1pbmFudCAobsSDbmcgbMaw4bujbmcgdGnDqnUgaMOzYSDhu58gxJHhu5luZyB24bqtdCBuaGFpIGzhuqFpKSwgcmF0bGl2ZXIgKHRodeG7kWMgZ2nhu68gbOG6oWkgdHJvbmcgZ2FuIGNodeG7mXQpLCBmbHVvcm8gKHRo4budaSBnaWFuIHbDoCBsaeG7gXUgcGjDs25nIHjhuqEgdHJvbmcgQ1QpLCBidXR0ZXJmYXQgKGNo4bqldCBiw6lvIGLGoSB0cm9uZyBz4buvYSBiw7IpLiBDw6FjIGLDoGkgdOG6rXAgecOqdSBj4bqndSBuZ8aw4budaSDEkeG7jWMgdGjhu7FjIGhp4buHbiBjaOG6qW4gxJFvw6FuLCBiaeG6v24gxJHhu5VpIGJp4bq/biwgZml0dGVkIGPDoWMgbcO0IGjDrG5oIHBo4bupYyB04bqhcCBoxqFuIHbDoCBnaeG6o2kgdGjDrWNoIGvhur90IHF14bqjLg0KDQojIyAqKkNIxq/GoE5HIDQ6IMOdIHTGsOG7n25nIMaw4bubYyBsxrDhu6NuZyBraOG6oyBuxINuZyB44bqjeSByYSBj4buxYyDEkeG6oWkqKg0KDQoqKktow6FpIHF1w6F0IGjDs2EgbcO0IGjDrG5oIHR1eeG6v24gdMOtbmggY2h14bqpbiAoR2VuZXJhbGl6aW5nIHRoZSBOb3JtYWwgTGluZWFyIE1vZGVsKToqKiBDaMawxqFuZyB0aOG6o28gbHXhuq1uIHbhu4Egbmh1IGPhuqd1IHPhu60gZOG7pW5nIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBraMO0bmcgY2h14bqpbiB04bqvYyAobm9uLW5vcm1hbCByZWdyZXNzaW9uIG1vZGVscykuIEPDoWMgdMOsbmggaHXhu5FuZyDEkWnhu4NuIGjDrG5oIGJhbyBn4buTbSBiaeG6v24gxJHDoXAg4bupbmcgbmjhu4sgcGjDom4gaG/hurdjIMSR4bq/bSB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBuaOG7iyB0aOG7qWMsIGThu68gbGnhu4d1IMSR4bq/bSBraMO0bmcgZ2nhu5tpIGjhuqFuIGPDsyB0aOG7gyB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBQb2lzc29uIGhv4bq3YyBuaOG7iyB0aOG7qWMgw6JtLCB2w6AgY8OhYyBxdWFuIHPDoXQgZMawxqFuZyBsacOqbiB04bulYyAoY8OzIHRo4buDIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIEdhbW1hIGhv4bq3YyBJbnZlcnNlIEdhdXNzaWFuNCkuIA0KDQoqKsav4bubYyBsxrDhu6NuZyBraOG6oyBuxINuZyB44bqjeSByYSBj4buxYyDEkeG6oWkgKE1heGltdW0gTGlrZWxpaG9vZCBFc3RpbWF0aW9uIC0gTUxFKToqKg0KDQotIMOdIHTGsOG7n25nIGPGoSBi4bqjbiBsw6AgeGVtIHjDqXQgaMOgbSB4w6FjIHN14bqldCBj4bunYSBk4buvIGxp4buHdSDEkcOjIHF1YW4gc8OhdCBuaMawIGzDoCBt4buZdCBow6BtIGPhu6dhIGPDoWMgdGhhbSBz4buRIG3DtCBow6xuaCBjaMawYSBiaeG6v3QuICBIw6BtIG7DoHkgxJHGsOG7o2MgZ+G7jWkgbMOgIGjDoG0ga2jhuqMgbsSDbmcgeOG6o3kgcmEgKGxpa2VsaWhvb2QgZnVuY3Rpb24pLCBrw70gaGnhu4d1IEwozrY7eSksIHRyb25nIMSRw7MgeSBsw6AgZOG7ryBsaeG7h3UgcXVhbiBzw6F0IHbDoCDOtiBsw6AgdmVjdG9yIGPDoWMgdGhhbSBz4buRLg0KDQotIE5ndXnDqm4gdOG6r2Mga2jhuqMgbsSDbmcgeOG6o3kgcmEgY+G7sWMgxJHhuqFpIGzDoCDGsOG7m2MgbMaw4bujbmcgY8OhYyB0aGFtIHPhu5EgYuG6sW5nIG5o4buvbmcgZ2nDoSB0cuG7iyAoZ+G7jWkgbMOgIMaw4bubYyBsxrDhu6NuZyBraOG6oyBuxINuZyB44bqjeSByYSBj4buxYyDEkeG6oWkgLSBNTEUsIGvDvSBoaeG7h3UgY8OzIG3FqSwgdsOtIGThu6U6ICRcaGF0e1x6ZXRhfSQpIHNhbyBjaG8gaMOgbSBraOG6oyBuxINuZyB44bqjeSByYSDEkeG6oXQgZ2nDoSB0cuG7iyBs4bubbiBuaOG6pXQuIA0KDQotIMSQ4buDIHRodeG6rW4gdGnhu4duIHRyb25nIHTDrW5oIHRvw6FuLCB0aMaw4budbmcgbMOgbSB2aeG7h2MgduG7m2kgaMOgbSBsb2cta2jhuqMgbsSDbmcgeOG6o3kgcmEgKGxvZy1saWtlbGlob29kIGZ1bmN0aW9uKSwgJChcemV0YTsgeSkgPSBcbG9nIEwoXHpldGE7IHkpJC4gVmnhu4djIHThu5FpIMSRYSBow7NhIGjDoG0gbG9nLWto4bqjIG7Eg25nIHjhuqN5IHJhIGzDoCB0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIHZp4buHYyB04buRaSDEkWEgaMOzYSBow6BtIGto4bqjIG7Eg25nIHjhuqN5IHJhLg0KDQotIE3hu5l0IMSRaeG7g20gcXVhbiB0cuG7jW5nIMSRxrDhu6NjIG7DqnUgYuG6rXQgbMOgIHBoxrDGoW5nIHBow6FwIGLDrG5oIHBoxrDGoW5nIHThu5FpIHRoaeG7g3UgKGxlYXN0LXNxdWFyZXMpIHRo4buxYyBjaOG6pXQgbMOgIG3hu5l0IHRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0IGPhu6dhIE1MRSBraGkgbcO0IGjDrG5oIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4gdOG6r2MgKG5vcm1hbCBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbCkuIMSQ4buRaSB24bubaSBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggY2h14bqpbiwgdOG7kWkgxJFhIGjDs2EgaMOgbSBsb2cta2jhuqMgbsSDbmcgeOG6o3kgcmEgxJHhu5FpIHbhu5tpIGPDoWMgaOG7hyBz4buRIGjhu5NpIHF1eSBsw6AgdMawxqFuZyDEkcawxqFuZyB24bubaSB2aeG7h2MgdOG7kWkgdGhp4buDdSBow7NhIHThu5VuZyBiw6xuaCBwaMawxqFuZyBwaOG6p24gZMawIChyZXNpZHVhbCBzdW0gb2Ygc3F1YXJlcyAtIHJzcykuDQoNCgkqTUxFIGNobyBt4buZdCB2w6Agbmhp4buBdSB0aGFtIHPhu5E6Kg0KCQ0KLSDEkOG7gyB0w6xtIE1MRSwgbeG7mXQgY8OhY2ggdGnhur9wIGPhuq1uIGPDsyBo4buHIHRo4buRbmcgbMOgIHPhu60gZOG7pW5nIHBow6lwIHTDrW5oIHZpIHTDrWNoIHBow6JuLiDEkOG7kWkgduG7m2kgbeG7mXQgdGhhbSBz4buRIGR1eSBuaOG6pXQgzrYsIMSR4bqhbyBow6BtIGPhu6dhIGjDoG0gbG9nLWto4bqjIG7Eg25nIHjhuqN5IHJhIHRoZW8gzrYgxJHGsOG7o2MgZ+G7jWkgbMOgIGjDoG0gxJFp4buDbSAoc2NvcmUgZnVuY3Rpb24pLCBrw70gaGnhu4d1ICRVKFx6ZXRhKSA9IFxmcmFje2R9e2RcemV0YX0kLiDGr+G7m2MgbMaw4bujbmcgTUxFICRcaGF0e1x6ZXRhfSQgxJHGsOG7o2MgdMOsbSBi4bqxbmcgY8OhY2ggZ2nhuqNpIHBoxrDGoW5nIHRyw6xuaCDEkWnhu4NtIChzY29yZSBlcXVhdGlvbikgJFUoXGhhdHtcemV0YX0pID0gMCQuIMSQ4buRaSB24bubaSBjw6FjIGjDoG0gbG9nLWto4bqjIG7Eg25nIHjhuqN5IHJhIMSRxrDhu6NjIHjDqXQgdHJvbmcgc8OhY2ggKMSRxqFuIMSR4buJbmggdsOgIGto4bqjIHZpIGxpw6puIHThu6VjKSwgbOG7nWkgZ2nhuqNpIGPhu6dhIHBoxrDGoW5nIHRyw6xuaCDEkWnhu4NtIGx1w7RuIGNobyByYSDGsOG7m2MgbMaw4bujbmcgTUxFLiBIw6BtIMSRaeG7g20gY8OzIHTDrW5oIGNo4bqldCBxdWFuIHRy4buNbmcgbMOgIGvhu7MgduG7jW5nIGPhu6dhIG7DsyBi4bqxbmcgMCBraGkgxJHGsOG7o2MgdMOtbmggdOG6oWkgZ2nDoSB0cuG7iyB0aGFtIHPhu5EgdGjhu7FjLiANCg0KLSDEkOG7kWkgduG7m2kgbmhp4buBdSB0aGFtIHPhu5EgY2jGsGEgYmnhur90LCB2w60gZOG7pSBuaMawIHAnIHRoYW0gc+G7kSBo4buTaSBxdXkgzrJqLCBz4bq9IGPDsyBwJyBwaMawxqFuZyB0csOsbmggxJFp4buDbSB0xrDGoW5nIOG7qW5nLiBCaeG6v24gxJHDoXAg4bupbmcgeWkgxJHGsOG7o2MgZ2nhuqMgxJHhu4tuaCB0dcOibiB0aGVvIG3hu5l0IHBow6JuIHBo4buRaSAodGjGsOG7nW5nIHThu6sgaOG7jSBFRE0pIMSRxrDhu6NjIMSR4bq3YyB0csawbmcgYuG7n2kgdHJ1bmcgYsOsbmggzrxpIHbDoCB0aGFtIHPhu5EgcGjDom4gdMOhbiDPhi4gVHJ1bmcgYsOsbmggzrxpIGzDoCBow6BtIGPhu6dhIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggdsOgIHRoYW0gc+G7kSBo4buTaSBxdXksIHRoxrDhu51uZyB0aMO0bmcgcXVhIGLhu5kgZOG7sSBiw6FvIHR1eeG6v24gdMOtbmguDQoNCgkqQ8O0bmcgdGjhu6ljIG1hIHRy4bqtbiBjaG8gTUxFOioNCgkNCi0gUGjGsMahbmcgcGjDoXAgTUxFIGPDsyB0aOG7gyDEkcaw4bujYyBiaeG7g3UgZGnhu4VuIGLhurFuZyDEkeG6oWkgc+G7kSBtYSB0cuG6rW4uIFZlY3RvciBjw6FjIHRoYW0gc+G7kSDEkcaw4bujYyBrw70gaGnhu4d1IGzDoCDOti4gSMOgbSDEkWnhu4NtIHRy4bufIHRow6BuaCBt4buZdCB2ZWN0b3IgxJFp4buDbSAoc2NvcmUgdmVjdG9yKSBVKM62KSwgY2jhu6lhIGPDoWMgxJHhuqFvIGjDoG0gcmnDqm5nIHRoZW8gdOG7q25nIHRoYW0gc+G7kS4gUGjGsMahbmcgdHLDrG5oIMSRaeG7g20gbMOgICRVKFxoYXR7XHpldGF9KSA9IDAkLg0KDQotIMSQ4bqhbyBow6BtIGPhuqVwIGhhaSAoaG/hurdjIG1hIHRy4bqtbiBjw6FjIMSR4bqhbyBow6BtIHJpw6puZyBj4bqlcCBoYWkpIGPhu6dhIGjDoG0gbG9nLWto4bqjIG7Eg25nIHjhuqN5IHJhIMSRxrDhu6NjIGfhu41pIGzDoCBtYSB0cuG6rW4gdGjDtG5nIHRpbiBxdWFuIHPDoXQgKG9ic2VydmVkIGluZm9ybWF0aW9uIG1hdHJpeCksIEoozrYpLiBNYSB0cuG6rW4gdGjDtG5nIHRpbiBr4buzIHbhu41uZyAoRXhwZWN0ZWQgaW5mb3JtYXRpb24gbWF0cml4KSBoYXkgbWEgdHLhuq1uIHRow7RuZyB0aW4gRmlzaGVyIGzDoCAkSShcemV0YSkgPSBcbWF0aGJie0V9W0ooXHpldGEpXSQuIE1hIHRy4bqtbiBJKM62KSB0aMaw4budbmcgY8OzIGThuqFuZyDEkcahbiBnaeG6o24gaMahbiBKKM62KSB2w6AgY8OzIG3hu5l0IG3hu5FpIHF1YW4gaOG7hyBxdWFuIHRy4buNbmcgduG7m2kgcGjGsMahbmcgc2FpIGPhu6dhIGjDoG0gxJFp4buDbSB2w6AgxrDhu5tjIGzGsOG7o25nIE1MRS4NCg0KKipUaHXhuq10IHRvw6FuIEZpc2hlciBTY29yaW5nOioqIFZp4buHYyBnaeG6o2kgcGjGsMahbmcgdHLDrG5oIMSRaeG7g20gJFUoXGhhdHtcemV0YX0pID0gMCQgdGjGsOG7nW5nIMSRw7JpIGjhu49pIGPDoWMgcGjGsMahbmcgcGjDoXAgbOG6t3AuIFRodeG6rXQgdG/DoW4gRmlzaGVyIFNjb3JpbmcgbMOgIG3hu5l0IHBoxrDGoW5nIHBow6FwIGzhurdwIGhp4buHdSBxdeG6oyDEkeG7gyB0w61uaCB0b8OhbiBNTEUsIHPhu60gZOG7pW5nIG1hIHRy4bqtbiB0aMO0bmcgdGluIGvhu7MgduG7jW5nIEkozrYpIHRoYXkgdsOsIG1hIHRy4bqtbiB0aMO0bmcgdGluIHF1YW4gc8OhdCBKKM62KS4gQ8O0bmcgdGjhu6ljIGzhurdwIGPhu6dhIEZpc2hlciBTY29yaW5nIGzDoCANCiQkDQpcaGF0e1x6ZXRhfV57KHIrMSl9ID0gXGhhdHtcemV0YX1eeyhyKX0gKyBJXGxlZnQoIFxoYXR7XHpldGF9Xnsocil9IFxyaWdodCleey0xfSBVXGxlZnQoIFxoYXR7XHpldGF9Xnsocil9IFxyaWdodCkNCiQkDQoNCnRyb25nIMSRw7MgciBsw6Agc+G7kSBs4bqnbiBs4bq3cC4gVGh14bqtdCB0b8OhbiBuw6B5IMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIMaw4bubYyBsxrDhu6NuZyBjw6FjIHRoYW0gc+G7kSBo4buTaSBxdXkgzrJqIHRyb25nIEdMTXMuDQoNCioqS2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3Q6KioNCg0KLSBMw70gdGh1eeG6v3Qga2jhuqMgbsSDbmcgeOG6o3kgcmEgY3VuZyBj4bqlcCBjxqEgc+G7nyBjaG8gYmEgbG/huqFpIGtp4buDbSDEkeG7i25oIHN1eSBsdeG6rW4gY2jDrW5oOiBraeG7g20gxJHhu4tuaCBXYWxkIChXYWxkIHRlc3QpLCBraeG7g20gxJHhu4tuaCDEkWnhu4NtIChTY29yZSB0ZXN0KSwgdsOgIGtp4buDbSDEkeG7i25oIHThu7cgc+G7kSBraOG6oyBuxINuZyB44bqjeSByYSAoTGlrZWxpaG9vZCBSYXRpbyB0ZXN0KS4NCg0KLSBDw6FjIGtp4buDbSDEkeG7i25oIG7DoHkgZOG7sWEgdHLDqm4ga+G6v3QgcXXhuqMgdGnhu4dtIGPhuq1uIG3huqt1IGzhu5tuIChMYXJnZSBTYW1wbGUgQXN5bXB0b3RpYyBSZXN1bHRzKSwgY8OzIG5naMSpYSBsw6AgcGjDom4gcGjhu5FpIGPhu6dhIGPDoWMgdGjhu5FuZyBrw6oga2nhu4NtIMSR4buLbmggeOG6pXAgeOG7iSB0dcOibiB0aGVvIGPDoWMgcGjDom4gcGjhu5FpIGzDvSB0aHV54bq/dCAodGjGsOG7nW5nIGzDoCBwaMOibiBwaOG7kWkgY2hpLWLDrG5oIHBoxrDGoW5nKSBraGkgY+G7oSBt4bqrdSBuIMSR4bunIGzhu5tuIChuIOKGkiDiiJ4pDQoNCi0gS2nhu4NtIMSR4buLbmggV2FsZCBjw7MgdGjhu4MgZ+G6t3AgduG6pW4gxJHhu4EgduG7m2kgZOG7ryBsaeG7h3Ugbmjhu4sgdGjhu6ljLiBLaeG7g20gxJHhu4tuaCDEkWnhu4NtIHbDoCBraeG7g20gxJHhu4tuaCB04bu3IHPhu5Ega2jhuqMgbsSDbmcgeOG6o3kgcmEgdGjGsOG7nW5nIMSRw6FuZyB0aW4gY+G6rXkgaMahbi4gS2nhu4NtIMSR4buLbmggdOG7tyBz4buRIGto4bqjIG7Eg25nIHjhuqN5IHJhIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oIGzhu5NuZyBuaGF1IChuZXN0ZWQgbW9kZWxzKS4gS2nhu4NtIMSR4buLbmggxJFp4buDbSB0aMaw4budbmcgxJHDsmkgaOG7j2kgw610IHTDrW5oIHRvw6FuIGjGoW4gdsOsIGtow7RuZyBj4bqnbiDGsOG7m2MgbMaw4bujbmcgbcO0IGjDrG5oIMSR4bqneSDEkeG7pyBkxrDhu5tpIGdp4bqjIHRodXnhur90IMSR4buRaS4NCg0KIyMgKipDSMavxqBORyA1OiBDw6FjIG3DtCBow6xuaCB0dXnhur9uIHTDrW5oIHThu5VuZyBxdcOhdCAoR0xNcyk6IEPhuqV1IHRyw7pjKioNCg0KKipUaMOgbmggcGjhuqduIG5n4bqrdSBuaGnDqm4gKFJhbmRvbSBjb21wb25lbnQpOioqIFRow6BuaCBwaOG6p24gbsOgeSB4w6FjIMSR4buLbmggcGjDom4gcGjhu5FpIHjDoWMgc3XhuqV0IGPhu6dhIGJp4bq/biDEkcOhcCDhu6luZyAoeSkuIFRyb25nIEdMTXMsIGJp4bq/biDEkcOhcCDhu6luZyDEkcaw4bujYyBnaeG6oyDEkeG7i25oIHR1w6JuIHRoZW8gbeG7mXQgcGjDom4gcGjhu5FpIHRodeG7mWMgaOG7jSBNw7QgaMOsbmggUGjDom4gdMOhbiBMxal5IHRo4burYSAoRXhwb25lbnRpYWwgRGlzcGVyc2lvbiBNb2RlbCAtIEVETSkuIE3hu5dpIHBow6JuIHBo4buRaSBFRE0gY8OzIG3hu5l0IEjDoG0gcGjGsMahbmcgc2FpIChWKM68KSkgxJHhurdjIHRyxrBuZywgbcO0IHThuqMgbeG7kWkgcXVhbiBo4buHIGdp4buvYSBwaMawxqFuZyBzYWkgdsOgIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggKM68KSBj4bunYSB5LCB2w6AgbeG7mXQgYmnhu4N1IHRo4bupYyBjaG8gxJDhu5kgbOG7h2NoIMSRxqFuIHbhu4sgKGQoeSwgzrwpKS4gQ8OhYyB2w60gZOG7pSBwaOG7lSBiaeG6v24gduG7gSBFRE0gYmFvIGfhu5NtIHBow6JuIHBo4buRaSBDaHXhuqluIChOb3JtYWwpLCBQb2lzc29uLCBOaOG7iyB0aOG7qWMgKEJpbm9taWFsKSwgdsOgIEdhbW1hLCBt4buXaSBsb+G6oWkgY8OzIFYozrwpIHbDoCBkKHksIM68KSByacOqbmcuDQoNCioqVGjDoG5oIHBo4bqnbiBjw7MgaOG7hyB0aOG7kW5nIChTeXN0ZW1hdGljIGNvbXBvbmVudCk6KiogVGjDoG5oIHBo4bqnbiBuw6B5IGxpw6puIGvhur90IGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggKHgpIHbhu5tpIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggKM68KSBj4bunYSBiaeG6v24gxJHDoXAg4bupbmcgW3ByZXZpb3VzIHN1bW1hcnldLiBOw7MgxJHGsOG7o2MgeMOhYyDEkeG7i25oIGLhu59pOg0KDQotIELhu5kgZOG7sSBiw6FvIHR1eeG6v24gdMOtbmggKGxpbmVhciBwcmVkaWN0b3IgLSDOtyk6IEzDoCBt4buZdCB04buVIGjhu6NwIHR1eeG6v24gdMOtbmggY+G7p2EgY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCB2w6AgY8OhYyB0aGFtIHPhu5EgbcO0IGjDrG5oIA0KJCQNClxldGEgPSBcYmV0YV8wICsgXHN1bSBcYmV0YV9qIHhfag0KJCQgDQoNCi0gSMOgbSBsacOqbiBr4bq/dCAobGluayBmdW5jdGlvbiAtIGcpOiBMw6AgbeG7mXQgaMOgbSDEkcahbiDEkWnhu4d1IHbDoCBraOG6oyB2aSBsacOqbiBo4buHIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggzrwgduG7m2kgYuG7mSBk4buxIGLDoW8gdHV54bq/biB0w61uaCDOtyAkZyhcbXUpID0gXGV0YSQuIEjDoG0gbGnDqm4ga+G6v3QgY2jDrW5oIHThuq9jIChjYW5vbmljYWwgbGluaykgbMOgIHRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0IGtoaSDOtyBi4bqxbmcgduG7m2kgdGhhbSBz4buRIGNow61uaCB04bqvYyAozrgpIGPhu6dhIHBow6JuIHBo4buRaSBFRE0uIA0KDQoqKsSQ4buLbmggbmdoxKlhIEdMTToqKiBN4buZdCBHTE0gxJHGsOG7o2MgxJHhu4tuaCBuZ2jEqWEgYuG6sW5nIGPDoWNoIGNo4buJIMSR4buLbmggY+G7pSB0aOG7gyBo4buNIHBow6JuIHBo4buRaSBFRE0gY2hvIHRow6BuaCBwaOG6p24gbmfhuqt1IG5oacOqbiB2w6AgaMOgbSBsacOqbiBr4bq/dCBjaG8gdGjDoG5oIHBo4bqnbiBjw7MgaOG7hyB0aOG7kW5nLiBD4bqldSB0csO6YyBuw6B5IHRoxrDhu51uZyDEkcaw4bujYyBrw70gaGnhu4d1IGzDoCBnbG0oZWRtOyBMaW5rIGZ1bmN0aW9uKS4gDQoNCkjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIGzDoCBt4buZdCB0csaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdCBj4bunYSBHTE0sIHPhu60gZOG7pW5nIHBow6JuIHBo4buRaSBDaHXhuqluIChOb3JtYWwpIHbhu5tpIGjDoG0gcGjGsMahbmcgc2FpICRWKFxtdSkgPSAxJCAodOG7qWMgbMOgIHBoxrDGoW5nIHNhaSBo4bqxbmcpIHbDoCBow6BtIGxpw6puIGvhur90IMSR4buTbmcgbmjhuqV0IChpZGVudGl0eSBsaW5rKSAkZyhcbXUpID0gXG11JC4gDQoNCioqxJDhu5kgbOG7h2NoIHThu5VuZyAoVG90YWwgRGV2aWFuY2UpOioqIMSQw6J5IGzDoCB0aMaw4bubYyDEkW8gbeG7qWMgxJHhu5kgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmgsIMSRxrDhu6NjIHTDrW5oIGLhurFuZyB04buVbmcgdHLhu41uZyBz4buRIGPhu6dhIGPDoWMgxJHhu5kgbOG7h2NoIMSRxqFuIHbhu4sgY2hvIHThuqV0IGPhuqMgY8OhYyBxdWFuIHPDoXQgVmnhu4djIMaw4bubYyBsxrDhu6NuZyB0aGFtIHPhu5EgdHJvbmcgR0xNcyB0aMaw4budbmcgbmjhurFtIG3hu6VjIMSRw61jaCB04buRaSB0aGnhu4N1IGjDs2EuIMSQ4buZIGzhu4djaCB04buVbmcsIHTGsMahbmcgxJHGsMahbmcgduG7m2kgdmnhu4djIHThu5FpIMSRYSBow7NhIGjDoG0gbG9nLWxpa2VsaWhvb2QuDQoNCiMjICoqQ0jGr8agTkcgNjogQ8OhYyBtw7QgaMOsbmggdHV54bq/biB0w61uaCB04buVbmcgcXXDoXQ6IMav4bubYyBsxrDhu6NuZyoqDQoNCioqVMOtbmggdG/DoW4ga2jhuqMgbsSDbmcgeOG6o3kgcmEgKExpa2VsaWhvb2QgQ2FsY3VsYXRpb25zKToqKg0KDQotIFZp4buHYyDEkWnhu4F1IGNo4buJbmggR0xNcyBk4buxYSB2w6BvIGPhuqV1IHRyw7pjIGPhu6dhIEVETXMuDQoNCi0gxJDhu5FpIHbhu5tpIEVETXMsIMSR4bqhbyBow6BtIGPhu6dhIGjDoG0gbG9nIGto4bqjIG7Eg25nIHjhuqN5IHJhIChsb2cgcHJvYmFiaWxpdHkgZnVuY3Rpb24pIHRoZW8gzrwgY8OzIGThuqFuZyDEkcahbiBnaeG6o24yLiBD4bulIHRo4buDIA0KJCQNClxmcmFje1xwYXJ0aWFsIFxsb2cgUCh5OyBcbXUsIFxwaGkvdyl9e1xwYXJ0aWFsIFxtdX0gPSBcZnJhY3t3KHkgLSBcbXUpfXtccGhpIFYoXG11KX0NCiQkDQoNCioqUGjGsMahbmcgdHLDrG5oIFNjb3JlIHbDoCBUaMO0bmcgdGluIChTY29yZSBFcXVhdGlvbnMgYW5kIEluZm9ybWF0aW9uKToqKg0KDQotIEThuqFuZyBtYSB0cuG6rW4gY+G7p2EgcGjGsMahbmcgdHLDrG5oIHNjb3JlIGzDoCANCiQkVSA9IFheXHRvcCBXIE0gKHkgLSBcbXUpIC8gXHBoaSQkLg0KDQotIEThuqFuZyBtYSB0cuG6rW4gY+G7p2EgbWEgdHLhuq1uIHRow7RuZyB0aW4gY2hvIM6yIGzDoCANCiQkSSA9IFxmcmFje1heXHRvcCBXIFh9e1xwaGl9JCQuDQoNCi0gVHJvbmcgxJHDszogVyBsw6AgbWEgdHLhuq1uIMSRxrDhu51uZyBjaMOpbyBj4bunYSB0cuG7jW5nIHPhu5EgbMOgbSB2aeG7h2MgKHdvcmtpbmcgd2VpZ2h0cykgV+G1ojsgTSBsw6AgbWEgdHLhuq1uIMSRxrDhu51uZyBjaMOpbyBj4bunYSDEkeG6oW8gaMOgbSBow6BtIGxpw6puIGvhur90IChsaW5rIGRlcml2YXRpdmVzKSAkXGZyYWN7ZCBcZXRhX2l9e2QgXG11X2l9JC4NCg0KKipUw61uaCB0b8OhbiDGsOG7m2MgbMaw4bujbmcgY+G7p2EgzrIgKENvbXB1dGluZyBFc3RpbWF0ZXMgb2YgzrIpOioqDQoNCi0gQ8OhYyBuZ3Xhu5NuIMSRxrDhu6NjIGN1bmcgY+G6pXAga2jDtG5nIG3DtCB04bqjIGNoaSB0aeG6v3QgdGh14bqtdCB0b8OhbiAodsOtIGThu6U6IEZpc2hlciBzY29yaW5nIGhv4bq3YyBJUkxTKSDEkcaw4bujYyBz4butIGThu6VuZyB0cm9uZyBDaMawxqFuZyA2IMSR4buDIHTDrW5oIHRvw6FuIMaw4bubYyBsxrDhu6NuZyAkXGhhdHtcYmV0YX0kLg0KCQ0KLSBUdXkgbmhpw6puLCBjaMO6bmcgY3VuZyBj4bqlcCBjw6FjIMSR4bqhbyBow6BtIGPhu6dhIGjDoG0gbG9nIGto4bqjIG7Eg25nIHjhuqN5IHJhIHRoZW8gzrwgdsOgIM6y4rG8LCBsw6Agbmjhu69uZyB0aMOgbmggcGjhuqduIGPhuqduIHRoaeG6v3QgY2hvIGPDoWMgdGh14bqtdCB0b8OhbiDGsOG7m2MgbMaw4bujbmcgZOG7sWEgdHLDqm4gxJHhuqFvIGjDoG0gKG5oxrAgcGjGsMahbmcgcGjDoXAgTmV3dG9uLVJhcGhzb24gaG/hurdjIEZpc2hlciBzY29yaW5nKS4NCgkNCioqxJDhu5kgbOG7h2NoIGTGsCAoUmVzaWR1YWwgRGV2aWFuY2UgKToqKg0KDQotIFJlc2lkdWFsIGRldmlhbmNlIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIGThu7FhIHRyw6puIMSRxqFuIHbhu4sgxJHhu5kgbOG7h2NoICh1bml0IGRldmlhbmNlKSBkKHksIM68KS4NCg0KLSDEkMahbiB24buLIMSR4buZIGzhu4djaCBkKHksIM68KSBsw6AgbeG7mXQgdGjGsOG7m2MgxJFvIHPhu7Ega2jDoWMgYmnhu4d0IChkaXNjcmVwYW5jeSkgZ2nhu69hIHkgdsOgIM68LiBOw7MgxJHGsOG7o2MgxJHhu4tuaCBuZ2jEqWEgbMOgIA0KJCRkKHksIFxtdSkgPSAyIFxiaWdceyB0KHksIHkpIC0gdCh5LCBcbXUpIFxiaWdcfSQkDQp0cm9uZyDEkcOzICR0KHkszrwpID0gec64IC0gzroozrgpJCBsw6AgcGjhuqduIGPhu6dhIGjDoG0geMOhYyBzdeG6pXQgRURNIHBo4bulIHRodeG7mWMgdsOgbyDOuCAoaG/hurdjIM68KSwgZCh5LCDOvCkgbHXDtG4ga2jDtG5nIMOibSB2w6AgYuG6sW5nIDAga2hpICR5ID0gzrwkLg0KDQotIMSQ4buRaSB24bubaSBjw6FjIHRyxrDhu51uZyBo4bujcCBiacOqbiwgxJHhu4tuaCBuZ2jEqWEgZ2nhu5tpIGjhuqFuIGPhu6dhIMSRxqFuIHbhu4sgxJHhu5kgbOG7h2NoIMSRxrDhu6NjIHPhu60gZOG7pW5nMTEuIFbDrSBk4bulLCDEkeG7kWkgduG7m2kgcGjDom4gcGjhu5FpIFBvaXNzb24sICRkKHksIFxtdSkgPSAyIFxsZWZ0XHsgeSBcbG9nXGxlZnQoXGZyYWN7eX17XG11fVxyaWdodCkgLSAoeSAtIFxtdSkgXHJpZ2h0XH0kIGNobyB5IOKJoCAwIHbDoCAkZCgwLCBcbXUpID0gMlxtdSQgY2hvIHkgPSAwLiDEkOG7kWkgduG7m2kgcGjDom4gcGjhu5FpIGNodeG6qW4sICRkKHksIFxtdSkgPSAoeSAtIFxtdSleMiQuDQoNCi0gSMOgbSB4w6FjIHN14bqldCBj4bunYSBFRE0gY8OzIHRo4buDIHZp4bq/dCBs4bqhaSBkxrDhu5tpIGThuqFuZyBtw7QgaMOsbmggcGjDom4gdMOhbiBz4butIGThu6VuZyDEkcahbiB24buLIMSR4buZIGzhu4djaDogDQokJA0KUCh5OyBcbXUsIFxwaGkpID0gYih5LCBccGhpKSBcZXhwXGxlZnRceyAtXGZyYWN7ZCh5LCBcbXUpfXsyIFxwaGl9IFxyaWdodFx9DQokJA0KDQotIFJlc2lkdWFsIGRldmlhbmNlIHThu5VuZyBj4buZbmcgY2hvIG3DtCBow6xuaCDEkcOjIGZpdCDOvMyCIGzDoCB04buVbmcgY8OzIHRy4buNbmcgc+G7kSBj4bunYSBjw6FjIMSRxqFuIHbhu4sgxJHhu5kgbOG7h2NoIGNobyBt4buXaSBxdWFuIHPDoXQuDQoNCi0gIMSQ4buZIGzhu4djaCBkxrAgxJHGsOG7o2MgY2hpYSB04bu3IGzhu4cgKFNjYWxlZCByZXNpZHVhbCBkZXZpYW5jZSkgbMOgICREXiooeSwgXGhhdHtcbXV9KSA9IFxmcmFje0QoeSwgXGhhdHtcbXV9KX17XHBoaX0kDQoNCi0gxJDhu5kgbOG7h2NoIGTGsCDEkcaw4bujYyBsacOqbiBr4bq/dCB24bubaSBi4bqtYyB04buxIGRvIGTGsCANCg0KLSBSZXNpZHVhbCBkZXZpYW5jZSBjw7MgdGjhu4MgdHJ1eSBj4bqtcCBi4bqxbmcgaMOgbSBkZXZpYW5jZSgpIHRyb25nIFIgDQoNCioqU2FpIHPhu5EgY2h14bqpbiBjaG8gzrLMgiAoU3RhbmRhcmQgRXJyb3JzIGZvciDOssyCKToqKg0KDQotIFNhaSBz4buRIGNodeG6qW4gKFN0ZC4gRXJyb3IpIGNobyBjw6FjIMaw4bubYyBsxrDhu6NuZyBo4buHIHPhu5EgKM6yICkgzILEkcaw4bujYyBoaeG7g24gdGjhu4sgdHJvbmcga+G6v3QgcXXhuqMgdMOzbSB04bqvdCBtw7QgaMOsbmggdHV54bq/biB0w61uaCAobG0pMTYgdsOgIEdMTSAoZ2xtKSAgDQoNCi0gQ8OhYyBzYWkgc+G7kSBjaHXhuqluIGPhu6dhICRcaGF0e1xiZXRhfV9qJCwga8O9IGhp4buHdSBsw6AgJFxtYXRocm17c2V9KFxoYXR7XGJldGF9X2opJCwgxJHGsOG7o2MgdMOtbmggYuG6sW5nIGPDoWNoIGzhuqV5IGPEg24gYuG6rWMgaGFpIGPhu6dhIGPDoWMgcGjhuqduIHThu60gdHLDqm4gxJHGsOG7nW5nIGNow6lvIGNow61uaCBj4bunYSBtYSB0cuG6rW4gbmdo4buLY2ggxJHhuqNvIGPhu6dhIG1hIHRy4bqtbiB0aMO0bmcgdGluIMSRw6MgbmjDom4gduG7m2kgz4YgKGhv4bq3YyDGsOG7m2MgbMaw4bujbmcgY+G7p2EgbsOzKS4gQ8O0bmcgdGjhu6ljIGzDoCAkXG1hdGhybXtzZX0oXGhhdHtcYmV0YX1faikgPSBcc3FydHtccGhpIFwsIFxudV9qfSQuDQoNCioqxq/hu5tjIGzGsOG7o25nIEdMTXMgZ2nhu5FuZyBo4buTaSBxdXkgdHV54bq/biB0w61uaCBj4bulYyBi4buZIChFc3RpbWF0aW9uIG9mIEdMTXMgSXMgTG9jYWxseSBMaWtlIExpbmVhciBSZWdyZXNzaW9uKToqKg0KDQotIEtow6FpIG5p4buHbSAixq/hu5tjIGzGsOG7o25nIEdMTXMgZ2nhu5FuZyBo4buTaSBxdXkgdHV54bq/biB0w61uaCBj4bulYyBi4buZIiDEkcaw4bujYyDEkeG7gSBj4bqtcCB0cm9uZyB0w7NtIHThuq90IHRyxrDhu5tjIMSRw6J5LCBuaMawbmcgdGnDqnUgxJHhu4EgaG/hurdjIG7hu5lpIGR1bmcgY2hpIHRp4bq/dCBnaeG6o2kgdGjDrWNoIHPhu7EgdMawxqFuZyDEkeG7k25nIG7DoHkga2jDtG5nIGPDsyB0cm9uZyBjw6FjIMSRb+G6oW4gdHLDrWNoIG5ndeG7k24gaGnhu4duIHThuqFpLg0KDQotIFR1eSBuaGnDqm4sIGPDoWMgxJFv4bqhbiB0csOtY2ggY2hvIHRo4bqleSBjw6FjIGvhu7kgdGh14bqtdCBjaOG6qW4gxJFvw6FuIGNobyBHTE1zIChuaMawIGJp4buDdSDEkeG7kyBwaOG6p24gZMawIGNodeG6qW4gaMOzYSBzbyB24bubaSBnacOhIHRy4buLIGZpdCwgYmnhu4N1IMSR4buTIFEtUSBj4bunYSBwaOG6p24gZMawLCBDb29rJ3MgZGlzdGFuY2UpIHTGsMahbmcgdOG7sSBuaMawIGPDoWMga+G7uSB0aHXhuq10IMSRxrDhu6NjIHPhu60gZOG7pW5nIHRyb25nIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oLCBjaG8gdGjhuqV5IG3hu5l0IHPhu7EgdMawxqFuZyDEkeG7k25nIHRyb25nIHBow6JuIHTDrWNoIHNhdSBraGkgZml0IG3DtCBow6xuaC4NCg0KKirGr+G7m2MgbMaw4bujbmcgz4YgKEVzdGltYXRpbmcgz4YpOioqIFRoYW0gc+G7kSBwaMOibiB0w6FuIM+GIGzDoCBt4buZdCBwaOG6p24gY+G7p2EgxJHhu4tuaCBuZ2jEqWEgRURNIHbDoCDhuqNuaCBoxrDhu59uZyDEkeG6v24gcGjGsMahbmcgc2FpICRcb3BlcmF0b3JuYW1le3Zhcn0oeSkgPSBccGhpIFYoXG11KSQuIMSQ4buRaSB24bubaSBt4buZdCBz4buRIHBow6JuIHBo4buRaSwgz4YgxJHGsOG7o2MgYmnhur90IHRyxrDhu5tjICh2w60gZOG7pTogz4YgPSAxIGNobyBwaMOibiBwaOG7kWkgUG9pc3NvbikuIMSQ4buRaSB24bubaSBwaMOibiBwaOG7kWkgY2h14bqpbiwgJFxwaGkgPSBcc2lnbWFeMiQuDQoNCioqU+G7rSBk4bulbmcgUiAoVXNpbmcgUik6KioNCg0KLSBIw6BtIGdsbSgpIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIGZpdCBHTE1zLg0KDQotIEPhuqV1IHRyw7pjIGPhu5F0IGzDtWkgY+G7p2EgbeG7mXQgR0xNIHRyb25nIMSR4buLbmggbmdoxKlhIMSRxrDhu6NjIGvDvSBoaeG7h3UgbMOgIGdsbShlZG07IExpbmsgZnVuY3Rpb24pLiBUcm9uZyBSLCDEkWnhu4F1IG7DoHkgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaCBi4bqxbmcgY8OhY2ggc+G7rSBk4bulbmcgxJHhu5FpIHPhu5EgZmFtaWx5KCkgduG7m2kgdMOqbiBwaMOibiBwaOG7kWkgdsOgIGjDoG0gbGnDqm4ga+G6v3QsIHbDrSBk4bulOiBmYW1pbHkoImJpbm9taWFsIiwgbGluaz0ibG9naXQiKS4NCg0KLSBIw6BtIHN1bW1hcnkoKSBjdW5nIGPhuqVwIHRow7RuZyB0aW4gcGhvbmcgcGjDuiB24buBIG3DtCBow6xuaCBHTE0gxJHDoyBmaXQuIEvhur90IHF14bqjIHThu6sgc3VtbWFyeSgpIHRoxrDhu51uZyBiYW8gZ+G7k20gY8OhYyDGsOG7m2MgbMaw4bujbmcgaOG7hyBz4buRLCBzYWkgc+G7kSBjaHXhuqluIHbDoCBnacOhIHRy4buLIHAtdmFsdWUgLg0KDQotIEPDsyB0aOG7gyB0cnV5IGPhuq1wIHJlc2lkdWFsIGRldmlhbmNlIGLhurFuZyBow6BtIGRldmlhbmNlKCkuDQoNCi0gQ8OzIHRo4buDIHRydXkgY+G6rXAgYuG6rWMgdOG7sSBkbyBkxrAgYuG6sW5nIGjDoG0gZGYucmVzaWR1YWwoKS4NCg0KIyMgKipDSMavxqBORyA3OiBDw6FjIG3DtCBow6xuaCB0dXnhur9uIHTDrW5oIHThu5VuZyBxdcOhdDogU3V5IGx14bqtbioqDQoNCioqU3V5IGx14bqtbiB24buBIGPDoWMgSOG7hyBz4buRIHRyb25nIEdMTXMqKjogU3V5IGx14bqtbiB24buBIGPDoWMgdGhhbSBz4buRICh2w60gZOG7pTogY8OhYyBo4buHIHPhu5EgaOG7k2kgcXV5IM6yKSBsw6AgbeG7mXQgcGjhuqduIHF1YW4gdHLhu41uZyBj4bunYSB2aeG7h2MgaGnhu4N1IG3DtCBow6xuaC4gQ8OhYyDEkW/huqFuIHRyw61jaCBuZ3Xhu5NuIMSR4buBIGPhuq1wIMSR4bq/biBjw6FjIHBoxrDGoW5nIHBow6FwIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IHbhu4EgY8OhYyB0aGFtIHPhu5EgbsOgeSwgY2jhurNuZyBo4bqhbiBuaMawIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IG51bGwgJEhfMDogXGJldGFfMSA9MCQgLiBCYSB0aOG7kW5nIGvDqiBraeG7g20gxJHhu4tuaCBjaMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgY2hvIG3hu6VjIMSRw61jaCBuw6B5IGzDoDoNCg0KLSBLaeG7g20gxJHhu4tuaCBXYWxkOiDEkMOieSBsw6AgbeG7mXQgdHJvbmcgbmjhu69uZyBraeG7g20gxJHhu4tuaCBwaOG7lSBiaeG6v24gxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgxJHDoW5oIGdpw6Egc+G7sSDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogY+G7p2EgY8OhYyBo4buHIHPhu5EgcmnDqm5nIGzhursgdHJvbmcgbcO0IGjDrG5oIEdMTS4gS+G6v3QgcXXhuqMgdOG7qyBzdW1tYXJ5KCkgdHJvbmcgUiBjaG8gbcO0IGjDrG5oIEdMTSB0aMaw4budbmcgYmFvIGfhu5NtIGPDoWMgxrDhu5tjIGzGsOG7o25nIGjhu4cgc+G7kSwgc2FpIHPhu5EgY2h14bqpbiB2w6AgZ2nDoSB0cuG7iyBwLXZhbHVlLCB0aMaw4budbmcgZOG7sWEgdHLDqm4ga2nhu4NtIMSR4buLbmguDQoNCi0gS2nhu4NtIMSR4buLbmggU2NvcmUgKGhv4bq3YyBSYW8pIDogS2nhu4NtIMSR4buLbmggbsOgeSBjxaluZyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCB24buBIGPDoWMgdGhhbSBz4buRLg0KDQotIEtp4buDbSDEkeG7i25oIExpa2VsaWhvb2QgUmF0aW86IEtp4buDbSDEkeG7i25oIG7DoHkgc28gc8OhbmggxJHhu5kga2jhu5twIGPhu6dhIGhhaSBtw7QgaMOsbmggbOG7k25nIG5oYXUgKG3hu5l0IG3DtCBow6xuaCBsw6AgdHLGsOG7nW5nIGjhu6NwIMSR4bq3YyBiaeG7h3QgY+G7p2EgbcO0IGjDrG5oIGtpYSkgYuG6sW5nIGPDoWNoIHPhu60gZOG7pW5nIHThu7cgbOG7hyBnaeG7r2EgY8OhYyBow6BtIGjhu6NwIGzDvSAobGlrZWxpaG9vZCBmdW5jdGlvbnMpLg0KDQpUaGVvIGzDvSB0aHV54bq/dCB0aeG7h20gY+G6rW4sIGtoaSBrw61jaCB0aMaw4bubYyBt4bqrdSDEkeG7pyBs4bubbiAobiDihpIg4oieKSwgbeG7l2kgdGjhu5FuZyBrw6oga2nhu4NtIMSR4buLbmggbsOgeSAoV2FsZCwgU2NvcmUsIExpa2VsaWhvb2QgUmF0aW8pIHPhur0gdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgY2hpLXNxdWFyZSAoz4fCsikgduG7m2kgYuG6rWMgdOG7sSBkbyBi4bqxbmcgc+G7kSBsxrDhu6NuZyB0aGFtIHPhu5EgxJFhbmcgxJHGsOG7o2Mga2nhu4NtIMSR4buLbmggZMaw4bubaSBnaeG6oyB0aHV54bq/dC4gR2nDoSB0cuG7iyB0aOG7kW5nIGvDqiBraeG7g20gxJHhu4tuaCBs4bubbiBjdW5nIGPhuqVwIGLhurFuZyBjaOG7qW5nIG3huqFuaCBt4bq9IMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBudWxsLCBjaG8gdGjhuqV5IGJp4bq/biBnaeG6o2kgdGjDrWNoIHTGsMahbmcg4bupbmcgY8OzIG3hu5FpIHF1YW4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHbhu5tpIGJp4bq/biBwaOG6o24gaOG7k2kgLg0KDQoqKkzhu7FhIGNo4buNbiBnaeG7r2EgY8OhYyBNw7QgaMOsbmggR0xNczoqKiBWaeG7h2MgbOG7sWEgY2jhu41uIG3DtCBow6xuaCBwaMO5IGjhu6NwIGzDoCBy4bqldCBxdWFuIHRy4buNbmczLiBOZ3Xhu5NuIHTDoGkgbGnhu4d1IG3DtCB04bqjIGPDoWMgcGjGsMahbmcgcGjDoXAga2jDoWMgbmhhdSB0w7l5IHRodeG7mWMgdsOgbyBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGPDoWMgbcO0IGjDrG5oIMSRYW5nIMSRxrDhu6NjIHNvIHPDoW5oLg0KDQotICBTbyBzw6FuaCBjw6FjIE3DtCBow6xuaCBM4buTbmcgbmhhdSAoTmVzdGVkIE1vZGVscyk6DQoNCiAgIC0gxJDhu5FpIHbhu5tpIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oICht4buZdCB0csaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdCBj4bunYSBHTE1zKSwgUGjDom4gdMOtY2ggUGjGsMahbmcgc2FpIChBTk9WQSkgY8OzIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHNvIHPDoW5oIGhhaSBtw7QgaMOsbmggbOG7k25nIG5oYXUuDQogICAtIFRyb25nIGLhuqNuZyBBTk9WQSwgdOG7lW5nIGLDrG5oIHBoxrDGoW5nIChTdW0gU3EpIMSRxrDhu6NjIHBow6JuIHTDoWNoIHRow6BuaCBjw6FjIHRow6BuaCBwaOG6p24gZG8gdOG7q25nIGJp4bq/biBnaeG6o2kgdGjDrWNoIMSRw7NuZyBnw7NwICggU2VxdWVudGlhbCBBbmFseXNpcyBvZiBWYXJpYW5jZSkuIE3hu5l0IGLhuqNuZyBBTk9WQSBjw7MgdGjhu4MgY2hvIHRo4bqleSBz4buxIMSRw7NuZyBnw7NwIGPhu6dhIHThu6tuZyBiaeG6v24ga2hpIMSRxrDhu6NjIHRow6ptIHbDoG8gbcO0IGjDrG5oIHRoZW8gbeG7mXQgdGjhu6kgdOG7sSBuaOG6pXQgxJHhu4tuaC4gDQogICAtIMSQ4buRaSB24bubaSBHTE1zIG7Ds2kgY2h1bmcsIGjDoG0gYW5vdmEoKSB0cm9uZyBSIGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBzbyBzw6FuaCBjw6FjIG3DtCBow6xuaCBs4buTbmcgbmhhdSB2w6AgY8OzIHRo4buDIHPhu60gZOG7pW5nIGPDoWMga2nhu4NtIMSR4buLbmggbmjGsCBraeG7g20gxJHhu4tuaCBDaGktc3F1YXJlICh0ZXN0PSJDaGlzcSIpLiANCi0gU28gc8OhbmggY8OhYyBNw7QgaMOsbmgga2jDtG5nIEzhu5NuZyBuaGF1IChOb24tbmVzdGVkIE1vZGVscyk6DQoNCiAgIC0gS2hpIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oIGtow7RuZyBs4buTbmcgbmhhdSBob+G6t2MgxJHhu4MgbOG7sWEgY2jhu41uIG3DtCBow6xuaCB04buVbmcgdGjhu4MsIGPDoWMgdGnDqnUgY2jDrSB0aMO0bmcgdGluIHRoxrDhu51uZyDEkcaw4bujYyBz4butIGThu6VuZy4gSGFpIHRpw6p1IGNow60gcGjhu5UgYmnhur9uIMSRxrDhu6NjIMSR4buBIGPhuq1wIGzDoDoNCiAgIA0KICAgICAgLSBUacOqdSBjaMOtIHRow7RuZyB0aW4gQWthaWtlIChBSUMgLSBBa2Fpa2UgSW5mb3JtYXRpb24gQ3JpdGVyaW9uKTogQUlDIMSRxrDhu6NjIHTDrW5oIHRvw6FuIGThu7FhIHRyw6puIGjDoG0gaOG7o3AgbMO9IGPhu7FjIMSR4bqhaSB2w6Agc+G7kSBsxrDhu6NuZyB0aGFtIHPhu5EgdHJvbmcgbcO0IGjDrG5oLiBDw7RuZyB0aOG7qWMgY8ahIGLhuqNuIChraGkgdGhhbSBz4buRIHBow6JuIHTDoW4gz4YgxJHDoyBiaeG6v3QpIGzDoCAkXG1hdGhybXtBSUN9ID0gLTIgXHRpbWVzIFxsb2dcdGV4dHstbGlrZWxpaG9vZH0gKyAycCckLCB0cm9uZyDEkcOzIHDigLIgbMOgIHPhu5EgbMaw4bujbmcgdGhhbSBz4buRIGjhu5NpIHF1eSAoYmFvIGfhu5NtIGPhuqMgaOG7hyBz4buRIGNo4bq3biBu4bq/dSBjw7MpLg0KICAgICAgDQogICAgICAtIFRpw6p1IGNow60gdGjDtG5nIHRpbiBCYXllc2lhbiAoQklDIC0gQmF5ZXNpYW4gSW5mb3JtYXRpb24gQ3JpdGVyaW9uKTogQklDIGPFqW5nIGThu7FhIHRyw6puIGjDoG0gaOG7o3AgbMO9IG5oxrBuZyDDoXAgZOG7pW5nIG3hu5l0ICJow6xuaCBwaOG6oXQiIGzhu5tuIGjGoW4gY2hvIHPhu5EgbMaw4bujbmcgdGhhbSBz4buRIHNvIHbhu5tpIEFJQywgxJHhurdjIGJp4buHdCBsw6AgduG7m2kga8OtY2ggdGjGsOG7m2MgbeG6q3UgbOG7m24gW3Ryw61jaCBk4bqrbiB0csaw4bubYyDEkcOzXS4gQ8O0bmcgdGjhu6ljIGPGoSBi4bqjbiAoa2hpIM+GIMSRw6MgYmnhur90KSBsw6AgJFxtYXRocm17QklDfSA9IC0yIFx0aW1lcyBcbG9nXHRleHR7LWxpa2VsaWhvb2R9ICsgKFxsb2cgbikgXGNkb3QgcCckLiANCg0KICAgLSBLaGkgdGhhbSBz4buRIHBow6JuIHTDoW4gz4YgY2jGsGEgYmnhur90LCBjw7RuZyB0aOG7qWMgdMOtbmggQUlDIHbDoCBCSUMgdGjGsOG7nW5nIHRow6ptIDEgdsOgbyBz4buRIHRoYW0gc+G7kSAocOKAsisxKSDEkeG7gyB0w61uaCDEkeG6v24gdmnhu4djIMaw4bubYyBsxrDhu6NuZyDPhiwgdsOgIMaw4bubYyBsxrDhu6NuZyBkZXZpYW5jZSB0cnVuZyBiw6xuaCB0aMaw4budbmcgxJHGsOG7o2MgUiBz4butIGThu6VuZyBjaG8gz4YuIA0KICAgDQogICAtIE3DtCBow6xuaCBjw7MgZ2nDoSB0cuG7iyBBSUMgaG/hurdjIEJJQyBuaOG7jyBoxqFuIChn4bqnbiAt4oieIGjGoW4pIMSRxrDhu6NjIGNvaSBsw6AgbcO0IGjDrG5oIMSRxrDhu6NjIMawYSBjaHXhu5luZyBoxqFuIHbDrCBuw7MgxJHhuqF0IMSRxrDhu6NjIHPhu7EgY8OibiBi4bqxbmcgdOG7kXQgaMahbiBnaeG7r2EgxJHhu5kga2jhu5twIGThu68gbGnhu4d1IHbDoCBz4buxIMSRxqFuIGdp4bqjbiBj4bunYSBtw7QgaMOsbmggKHTDrW5oIHRp4bq/dCBraeG7h20gLSBwYXJzaW1vbnkpLiBDw6FjIG5ndeG7k24gdMOgaSBsaeG7h3UgbWluaCBo4buNYSB2aeG7h2Mgc+G7rSBk4bulbmcgQUlDIHbDoCBCSUMgxJHhu4Mgc28gc8OhbmggY8OhYyBtw7QgaMOsbmgga2jDoWMgbmhhdSwgdsOtIGThu6UgbmjGsCB0cm9uZyBiw6BpIHRvw6FuIMaw4bubYyBsxrDhu6NuZyB0deG7lWkgYuG7iyBzw6J1IHLEg25nIChETUZUKSBob+G6t2MgY2jhu41uIHBow6JuIHBo4buRaSBwaMO5IGjhu6NwIGNobyBk4buvIGxp4buHdS4gDQoNCioqQ2jhuqluIMSRb8OhbiBNw7QgaMOsbmggKE1vZGVsIERpYWdub3N0aWNzKToqKiBTYXUga2hpIG3DtCBow6xuaCDEkcaw4bujYyB0cmFuZyBi4buLLCB2aeG7h2Mga2nhu4NtIHRyYSBjw6FjIGdp4bqjIMSR4buLbmggY+G7p2EgbcO0IGjDrG5oIGzDoCBy4bqldCBxdWFuIHRy4buNbmcuIE5ndeG7k24gdMOgaSBsaeG7h3UgbWluaCBo4buNYSBuaGnhu4F1IGxv4bqhaSBiaeG7g3UgxJHhu5MgY2jhuqluIMSRb8OhbiBjw7MgdGjhu4MgdOG6oW8gcmEgdHJvbmcgUjoNCiANCi0gQmnhu4N1IMSR4buTIHBo4bqnbiBkxrAgKFJlc2lkdWFscyk6IEJp4buDdSDEkeG7kyBwaOG6p24gZMawIGNodeG6qW4gaMOzYSAoc3RhbmRhcmRpemVkIHJlc2lkdWFscykgc28gduG7m2kgY8OhYyBnacOhIHRy4buLIGThu7EgxJFvw6FuIChmaXR0ZWQgdmFsdWVzKSBjw7MgdGjhu4MgZ2nDunAgcGjDoXQgaGnhu4duIGPDoWMgduG6pW4gxJHhu4EgbmjGsCBzYWkgc+G7kSBraMO0bmcgxJHhu5NuZyBuaOG6pXQgKGhldGVyb3NjZWRhc3RpY2l0eSkgaG/hurdjIGThuqFuZyBwaGkgdHV54bq/biB0w61uaCBraMO0bmcgxJHGsOG7o2MgbcO0IGjDrG5oIG7huq9tIGLhuq90LiANCg0KLSBCaeG7g3UgxJHhu5MgUS1RIChRdWFudGlsZS1RdWFudGlsZSBQbG90KTogQmnhu4N1IMSR4buTIG7DoHkgc28gc8OhbmggcGjDom4gcGjhu5FpIGPhu6dhIHBo4bqnbiBkxrAgKHbDrSBk4bulOiBwaOG6p24gZMawIGRldmlhbmNlIGhv4bq3YyBxdWFudGlsZSkgduG7m2kgcGjDom4gcGjhu5FpIGzDvSB0aHV54bq/dCAodGjGsOG7nW5nIGzDoCBwaMOibiBwaOG7kWkgQ2h14bqpbikgxJHhu4Mga2nhu4NtIHRyYSBnaeG6oyDEkeG7i25oIHbhu4EgcGjDom4gcGjhu5FpIHNhaSBz4buRIGhv4bq3YyBiaeG6v24gbmfhuqt1IG5oacOqbi4gTmd14buTbiB0w6BpIGxp4buHdSDEkeG7gSBj4bqtcCDEkeG6v24gcGjhuqduIGTGsCBxdWFudGlsZSBuZ+G6q3Ugbmhpw6puIChyYW5kb21pemVkIHF1YW50aWxlIHJlc2lkdWFscykgbmjGsCBt4buZdCBsb+G6oWkgcGjhuqduIGTGsCBo4buvdSDDrWNoIGNobyBHTE1zLg0KDQotIEJp4buDdSDEkeG7kyBDb29rJ3MgRGlzdGFuY2U6IEdpw7pwIHjDoWMgxJHhu4tuaCBjw6FjIMSRaeG7g20gZOG7ryBsaeG7h3UgY8OzIOG6o25oIGjGsOG7n25nIGzhu5tuIChpbmZsdWVudGlhbCBwb2ludHMpIMSR4bq/biBjw6FjIMaw4bubYyBsxrDhu6NuZyBo4buHIHPhu5EgY+G7p2EgbcO0IGjDrG5oLiANCg0KLSBCaeG7g3UgxJHhu5MgUGFydGlhbCAoQ29tcG9uZW50LXBsdXMtUmVzaWR1YWwgUGxvdHMpOiBDw7MgdGjhu4MgZ2nDunAgxJHDoW5oIGdpw6EgbeG7kWkgcXVhbiBo4buHIGdp4buvYSBiaeG6v24gcGjhuqNuIGjhu5NpIChzYXUga2hpIHTDrW5oIMSR4bq/biBjw6FjIGJp4bq/biBraMOhYykgdsOgIG3hu5l0IGJp4bq/biBnaeG6o2kgdGjDrWNoIGPhu6UgdGjhu4MsIGjhu5cgdHLhu6Mga2nhu4NtIHRyYSBk4bqhbmcgaMOgbSBj4bunYSBiaeG6v24gZ2nhuqNpIHRow61jaC4gQ8OhYyBsb+G6oWkgcGjhuqduIGTGsCBraMOhYyBuaGF1IChuaMawIHBo4bqnbiBkxrAgZGV2aWFuY2UsIHBo4bqnbiBkxrAgd29ya2luZywgcGjhuqduIGTGsCBxdWFudGlsZSkgY8OzIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIGNobyBjw6FjIG3hu6VjIMSRw61jaCBjaOG6qW4gxJFvw6FuIGtow6FjIG5oYXUgdHJvbmcgR0xNcy4gDQoNCioqU+G7rSBk4bulbmcgUjoqKiBSIGzDoCBt4buZdCBtw7RpIHRyxrDhu51uZyB2w6AgbmfDtG4gbmfhu68gxJHhu4MgdMOtbmggdG/DoW4gdGjhu5FuZyBrw6ogdsOgIGzDoCBjw7RuZyBj4bulIGNow61uaCDEkcaw4bujYyBz4butIGThu6VuZyB0cm9uZyBuZ3Xhu5NuIHTDoGkgbGnhu4d1IMSR4buDIGZpdCB2w6AgcGjDom4gdMOtY2ggR0xNcy4NCg0KLSBIw6BtIGdsbSgpIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHRyYW5nIGLhu4sgKGZpdCkgY8OhYyBtw7QgaMOsbmggR0xNIC4NCg0KLSBIw6BtIHN1bW1hcnkoKSBjdW5nIGPhuqVwIHTDs20gdOG6r3QgbcO0IGjDrG5oLCBiYW8gZ+G7k20gY8OhYyDGsOG7m2MgbMaw4bujbmcgaOG7hyBz4buRLCBzYWkgc+G7kSBjaHXhuqluLCB2w6AgcC12YWx1ZS4gDQoNCi0gSMOgbSBhbm92YSgpIMSRxrDhu6NjIGTDuW5nIMSR4buDIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oIGzhu5NuZyBuaGF1LiANCg0KIyMgKipDSMavxqBORyA4OiBDw6FjIG3DtCBow6xuaCB0dXnhur9uIHTDrW5oIHThu5VuZyBxdcOhdDogQ2jhuqluIMSRb8OhbioqDQoNCioqQ8OhYyBnaeG6oyDEkeG7i25oIGPhu6dhIEdMTXM6KiogR0xNcyBjw7MgaGFpIHRow6BuaCBwaOG6p24gY2jDrW5oOiB0aMOgbmggcGjhuqduIG5n4bqrdSBuaGnDqm4gdsOgIHRow6BuaCBwaOG6p24gaOG7hyB0aOG7kW5nLiANCg0KLSBUaMOgbmggcGjhuqduIG5n4bqrdSBuaGnDqm46IEPDoWMgcXVhbiBzw6F0IHlpIMSR4buZYyBs4bqtcCB2w6AgeHXhuqV0IHBow6F0IHThu6sgbeG7mXQgbcO0IGjDrG5oIHBow6JuIHTDoW4gbcWpIChlZG0pIHjDoWMgxJHhu4tuaCwgduG7m2kgJHlfaSBcc2ltIFx0ZXh0e0VETX1cbGVmdChcbXVfaSwgXGZyYWN7XHBoaX17d19pfVxyaWdodCkkLCB0cm9uZyDEkcOzIHdpIGzDoCBjw6FjIHRy4buNbmcgc+G7kSBj4buRIMSR4buLbmggxJHDoyBiaeG6v3QgdsOgIM+GIGzDoCB0aGFtIHPhu5EgcGjDom4gdMOhbiBjaMawYSBiaeG6v3QuDQoNCi0gVGjDoG5oIHBo4bqnbiBo4buHIHRo4buRbmc6IEPDsyBt4buZdCBow6BtIGxpw6puIGvhur90IGcowrcpIMSRxqFuIMSRaeG7h3UsIGto4bqjIHZpIMSRw6MgYmnhur90IHNhbyBjaG8gJGcoXG11X2kpID0gXGV0YV9pID0gb19pICsgXGJldGFfMCArIFxzdW1faiBcYmV0YV9qIHhfe2osaX0kLCB24bubaSAkzrdpJCBsw6AgYuG7mSBk4buxIGLDoW8gdHV54bq/biB0w61uaCB2w6Agb2kgbMOgIGPDoWMgb2Zmc2V0ICh0aMaw4budbmcgYuG6sW5nIDApLg0KDQogKipDw6FjIGxv4bqhaSBwaOG6p24gZMawIGNobyBHTE1zOioqIEPDoWMgcGjhuqduIGTGsCDEkcahbiB0aHXhuqduICRyX2kgPSB5X2kgLSBcaGF0e1xtdX1faSQga2jDtG5nIMSR4bunIHbDrCBwaMawxqFuZyBzYWkgY+G7p2EgY2jDum5nIGtow7RuZyBj4buRIMSR4buLbmguIEPhuqduIHPhu60gZOG7pW5nIGPDoWMgbG/huqFpIHBo4bqnbiBkxrAga2jDoWM6DQogDQotIFBo4bqnbiBkxrAgUGVhcnNvbiAoUGVhcnNvbiBSZXNpZHVhbHMpOiAkcl9QID0gXGZyYWN7eSAtIFxoYXR7XG11fX17XHNxcnR7VihcaGF0e1xtdX0pfX0kLiBDaMO6bmcgY8OzIHBow6JuIHBo4buRaSB44bqlcCB44buJIGNodeG6qW4uIA0KDQotIFBo4bqnbiBkxrAgRGV2aWFuY2UgKERldmlhbmNlIFJlc2lkdWFscyk6IA0KJCQNCnJEID0gXHRleHR7c2lnbn0oeSAtIFxoYXR7XG11fSkgXGNkb3QgXHNxcnR7MncgXGNkb3QgZCh5LCBcaGF0e1xtdX0pfQ0KJCQNCnRyb25nIMSRw7MgJGQoeSwgXGhhdHtcbXV9KSQgbMOgIGRldmlhbmNlIMSRxqFuIHbhu4suIA0KDQpQaOG6p24gZMawIGRldmlhbmNlIGPDsyBraOG6oyBuxINuZyBwaMOibiBwaOG7kWkgY2h14bqpbiBoxqFuIHBo4bqnbiBkxrAgUGVhcnNvbiB2w6AgY2jDrW5oIHjDoWMgbMOgIHBow6JuIHBo4buRaSBjaHXhuqluIGNobyBjw6FjIEdMTSBQaMOibiBwaOG7kWkgQ2h14bqpbiAoTm9ybWFsKSB2w6AgSW52ZXJzZSBHYXVzc2lhbi4NCg0KLSBQaOG6p24gZMawIFF1YW50aWxlIChRdWFudGlsZSBSZXNpZHVhbHMpOiByUSDEkcaw4bujYyDEkeG7i25oIG5naMSpYSBzYW8gY2hvIHjDoWMgc3XhuqV0IHTDrWNoIGzFqXkgY+G7p2EgbsOzIHRyw6puIHBow6JuIHBo4buRaSBjaHXhuqluIHThuq9jIGLhurFuZyB24bubaSB4w6FjIHN14bqldCB0w61jaCBsxal5IGPhu6dhIHF1YW4gc8OhdCB5IHRyw6puIGVkbSDEkcOjIGZpdHRlZC4gQ2jDum5nIGPDsyBwaMOibiBwaOG7kWkgY2jDrW5oIHjDoWMgbMOgIGNodeG6qW4sIG5nb+G6oWkgdHLhu6sgYmnhur9uIMSR4buZbmcgdHJvbmcgxrDhu5tjIGzGsOG7o25nIM68IHbDoCDPhi4gxJDhu5FpIHbhu5tpIGPDoWMgZWRtIHLhu51pIHLhuqFjLCBj4bqnbiBjw7MgbeG7mXQgxJFp4buBdSBjaOG7iW5oIMSRxqFuIGdp4bqjbiBsacOqbiBxdWFuIMSR4bq/biB2aeG7h2Mgbmfhuqt1IG5oacOqbiBow7NhLCDEkcO0aSBraGkgxJHGsOG7o2MgZ+G7jWkgbMOgIHBo4bqnbiBkxrAgcXVhbnRpbGUgbmfhuqt1IG5oacOqbiBow7NhLiBQaOG6p24gZMawIFF1YW50aWxlIGtow7RuZyDEkcaw4bujYyDEkeG7i25oIG5naMSpYSBjaG8gY8OhYyBtw7QgaMOsbmggcXVhc2ktbGlrZWxpaG9vZCB2w6wgaMOgbSBwaMOibiBwaOG7kWkgdMOtY2ggbMWpeSAoY2RmKSBraMO0bmcgxJHGsOG7o2MgeMOhYyDEkeG7i25oLiBQaOG6p24gZMawIHF1YW50aWxlIHThu5F0IG5o4bqldCDEkeG7gyBz4butIGThu6VuZyB0cm9uZyBjw6FjIGJp4buDdSDEkeG7kyBwaOG6p24gZMawIMSR4buDIHTDrG0ga2nhur9tIHh1IGjGsOG7m25nIHbDoCBt4bqrdS4NCg0KKipMZXZlcmFnZXMgdHJvbmcgR0xNczoqKiBMZXZlcmFnZXMgKGhpKSBsw6AgY8OhYyBwaOG6p24gdOG7rSB0csOqbiDEkcaw4budbmcgY2jDqW8gY+G7p2EgbWEgdHLhuq1uIG3FqSBILiAgxJDhu5FpIHbhu5tpIEdMTXMsIA0KDQokJA0KSCA9IFdeezAuNX0gWCAoWF5UIFcgWCleey0xfSBYXlQgV157MS8yfQ0KJCQNCg0KVHJvbmcgxJHDsyBXIGzDoCBtYSB0cuG6rW4gxJHGsOG7nW5nIGNow6lvIGPhu6dhIGPDoWMgdHLhu41uZyBz4buRIGzDoG0gdmnhu4djICh3b3JraW5nIHdlaWdodHMpLiAgTGV2ZXJhZ2VzIHBo4bulIHRodeG7mWMgdsOgbyBnacOhIHRy4buLIGPhu6dhIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggdsOgIHRy4buNbmcgc+G7kSwga2jDtG5nIHBo4bulIHRodeG7mWMgdsOgbyBnacOhIHRy4buLIGPhu6dhIGJp4bq/biBwaOG6o24gaOG7k2kuIExldmVyYWdlIGNhbyAoaCA+IDNwJy9uKSBjaG8gdGjhuqV5IHF1YW4gc8OhdCDEkcOzIGPDsyBnacOhIHRy4buLIGNvdmFyaWF0ZSAoYmnhur9uIGdp4bqjaSB0aMOtY2gpIGPhu7FjIMSRb2FuIHbDoCDhuqNuaCBoxrDhu59uZyBt4bqhbmggxJHhur9uIGdpw6EgdHLhu4sgZml0dGVkIHTGsMahbmcg4bupbmcgJCjOt8yCaSkkLiBDw7MgdGjhu4MgdMOtbmggdG/DoW4gbGV2ZXJhZ2VzIHRyb25nIFIgYuG6sW5nIGjDoG0gaGF0dmFsdWVzKCkuDQoNCioqTGV2ZXJhZ2UgU3RhbmRhcmRpemVkIFJlc2lkdWFsczoqKiBQaOG6p24gZMawIGNodeG6qW4gaMOzYSAoTGV2ZXJhZ2UgU3RhbmRhcmRpemVkIFJlc2lkdWFscykgY8OzIHBoxrDGoW5nIHNhaSB44bqlcCB44buJIGjhurFuZyBz4buRNS4uLi4gQ2jDum5nIMSRxrDhu6NjIHTDrW5oIGLhurFuZyBjw6FjaCBjaGlhIHBo4bqnbiBkxrAgKFBlYXJzb24gaG/hurdjIGRldmlhbmNlKSBjaG8gxrDhu5tjIGzGsOG7o25nIMSR4buZIGzhu4djaCBjaHXhuqluIGPhu6dhIG7DsywgYmFvIGfhu5NtIHRoYW0gc+G7kSBwaMOibiB0w6FuIM+GIHbDoCBsZXZlcmFnZSBoLiBDw7RuZyB0aOG7qWMgY2hvIHBo4bqnbiBkxrAgUGVhcnNvbiBjaHXhuqluIGjDs2EgDQokJHJQJyA9IHJQIC8gc3FydCjPhigxLWgpKSQkDQpQaOG6p24gZMawIHF1YW50aWxlIMSRw6MgxJHGsOG7o2Mgw6FuaCB44bqhIHThu5tpIHBow6JuIHBo4buRaSBjaHXhuqluIHThuq9jLCBuw6puIHBoxrDGoW5nIHNhaSBj4bunYSBjaMO6bmcgZ+G6p24gYuG6sW5nIG3hu5l0LiBQaOG6p24gZMawIFN0dWRlbnRpemVkIGPFqW5nIGxpw6puIHF1YW4gdsOgIGjhu691IMOtY2ggxJHhu4MgeMOhYyDEkeG7i25oIMSRaeG7g20gbmdv4bqhaSBsYWkuDQoNCioqS2hpIG7DoG8gc+G7rSBk4bulbmcgbG/huqFpIHBo4bqnbiBkxrAgbsOgbzoqKiBQaOG6p24gZMawIHF1YW50aWxlLCBkZXZpYW5jZSB2w6AgUGVhcnNvbiDEkeG7gXUgY8OzIHBow6JuIHBo4buRaSBjaMOtbmggeMOhYyBsw6AgY2h14bqpbiBraGkgZOG7ryBsaeG7h3UgeHXhuqV0IHBow6F0IHThu6sgcGjDom4gcGjhu5FpIENodeG6qW4uIFBo4bqnbiBkxrAgZGV2aWFuY2UgY8WpbmcgY2jDrW5oIHjDoWMgbMOgIGNodeG6qW4gY2hvIEdMTXMgSW52ZXJzZSBHYXVzc2lhbi4gVHV5IG5oacOqbiwgduG7m2kgY8OhYyBlZG0gcuG7nWkgcuG6oWMsIHBo4bqnbiBkxrAgUGVhcnNvbiB2w6AgZGV2aWFuY2Uga2jDtG5nIMSR4bqjbSBi4bqjbyBn4bqnbiBjaHXhuqluIHRy4burIGtoaSDEkcOhcCDhu6luZyBjw6FjIMSRaeG7gXUga2nhu4duIG5o4bqldCDEkeG7i25oIHbhu4Ega8OtY2ggdGjGsOG7m2MgdHJ1bmcgYsOsbmguIFBo4bqnbiBkxrAgUXVhbnRpbGUgcuG6pXQgxJHGsOG7o2Mga2h1eeG6v24ga2jDrWNoIHPhu60gZOG7pW5nIGNobyBjw6FjIGVkbSBy4budaSBy4bqhYyB2w6AgdGjGsOG7nW5nIMSRxrDhu6NjIGTDuW5nIMSR4buDIGtp4buDbSB0cmEgY8OhYyBnaeG6oyDEkeG7i25oIG3DtCBow6xuaCB0cm9uZyBjw6FjIGJp4buDdSDEkeG7kyBwaOG6p24gZMawLiBOw6puIHPhu60gZOG7pW5nIHBo4bqnbiBkxrAgY2h14bqpbiBow7NhIGhv4bq3YyBTdHVkZW50aXplZCB2w6wgY2jDum5nIGPDsyBwaMawxqFuZyBzYWkgeOG6pXAgeOG7iSBo4bqxbmcgc+G7kS4NCg0KKipLaeG7g20gdHJhIGPDoWMgZ2nhuqMgxJHhu4tuaCBtw7QgaMOsbmg6KiogTeG7mXQgY2hp4bq/biBsxrDhu6NjIHBow6JuIHTDrWNoIGNo4bqpbiDEkW/DoW4gY2hvIEdMTXMgYmFvIGfhu5NtIGtp4buDbSB0cmEgY8OhYyBnaeG6oyDEkeG7i25oOiANCg0KLSDEkOG7mWMgbOG6rXA6IFbhur0gYmnhu4N1IMSR4buTIHBo4bqnbiBkxrAgc28gduG7m2kgcGjhuqduIGTGsCBi4buLIHRy4buFIChsYWdnZWQgcmVzaWR1YWxzKSDEkeG7gyBraeG7g20gdHJhIHTDrW5oIMSR4buZYyBs4bqtcCBj4bunYSBjw6FjIHF1YW4gc8OhdCB0aGVvIHRo4budaSBnaWFuLg0KDQotIFRow6BuaCBwaOG6p24gaOG7hyB0aOG7kW5nICh0w61uaCB0dXnhur9uIHTDrW5oKTogU+G7rSBk4bulbmcgY8OhYyBiaeG7g3UgxJHhu5MgcGjhuqduIGTGsCAoZGV2aWFuY2UgaG/hurdjIHF1YW50aWxlKSBzbyB24bubaSBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIGhv4bq3YyBnacOhIHRy4buLIGZpdHRlZCAozrzMgikuIE3hu6VjIHRpw6p1IGzDoCB0aOG6pXkgY8OhYyDEkWnhu4NtIHBow6JuIHTDoW4gbmfhuqt1IG5oacOqbiBraMO0bmcgY8OzIG3huqt1IGhv4bq3YyB4dSBoxrDhu5tuZyByw7UgcsOgbmcuDQoJDQotIFRow6BuaCBwaOG6p24gbmfhuqt1IG5oacOqbiAocGjGsMahbmcgc2FpIHbDoCBwaMOibiBwaOG7kWkpOiBT4butIGThu6VuZyBjw6FjIGJp4buDdSDEkeG7kyBwaOG6p24gZMawIHNvIHbhu5tpIGdpw6EgdHLhu4sgZml0dGVkICjOvMyCKSDEkeG7gyBraeG7g20gdHJhIHBoxrDGoW5nIHNhaSBo4bqxbmcgc+G7kSAobW9uZyBtdeG7kW4ga2jDtG5nIHRo4bqleSBt4bqrdSkuIFPhu60gZOG7pW5nIGJp4buDdSDEkeG7kyBRLVEgKFF1YW50aWxlLVF1YW50aWxlKSBj4bunYSBwaOG6p24gZMawIChxdWFudGlsZSwgZGV2aWFuY2UgY2h14bqpbiBow7NhLCBob+G6t2MgU3R1ZGVudGl6ZWQpIMSR4buDIGtp4buDbSB0cmEgZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgKHTDrW5oIGNodeG6qW4pMTkuIFRyw6puIGJp4buDdSDEkeG7kyBRLVEgY2h14bqpbiwgY8OhYyDEkWnhu4NtIG7Dqm4gbuG6sW0gZ+G6p24gxJHGsOG7nW5nIHRo4bqzbmcgeT14LiBDw6FjIG3huqt1IGtow6FjIG5oYXUgdHLDqm4gYmnhu4N1IMSR4buTIFEtUSBjw7MgdGjhu4MgZ+G7o2kgw70gduG7gSDEkeG7mSB4acOqbiwgxJF1w7RpIG7hurduZy9uaOG6uSBob+G6t2MgcGjDom4gcGjhu5FpIGhhaSDEkeG7iW5oLg0KDQoqKkPDoWMgxJFp4buDbSBuZ2/huqFpIGxhaSB2w6AgY8OhYyBxdWFuIHPDoXQgY8OzIOG6o25oIGjGsOG7n25nOioqDQoNCi0gxJBp4buDbSBuZ2/huqFpIGxhaSAoT3V0bGllcnMpOiBDw6FjIHF1YW4gc8OhdCBjw7MgcGjhuqduIGTGsCBi4bqldCB0aMaw4budbmcgbOG7m24gKGTGsMahbmcgaG/hurdjIMOibSkuIEJp4buDdSDEkeG7kyBRLVEgdGjGsOG7nW5nIHRp4buHbiBs4bujaSDEkeG7gyB4w6FjIMSR4buLbmggY2jDum5nLiBQaOG6p24gZMawIGRldmlhbmNlIGNodeG6qW4gaMOzYSBob+G6t2MgcGjhuqduIGTGsCBxdWFudGlsZSB0aMaw4budbmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcuDQoJDQotIEPDoWMgcXVhbiBzw6F0IGPDsyDhuqNuaCBoxrDhu59uZyAoSW5mbHVlbnRpYWwgT2JzZXJ2YXRpb25zKTogTmjhu69uZyBxdWFuIHPDoXQg4bqjbmggaMaw4bufbmcgbeG6oW5oIMSR4bq/biBjw6FjIMaw4bubYyBsxrDhu6NuZyB0cm9uZyBtw7QgaMOsbmggZml0dGVkLiBDw6FjIHRo4buRbmcga8OqIG5oxrAgQ29vaydzIGRpc3RhbmNlLCBkZmJldGFzLCBkZmZpdHMsIHbDoCBjb3ZhcmlhbmNlIHJhdGlvIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHjDoWMgxJHhu4tuaCBjw6FjIHF1YW4gc8OhdCBjw7Mg4bqjbmggaMaw4bufbmcuICBDb29rJ3MgZGlzdGFuY2Uga+G6v3QgaOG7o3Aga8OtY2ggdGjGsOG7m2MgY+G7p2EgcGjhuqduIGTGsCAoxJFvIGLhurFuZyBwaOG6p24gZMawIFBlYXJzb24gY2h14bqpbiBow7NhKSB2w6AgbGV2ZXJhZ2UuIEPDoWMgdGnDqnUgY2jDrSDEkeG7gyDEkcOhbmggZOG6pXUgY8OhYyDEkWnhu4NtIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOjIMSRxrDhu6NjIHRo4bqjbyBsdeG6rW4gY2hvIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIHbDoCDDoXAgZOG7pW5nIHTGsMahbmcgdOG7sSBjaG8gR0xNcy4gSMOgbSBpbmZsdWVuY2UubWVhc3VyZXMoKSB0cm9uZyBSIHTDrW5oIHRvw6FuIGPDoWMgdGjhu5FuZyBrw6ogbsOgeSB2w6AgxJHDoW5oIGThuqV1IGPDoWMgxJFp4buDbSBjw7Mg4bqjbmggaMaw4bufbmcuIE3hu5l0IHF1YW4gc8OhdCBjw7MgdGjhu4MgY8OzIGxldmVyYWdlIGNhbyBuaMawbmcga2jDtG5nIOG6o25oIGjGsOG7n25nIG7hur91IHBo4bqnbiBkxrAgbmjhu48sIHbDoCBuZ8aw4bujYyBs4bqhaS4NCgkgDQoqKkto4bqvYyBwaOG7pWMgc+G7sSBj4buRIChSZW1lZGllcyk6KiogdGjhuqNvIGx14bqtbiB24buBIHZp4buHYyBraOG6r2MgcGjhu6VjIGPDoWMgduG6pW4gxJHhu4EgxJHGsOG7o2MgeMOhYyDEkeG7i25oLiBO4bq/dSBwaOG6p24gZMawIGNobyB0aOG6pXkgc+G7sSBwaOG7pSB0aHXhu5ljIGzhuqtuIG5oYXUsIGPhuqduIHPhu60gZOG7pW5nIGPDoWMgcGjGsMahbmcgcGjDoXAga2jDoWMuIEPDoWMgduG6pW4gxJHhu4EgbGnDqm4gcXVhbiDEkeG6v24gdGjDoG5oIHBo4bqnbiBo4buHIHRo4buRbmcgKGtow7RuZyB0dXnhur9uIHTDrW5oKSBjw7MgdGjhu4MgxJHGsOG7o2MgZ2nhuqNpIHF1eeG6v3QgYuG6sW5nIGPDoWNoIHRow6ptIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2gsIGPDoWMgaOG6oW5nIHThu60gYuG6rWMgY2FvIChwb2x5bm9taWFsKSBob+G6t2Mgc3BsaW5lcy4gQ8OhYyB24bqlbiDEkeG7gSB24buBIHRow6BuaCBwaOG6p24gbmfhuqt1IG5oacOqbiAobmjGsCBvdmVyZGlzcGVyc2lvbiBob+G6t2MgcGjGsMahbmcgc2FpIGtow7RuZyBo4bqxbmcgc+G7kSkgY8OzIHRo4buDIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IGLhurFuZyBjw6FjaCBz4butIGThu6VuZyBtw7QgaMOsbmggcXVhc2ktbGlrZWxpaG9vZCBob+G6t2MgY8OhYyBwaMOibiBwaOG7kWkga2jDoWMgdHJvbmcgaOG7jSBlZG0gbmjGsCBOZWdhdGl2ZSBCaW5vbWlhbCBob+G6t2MgVHdlZWRpZSwgbuG6v3UgcGjDuSBo4bujcCB24bubaSBj4bqldSB0csO6YyBwaMawxqFuZyBzYWkuDQoNCioqUXVhc2ktTGlrZWxpaG9vZCB2w6AgRXh0ZW5kZWQgUXVhc2ktTGlrZWxpaG9vZDoqKiDEkMaw4bujYyBz4butIGThu6VuZyBraGkgbeG7kWkgcXVhbiBo4buHIHRydW5nIGLDrG5oLXBoxrDGoW5nIHNhaSBj4bunYSBk4buvIGxp4buHdSBn4bujaSDDvSBt4buZdCBwaMOibiBwaOG7kWkga2jDtG5nIHRodeG7mWMgaOG7jSBlZG0uIEjDoG0gcXVhc2ktbGlrZWxpaG9vZCBRIGhv4bqhdCDEkeG7mW5nIGdp4buRbmcgbmjGsCBow6BtIGxvZy1saWtlbGlob29kIG5oxrBuZyBraMO0bmcgdMawxqFuZyDhu6luZyB24bubaSBi4bqldCBr4buzIGjDoG0gbeG6rXQgxJHhu5kgeMOhYyBzdeG6pXQgbsOgby4gQ8OhYyBtw7QgaMOsbmggcXVhc2ktbGlrZWxpaG9vZCBwaOG7lSBiaeG6v24gbmjhuqV0IGzDoCBjaG8gZOG7ryBsaeG7h3UgxJHhur9tIGhv4bq3YyB04bu3IGzhu4cgYuG7iyBvdmVyZGlzcGVyc2lvbiAocGjGsMahbmcgc2FpIGzhu5tuIGjGoW4gbeG7qWMga+G7syB24buNbmcgdGhlbyBwaMOibiBwaOG7kWkgUG9pc3NvbiBob+G6t2MgQmlub21pYWwgY2h14bqpbikuIEPDoWMgbcO0IGjDrG5oIG7DoHkgKHF1YXNpLVBvaXNzb24sIHF1YXNpLWJpbm9taWFsKSDGsOG7m2MgbMaw4bujbmcgbeG7mXQgdGhhbSBz4buRIHBow6JuIHTDoW4gz4YgPiAxLiBDw6FjIG3DtCBow6xuaCBxdWFzaSBraMO0bmcgdGjhu4MgdMOtbmggdG/DoW4gQUlDIGhv4bq3YyBwaOG6p24gZMawIHF1YW50aWxlICh2w6wga2jDtG5nIGPDsyBjZGYpLiBTdXkgbHXhuq1uIGNobyBjw6FjIG3DtCBow6xuaCBuw6B5IHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIFdhbGQgKHN1bW1hcnkoKSksIGtp4buDbSDEkeG7i25oIFNjb3JlIChnbG0uc2NvcmV0ZXN0KCkpIHbDoCBraeG7g20gxJHhu4tuaCB04bu3IHPhu5EgcXVhc2ktbGlrZWxpaG9vZCAodMawxqFuZyDEkcawxqFuZyB24bubaSBBTk9WQSBjaG8gR0xNcyksIHRyb25nIMSRw7Mgc+G7rSBk4bulbmcga2nhu4NtIMSR4buLbmggRiB2w6wgz4YgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nLiBFeHRlbmRlZCBxdWFzaS1saWtlbGlob29kIFErIGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyDGsOG7m2MgbMaw4bujbmcgz4YgaG/hurdjIG3DtCBow6xuaCBow7NhIGPhuqV1IHRyw7pjIHBoxrDGoW5nIHNhaS4NCg0KKirEkGEgY+G7mW5nIHR1eeG6v24gKENvbGxpbmVhcml0eSk6KiogWOG6o3kgcmEga2hpIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggY8OzIHTGsMahbmcgcXVhbiBjYW8gLiDEkGnhu4F1IG7DoHkgY8OzIHRo4buDIGzDoG0gY2hvIGPDoWMgxrDhu5tjIGzGsOG7o25nIGjhu4cgc+G7kSBraMO0bmcg4buVbiDEkeG7i25oIHbDoCBzYWkgc+G7kSBjaHXhuqluIGzhu5tuIC4NCg0KKipT4butIGThu6VuZyBSOioqIEPDsyB0aOG7gyB0aOG7sWMgaGnhu4duIHBow6JuIHTDrWNoIGNo4bqpbiDEkW/DoW4gR0xNIHRyb25nIFIuDQoNCi0gU+G7rSBk4bulbmcgc3VtbWFyeSgpIMSR4buDIHhlbSBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBXYWxkLg0KDQotIFPhu60gZOG7pW5nIGFub3ZhKCkgxJHhu4Mgc28gc8OhbmggY8OhYyBtw7QgaMOsbmggbOG7k25nIG5oYXU7IGTDuW5nIHRlc3Q9IkYiIGNobyBtw7QgaMOsbmggcXVhc2kgdsOgIHRlc3Q9IkNoaXNxIiBjaG8gbcO0IGjDrG5oIEJpbm9taWFsL1BvaXNzb24vR2FtbWEvSW52ZXJzZSBHYXVzc2lhbiBjaHXhuqluLg0KLSBT4butIGThu6VuZyBoYXR2YWx1ZXMoKSDEkeG7gyB0w61uaCBsZXZlcmFnZXMuDQoNCi0gU+G7rSBk4bulbmcgY29va3MuZGlzdGFuY2UoKSwgZGZmaXRzKCksIGRmYmV0YXMoKSwgY292cmF0aW8oKSwgaW5mbHVlbmNlLm1lYXN1cmVzKCkgxJHhu4MgdMOtbmggdsOgIHjDoWMgxJHhu4tuaCBjw6FjIHF1YW4gc8OhdCBjw7Mg4bqjbmggaMaw4bufbmcuDQoNCi0gU+G7rSBk4bulbmcgcnN0YW5kYXJkKCkgxJHhu4MgdMOtbmggcGjhuqduIGTGsCBjaHXhuqluIGjDs2EuDQoNCi0gU+G7rSBk4bulbmcgcXJlc2lkKCkgdOG7qyBwYWNrYWdlIHN0YXRtb2QgxJHhu4MgdMOtbmggcGjhuqduIGTGsCBxdWFudGlsZSAoY2hvIGPDoWMgZWRtIGPDsyBjZGYpLg0KDQotIFPhu60gZOG7pW5nIGPDoWMgaMOgbSB24bq9IGJp4buDdSDEkeG7kyBjaHXhuqluIG5oxrAgcGxvdCgpLCBxcW5vcm0oKSwgcXFsaW5lKCkgxJHhu4MgdOG6oW8gY8OhYyBiaeG7g3UgxJHhu5MgY2jhuqluIMSRb8Ohbi4NCg0KLSBDw6FjIG3DtCBow6xuaCBxdWFzaSDEkcaw4bujYyBjaOG7iSDEkeG7i25oIHRyb25nIGdsbSgpIGLhurFuZyBjw6FjaCBz4butIGThu6VuZyBmYW1pbHk9cXVhc2liaW5vbWlhbCgpLCBmYW1pbHk9cXVhc2lwb2lzc29uKCksIGhv4bq3YyBmYW1pbHk9cXVhc2koKSB24bubaSDEkeG7kWkgc+G7kSBsaW5rIHbDoCB2YXJpYW5jZSBwaMO5IGjhu6NwLiANCg0KIyMgKipDSMavxqBORyA5OiBNw7QgaMOsbmggY2hvIHThu7cgbOG7hzogQmlub21pYWwgR0xNcyoqDQoNCioqTcO0IGjDrG5oIGjDs2EgdOG7tyBs4buHOioqIEThu68gbGnhu4d1IHThu7cgbOG7hyB0aMaw4budbmcgbMOgIHPhu5EgInRow6BuaCBjw7RuZyIgKHkpIHRyb25nIHThu5VuZyBz4buRIHRo4butIG5naGnhu4dtIGPhu5EgxJHhu4tuaCAobSkuIFRyb25nIFIsIGJp4bq/biBwaOG6o24gaOG7k2kgY8OzIHRo4buDIMSRxrDhu6NjIGNo4buJIMSR4buLbmggbMOgIHkvbSB24bubaSB3ZWlnaHRzPW0gaG/hurdjIGNiaW5kKHN1Y2Nlc3MsIGZhaWwpLiDEkOG7kWkgduG7m2kgZOG7ryBsaeG7h3Ugbmjhu4sgcGjDom4gKG09MSksIGPDsyB0aOG7gyBz4butIGThu6VuZyB2ZWN0b3Igc+G7kSAwLzEsIGZhY3RvciwgaG/hurdjIGxvZ2ljYWxzLiANCg0KKipIw6BtIGxpw6puIGvhur90OioqDQoNCi0gS+G6v3QgbuG7kWkgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCAozrwpIHbhu5tpIGLhu5kgZOG7sSBiw6FvIHR1eeG6v24gdMOtbmggKM63KS4NCg0KLSBDw6FjIGjDoG0gcGjhu5UgYmnhur9uIGNobyBwaMOibiBwaOG7kWkgQmlub21pYWwgYmFvIGfhu5NtIExvZ2l0IChsacOqbiBr4bq/dCBjaMOtbmggdOG6r2MpLCBQcm9iaXQsIHbDoCBDb21wbGVtZW50YXJ5IGxvZy1sb2cgKGNsb2dsb2cpLg0KDQotIFThu7cgbOG7hyBPZGRzIHbDoCBMb2dpdCBMaW5rOiBIw6BtIGxvZ2l0ICRcbG9nXGxlZnQoXGZyYWN7XG11fXsxIC0gXG11fVxyaWdodCkkIG3DtCBow6xuaCBow7NhIGxvZ2FyaXQgY+G7p2Egb2RkczEuIEjhu4cgc+G7kSBo4buTaSBxdXkgKM6yMSkgY2hvIG3hu5l0IGJp4bq/biB4IGJp4buDdSB0aOG7iyBt4bupYyB0xINuZyBsb2ctb2RkcyBraGkgeCB0xINuZyBt4buZdCDEkcahbiB24buLLiBU4bu3IGzhu4cgb2RkcyAob2RkcyByYXRpbykga2hpIHggdMSDbmcgbeG7mXQgxJHGoW4gduG7iyBsw6AgZXhwKM6yMSkuIA0KDQoqKk92ZXJkaXNwZXJzaW9uOioqIFjhuqN5IHJhIGtoaSBwaMawxqFuZyBzYWkgdGjhu7FjIHThur8gY+G7p2EgZOG7ryBsaeG7h3UgbOG7m24gaMahbiBwaMawxqFuZyBzYWkga+G7syB24buNbmcgdGhlbyBwaMOibiBwaOG7kWkgQmlub21pYWwgdGnDqnUgY2h14bqpbiAobc68KDHiiJLOvCkpLiBPdmVyZGlzcGVyc2lvbiBsw6BtIGNobyBzYWkgc+G7kSBjaHXhuqluIMaw4bubYyBsxrDhu6NuZyBi4buLIHRo4bqlcCBoxqFuLCBraG/huqNuZyB0aW4gY+G6rXkgaOG6uXAgaMahbi4gS2hpIGPDsyBvdmVyZGlzcGVyc2lvbiwgbsOqbiBz4butIGThu6VuZyBtw7QgaMOsbmggcXVhc2ktYmlub21pYWwgKGZhbWlseT1xdWFzaWJpbm9taWFsKCkpIHRyb25nIFIsIG3DtCBow6xuaCBuw6B5IMaw4bubYyBsxrDhu6NuZyB0aGFtIHPhu5EgcGjDom4gdMOhbiDPhiA+IDEuIA0KDQoqKktoaSBXYWxkIFRlc3RzIHRo4bqldCBi4bqhaToqKiBLaeG7g20gxJHhu4tuaCBXYWxkIChk4buxYSB0csOqbiAkdFx0ZXh0ey1zdGF0aXN0aWN9ID0gXGZyYWN7XGhhdHtcYmV0YX1fan17XG1hdGhybXtzZX0oXGhhdHtcYmV0YX1fail9JCBjw7MgdGjhu4Mga2jDtG5nIMSRw6FuZyB0aW4gY+G6rXksIMSR4bq3YyBiaeG7h3Qga2hpIGPDoWMgZ2nDoSB0cuG7iyBmaXR0ZWQgKM68zIIpIHLhuqV0IGfhuqduIDAgaG/hurdjIDEuIFRyb25nIGPDoWMgdHLGsOG7nW5nIGjhu6NwIG7DoHksIGtp4buDbSDEkeG7i25oIHThu7cgc+G7kSBraOG6oyBuxINuZyAoTGlrZWxpaG9vZCBSYXRpbyBUZXN0cyAtIExSVCkgaG/hurdjIGtp4buDbSDEkeG7i25oIFNjb3JlIHRoxrDhu51uZyDEkcOhbmcgdGluIGPhuq15IGjGoW4uDQoNCioqR29vZG5lc3Mtb2YtRml0IGNobyBiaW5hcnkgcmVzcG9uc2VzOioqIMSQ4buRaSB24bubaSBk4buvIGxp4buHdSBob8OgbiB0b8OgbiBuaOG7iyBwaMOibiAobeG7l2kgcXVhbiBzw6F0IGzDoCBt4buZdCB0aOG7rSBuZ2hp4buHbSBkdXkgbmjhuqV0KSwgY8OhYyB0aOG7kW5nIGvDqiBnb29kbmVzcy1vZi1maXQgdGnDqnUgY2h14bqpbiAobmjGsCBkZXZpYW5jZSBob+G6t2MgUGVhcnNvbikga2jDtG5nIGN1bmcgY+G6pXAgdGjDtG5nIHRpbiBo4buvdSDDrWNoIHbhu4Egc+G7sSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaCAuxJDhu4MgxJHDoW5oIGdpw6EgbcO0IGjDrG5oLCBuw6puIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oIGzhu5NuZyBuaGF1IGLhurFuZyBMUlQgaG/hurdjIGtp4buDbSDEkeG7i25oIFNjb3JlLg0KDQoqKlPhu60gZOG7pW5nIFI6KioNCg0KLSBT4butIGThu6VuZyBow6BtIGdsbSgpIHbhu5tpIGZhbWlseT1iaW5vbWlhbCgpLg0KDQotIEPDsyB0aOG7gyBjaOG7iSDEkeG7i25oIGjDoG0gbGnDqm4ga+G6v3Qga2jDoWMgYuG6sW5nIMSR4buRaSBz4buRIGxpbmsgdHJvbmcgYmlub21pYWwuDQoNCi0gSMOgbSBzdW1tYXJ5KCkgY3VuZyBj4bqlcCBr4bq/dCBxdeG6oyDGsOG7m2MgbMaw4bujbmcgdGhhbSBz4buRIHbDoCBraeG7g20gxJHhu4tuaCBXYWxkLiANCg0KLSBIw6BtIGFub3ZhKCkgxJHGsOG7o2MgZMO5bmcgxJHhu4Mgc28gc8OhbmggbcO0IGjDrG5oIGzhu5NuZyBuaGF1LiBT4butIGThu6VuZyB0ZXN0PSJDaGlzcSIgY2hvIEJpbm9taWFsIHRpw6p1IGNodeG6qW4gdsOgIHRlc3Q9IkYiIGNobyBxdWFzaS1iaW5vbWlhbCAoa2hpIM+GIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZykuIA0KDQotIEjDoG0gZG9zZS5wKCkgdHJvbmcgcGFja2FnZSBNQVNTIGPDsyB0aOG7gyDGsOG7m2MgbMaw4bujbmcgRUQ1MCAobGnhu4F1IGfDonkgcmEgcGjhuqNuIOG7qW5nIOG7nyA1MCUgxJHhu5FpIHTGsOG7o25nKS4gDQoNCiMjICoqQ0jGr8agTkcgMTA6IE3DtCBow6xuaCBjaG8gc+G7kSBsxrDhu6NuZzogUG9pc3NvbiB2w6AgTmVnYXRpdmUgQmlub21pYWwgR0xNcyoqDQoNCioqUG9pc3NvbiBHTE1zOioqDQoNCi0gUGjDom4gcGjhu5FpIFBvaXNzb24gbMOgIGzhu7FhIGNo4buNbiBt4bq3YyDEkeG7i25oIGNobyBk4buvIGxp4buHdSDEkeG6v20uIEjDoG0gcGjGsMahbmcgc2FpIGPhu6dhIG7DsyBsw6AgVijOvCkgPSDOvCAoa+G7syB24buNbmcgYuG6sW5nIHBoxrDGoW5nIHNhaSkuDQoNCi0gSMOgbSBsacOqbiBr4bq/dCBjaMOtbmggdOG6r2MgbMOgIGxvZ2FyaXQgKGxvZyksIMSR4bqjbSBi4bqjbyBnacOhIHRy4buLIGZpdHRlZCAkzrzMgiAkbHXDtG4gZMawxqFuZy4gTcO0IGjDrG5oIGPDsyBk4bqhbmcgbG9nIM68ID0gzrcsIHRyb25nIMSRw7MgzrcgbMOgIGLhu5kgZOG7sSBiw6FvIHR1eeG6v24gdMOtbmguDQoNCi0gS2hpIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggxJHhu4F1IGzDoCDEkeG7i25oIHTDrW5oLCBtw7QgaMOsbmggUG9pc3NvbiBHTE0gxJHGsOG7o2MgZ+G7jWkgbMOgIG3DtCBow6xuaCBsb2ctbGluZWFyLg0KDQotIMSQ4buRaSB24bubaSBQb2lzc29uIEdMTXMsIG7Dqm4gc+G7rSBk4bulbmcgcGjhuqduIGTGsCBxdWFudGlsZS4NCg0KKipNw7QgaMOsbmggaMOzYSB04bu3IGzhu4cgKFJhdGVzKToqKiBQb2lzc29uIEdMTXMgY8OzIHRo4buDIG3DtCBow6xuaCBow7NhIHThu7cgbOG7hyBi4bqxbmcgY8OhY2ggxJHGsGEgYmnhu4duIHBow6FwIHBoxqFpIG5oaeG7hW0gKGV4cG9zdXJlKSB2w6BvIG3DtCBow6xuaCBuaMawIG3hu5l0IHBo4bqnbiBiw7kgKG9mZnNldCkgdHJvbmcgYuG7mSBk4buxIGLDoW8gdHV54bq/biB0w61uaDYuIEThuqFuZyBtw7QgaMOsbmggbMOgICRcbG9nXGxlZnQoXGZyYWN7XG11fXtUfVxyaWdodCkgPSBcZXRhJCwgdMawxqFuZyDEkcawxqFuZyB24bubaSAkXGxvZyhcbXUpID0gXGxvZyBUICsgXGV0YSQsIHRyb25nIMSRw7MgbG9nIFQgbMOgIG9mZnNldC4gT2Zmc2V0IGzDoCB0aMOgbmggcGjhuqduIMSRw6MgYmnhur90IHbDoCBraMO0bmcgY+G6p24gxrDhu5tjIGzGsOG7o25nLg0KDQoqKkLhuqNuZyB0xrDGoW5nIHTDoWM6IExvZy1MaW5lYXIgTW9kZWxzOioqDQoNCi0gS2hpIGThu68gbGnhu4d1IMSR4bq/bSDEkcaw4bujYyB0w7NtIHThuq90IHRyb25nIGLhuqNuZyB0xrDGoW5nIHTDoWMgduG7m2kgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCwgUG9pc3NvbiBHTE0gdHLhu58gdGjDoG5oIG3DtCBow6xuaCBsb2ctbGluZWFyLg0KDQotIE5nxrDhu6NjIGzhuqFpLCBraGkgbcO0IGjDrG5oIFBvaXNzb24gbG9nLWxpbmVhciBiYW8gZ+G7k20gdGh14bqtdCBuZ+G7ryBo4bqxbmcgc+G7kSwgbsOzIGPDsyB0aOG7gyB0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIG3DtCBow6xuaCBtdWx0aW5vbWlhbCBraGkgY8OzIMSRaeG7gXUga2nhu4duIHRyw6puIHThu5VuZyBs4bubbi4NCg0KLSAiTmdo4buLY2ggbMO9IFNpbXBzb24iIMSRxrDhu6NjIGxp4buHdCBrw6ogdHJvbmcgbeG7pWMgbsOgeSB0cm9uZyBuZ3Xhu5NuNCwgbmjGsG5nIGtow7RuZyBjw7MgdGjDtG5nIHRpbiBjaGkgdGnhur90IG7DoG8gxJHGsOG7o2MgY3VuZyBj4bqlcCB24buBIG7Dsy4NCg0KKipT4buxIHTGsMahbmcgxJHGsMahbmcgZ2nhu69hIEJpbm9taWFsIHbDoCBQb2lzc29uIEdMTXM6KiogVHJvbmcgY8OhYyB0csaw4budbmcgaOG7o3AgY+G7pSB0aOG7gyAodsOtIGThu6U6IGThu68gbGnhu4d1IHThu7cgbOG7hyB04burIGLhuqNuZyB0xrDGoW5nIHTDoWMga2hpIHThu5VuZyBz4buRIHRo4butIG5naGnhu4dtIGzhu5tuIHbDoCB04bu3IGzhu4cgdGjDoG5oIGPDtG5nIG5o4buPKSwgcGjDom4gcGjhu5FpIEJpbm9taWFsIHjhuqVwIHjhu4kgcGjDom4gcGjhu5FpIFBvaXNzb24uIMSQaeG7gXUgbsOgeSBk4bqrbiDEkeG6v24gc+G7sSB0xrDGoW5nIMSRxrDGoW5nIGdp4buvYSBCaW5vbWlhbCBHTE0gKHbhu5tpIGxpw6puIGvhur90IGxvZ2l0KSB2w6AgUG9pc3NvbiBHTE0gKGxvZy1saW5lYXIpIHRyb25nIG5o4buvbmcgxJFp4buBdSBraeG7h24gbsOgeS4NCg0KKipOZWdhdGl2ZSBCaW5vbWlhbCBHTE1zOioqDQoNCi0gxJDGsOG7o2Mgc+G7rSBk4bulbmcga2hpIGThu68gbGnhu4d1IMSR4bq/bSBjw7MgaGnhu4duIHTGsOG7o25nIHBow6JuIHTDoW4gcXXDoSBt4bupYyAob3ZlcmRpc3BlcnNpb24pLCB04bupYyBsw6AgcGjGsMahbmcgc2FpIGzhu5tuIGjGoW4gZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaC4NCg0KLSBNw7QgaMOsbmggTmVnYXRpdmUgQmlub21pYWwgY8OzIGjDoG0gcGjGsMahbmcgc2FpIGThuqFuZyBi4bqtYyBoYWkgJFYoXG11KSA9IFxtdSArIFxmcmFje1xtdV4yfXtrfSQsIGNobyBwaMOpcCBwaMawxqFuZyBzYWkgdMSDbmcgbmhhbmggaMahbiB0cnVuZyBiw6xuaCBzbyB24bubaSBQb2lzc29uICRWKFxtdSkgPSBcbXUpJC4NCg0KLSBNw7QgaMOsbmggbsOgeSDGsOG7m2MgbMaw4bujbmcgdGjDqm0gbeG7mXQgdGhhbSBz4buRIHBo4bulIChrKSBuZ2/DoGkgY8OhYyBo4buHIHPhu5EgaOG7k2kgcXV5LiBIw6BtIGxpw6puIGvhur90IG3hurdjIMSR4buLbmggbMOgIGxvZ2FyaXQuIE7Dqm4gc+G7rSBk4bulbmcgcGjhuqduIGTGsCBxdWFudGlsZSBjaG8gbcO0IGjDrG5oIG7DoHkuDQoNCioqU+G7rSBk4bulbmcgUjoqKg0KDQotIFBvaXNzb24gR0xNczogZ2xtKC4uLiwgZmFtaWx5PXBvaXNzb24oKSkgduG7m2kgbGnDqm4ga+G6v3QgbeG6t2MgxJHhu4tuaCAibG9nIi4NCg0KLSBOZWdhdGl2ZSBCaW5vbWlhbCBHTE1zOiBT4butIGThu6VuZyBnbG0ubmIoKSB04burIHBhY2thZ2UgTUFTUy4NCg0KLSBRdWFzaS1Qb2lzc29uIG1vZGVsczogU+G7rSBk4bulbmcgZ2xtKC4uLiwgZmFtaWx5PXF1YXNpcG9pc3NvbigpKSDEkeG7gyB44butIGzDvSBvdmVyZGlzcGVyc2lvbiBtw6Aga2jDtG5nIGPhuqduIG3DtCBow6xuaCBwaMOibiBwaOG7kWkgxJHhuqd5IMSR4bunLg0KDQotIE9mZnNldDogQ2jhu4kgxJHhu4tuaCBi4bqxbmcgb2Zmc2V0KGxvZyhFeHBvc3VyZSkpIHRyb25nIGPDtG5nIHRo4bupYyBtw7QgaMOsbmguDQoNCi0gU+G7rSBk4bulbmcgc3VtbWFyeSgpIMSR4buDIHhlbSBr4bq/dCBxdeG6oyDGsOG7m2MgbMaw4bujbmcgdsOgIGtp4buDbSDEkeG7i25oIFdhbGQuDQoNCi0gU+G7rSBk4bulbmcgYW5vdmEoKSDEkeG7gyBzbyBzw6FuaCBtw7QgaMOsbmggbOG7k25nIG5oYXUsIHbhu5tpIHRlc3Q9IkNoaXNxIiBjaG8gUG9pc3NvbiAoz4Y9MSkgdsOgIHRlc3Q9IkYiIGNobyBjw6FjIG3DtCBow6xuaCBjw7Mgz4YgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nLg0KDQotIEPDoWMgcGxvdCBjaOG6qW4gxJFvw6FuIG5oxrAgcGjhuqduIGTGsCBzbyB24bubaSBnacOhIHRy4buLIGZpdHRlZCwgQ29vaydzIGRpc3RhbmNlIHbDoCBRLVEgcGxvdCBwaOG6p24gZMawIHLhuqV0IHF1YW4gdHLhu41uZyDEkeG7gyBraeG7g20gdHJhIGdp4bqjIMSR4buLbmggbcO0IGjDrG5oLiAgUGjhuqduIGTGsCBxdWFudGlsZSDEkcaw4bujYyBraHV54bq/biBuZ2jhu4sgY2hvIGPDoWMgbcO0IGjDrG5oIHBow6JuIHBo4buRaSDEkeG6p3kgxJHhu6cgKFBvaXNzb24sIE5lZ2F0aXZlIEJpbm9taWFsKS4NCg0KLSBUacOqdSBjaMOtIEFJQyBjw7MgdGjhu4MgxJHGsOG7o2MgZMO5bmcgxJHhu4Mgc28gc8OhbmggY8OhYyBtw7QgaMOsbmggY8OzIHBow6JuIHBo4buRaSDEkeG6p3kgxJHhu6cuIEFJQyBraMO0bmcgxJHGsOG7o2MgxJHhu4tuaCBuZ2jEqWEgY2hvIHF1YXNpLUdMTXMuDQoNCiMjICoqQ0jGr8agTkcgMTE6IEThu68gbGnhu4d1IGxpw6puIHThu6VjIGTGsMahbmc6IEdhbW1hIHbDoCBJbnZlcnNlIEdhdXNzaWFuIEdMTXMqKg0KDQoqKk3DtCBow6xuaCBow7NhIGThu68gbGnhu4d1IGxpw6puIHThu6VjIGTGsMahbmc6KioNCg0KLSBDw6FjIHBow6JuIHBo4buRaSBHYW1tYSB2w6AgSW52ZXJzZSBHYXVzc2lhbiDEkeG6t2MgYmnhu4d0IGjhu691IMOtY2ggY2hvIHZp4buHYyBtw7QgaMOsbmggaMOzYSAgZOG7ryBsaeG7h3UgbGnDqm4gdOG7pWMgZMawxqFuZy4NCg0KLSBDaMO6bmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcga2hpIGPDoWMgcGjGsMahbmcgcGjDoXAga2jDoWMsIG5oxrAgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIGNodeG6qW4gKG5vcm1hbCBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbHMpLCBraMO0bmcgxJHhu6cgcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdSBsacOqbiB04bulYyBkxrDGoW5nLg0KDQotIEPDoWMgRURNcyAoTcO0IGjDrG5oIFBow6JuIHTDoW4gSMOgbSBtxakpIGPDsyBow6BtIHBoxrDGoW5nIHNhaSBk4bqhbmcgJFYoXG11KSA9IFxtdV57XHhpfSQgduG7m2kgzr4g4omlIDIgcGjDuSBo4bujcCBjaG8gZOG7ryBsaeG7h3UgbGnDqm4gdOG7pWMgZMawxqFuZy4NCg0KLSBQaMOibiBwaOG7kWkgR2FtbWEgKM6+ID0gMikgdsOgIEludmVyc2UgR2F1c3NpYW4gKM6+ID0gMykgbMOgIGhhaSB0csaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdCBj4bunYSBo4buNIFR3ZWVkaWUgcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdSBsacOqbiB04bulYyBkxrDGoW5nLiANCg0KKipQaMOibiBwaOG7kWkgR2FtbWE6KioNCg0KLSBQaMOibiBwaOG7kWkgR2FtbWEgbMOgIG3hu5l0IGxv4bqhaSBwaMOibiBwaOG7kWkgdGjhu5FuZyBrw6ogbGnDqm4gcXVhbiDEkeG6v24gcGjDom4gcGjhu5FpIGJldGEuIA0KJCQNClAoeTsgXGFscGhhLCBcYmV0YSkgPSBcZnJhY3t5XntcYWxwaGEgLSAxfSBcZXhwKC15IC8gXGJldGEpfXtcR2FtbWEoXGFscGhhKSBcYmV0YV5cYWxwaGF9DQokJA0KIA0KLSBIw6BtIHBoxrDGoW5nIHNhaSBj4bunYSBuw7MgbMOgIFYozrwpID0gzrzCsi4gxJDDonkgbMOgIG3hu5l0IHRyb25nIG5o4buvbmcgaMOgbSBwaMawxqFuZyBzYWkgdMSDbmcgxJHGoW4gZ2nhuqNuIG5o4bqldCBzYXUgVijOvCk9zrwuDQoNCi0gTsOzIHBow7kgaOG7o3Aga2hpIGjhu4cgc+G7kSBiaeG6v24gdGhpw6puIChjb2VmZmljaWVudCBvZiB2YXJpYXRpb24pLCDEkcaw4bujYyDEkeG7i25oIG5naMSpYSBsw6AgdOG7tyBs4buHIGdp4buvYSDEkeG7mSBs4buHY2ggY2h14bqpbiB2w6AgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCwgbMOgIHjhuqVwIHjhu4kgaOG6sW5nIHPhu5EuDQoNCi0gUGjDom4gcGjhu5FpIEdhbW1hIG3DtCBow6xuaCBow7NhIHRo4budaSBnaWFuIGNo4budIMSR4bujaSBnaeG7r2EgY8OhYyBz4buxIGtp4buHbiB44bqjeSByYSBuZ+G6q3Ugbmhpw6puIHRoZW8gcGjDom4gcGjhu5FpIFBvaXNzb24uDQoNCi0gUGjhuqFtIHZpIGdpw6EgdHLhu4sgKHN1cHBvcnQpIGPhu6dhIHBow6JuIHBo4buRaSBHYW1tYSBsw6AgeSA+IDAsIHbDoCBtaeG7gW4geMOhYyDEkeG7i25oIChkb21haW4pIGNobyBnacOhIHRy4buLIHRydW5nIGLDrG5oIM68IGzDoCDOvCA+IDAuDQoNCioqUGjDom4gcGjhu5FpIEludmVyc2UgR2F1c3NpYW46KioNCg0KLSBQaMOibiBwaOG7kWkgSW52ZXJzZSBHYXVzc2lhbiBjxaluZyBsw6AgbeG7mXQgRURNLg0KDQotIEjDoG0gcGjGsMahbmcgc2FpIGPhu6dhIG7DsyBsw6AgVijOvCkgPSDOvMKzLg0KDQotIE7DsyBsacOqbiBxdWFuIMSR4bq/biB0aOG7nWkgZ2lhbiDEkeG6oXQgxJFp4buDbSBs4bqnbiDEkeG6p3UgdGnDqm4gKGZpcnN0LXBhc3NhZ2UgdGltZSkgdHJvbmcgY2h1eeG7g24gxJHhu5luZyBCcm93bmlhbi4NCg0KLSBQaOG6oW0gdmkgZ2nDoSB0cuG7iyAoc3VwcG9ydCkgY+G7p2EgbsOzIGzDoCB5ID4gMCwgdsOgIG1p4buBbiB4w6FjIMSR4buLbmggKGRvbWFpbikgY2hvIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggzrwgbMOgIM68ID4gMC4NCg0KKipIw6BtIGxpw6puIGvhur90OioqDQoNCi0gxJDhu5FpIHbhu5tpIGPhuqMgR0xNcyBHYW1tYSB2w6AgSW52ZXJzZSBHYXVzc2lhbiwgY8OhYyBow6BtIGxpw6puIGvhur90IHRoxrDhu51uZyDEkcaw4bujYyBz4butIGThu6VuZyBsw6AgbG9nYXJpdCAoImxvZyIpLCBuZ2jhu4tjaCDEkeG6o28gKCJpbnZlcnNlIikgdsOgIMSR4buTbmcgbmjhuqV0ICgiaWRlbnRpdHkiKS4NCg0KLSBIw6BtIGxpw6puIGvhur90IGxvZ2FyaXQgKCJsb2ciKSBsw6AgbeG7mXQgaMOgbSBsacOqbiBr4bq/dCDEkcaw4bujYyBwaMOpcCBjaG8gY+G6oyBoYWkgcGjDom4gcGjhu5FpIG7DoHkuDQoNCi0gSMOgbSBsacOqbiBr4bq/dCBjaMOtbmggdOG6r2MgKGNhbm9uaWNhbCBsaW5rKSBjaG8gcGjDom4gcGjhu5FpIEludmVyc2UgR2F1c3NpYW4gbMOgICIxL211XjIiLg0KDQotIEzhu7FhIGNo4buNbiBj4bqpbiB0aOG6rW4gaMOgbSBsacOqbiBr4bq/dCB2w6AgYmnhur9uIMSR4buVaSBj4bunYSBiaeG6v24gZ2nhuqNpIHRow61jaCBjw7MgdGjhu4MgZ2nDunAgbcO0IHThuqMgY8OhYyBt4buRaSBxdWFuIGjhu4cgdGnhu4dtIGPhuq1uIGdp4buvYSBiaeG6v24gcGjhuqNuIGjhu5NpIHbDoCBiaeG6v24gZ2nhuqNpIHRow61jaC4NCg0KKirGr+G7m2MgbMaw4bujbmcgdGhhbSBz4buRIHBow6JuIHTDoW46KioNCg0KLSDEkOG7kWkgduG7m2kgY+G6oyBHTE1zIEdhbW1hIHbDoCBJbnZlcnNlIEdhdXNzaWFuLCB0aGFtIHPhu5EgcGjDom4gdMOhbiDPhiB0aMaw4budbmcgY+G6p24gxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nLg0KDQotIEPDsyBuaGnhu4F1IHBoxrDGoW5nIHBow6FwIMaw4bubYyBsxrDhu6NuZyDPhiwgYmFvIGfhu5NtIMaw4bubYyBsxrDhu6NuZyBI4bujcCBsw70gY+G7sWMgxJHhuqFpIChNTEUpLCDGsOG7m2MgbMaw4bujbmcgxJDhu5kgbOG7h2NoIHRydW5nIGLDrG5oIChNZWFuIERldmlhbmNlKSwgdsOgIMaw4bubYyBsxrDhu6NuZyBQZWFyc29uIFs4LCAxMS42LjItMTEuNi41XS4NCi0gxq/hu5tjIGzGsOG7o25nIFBlYXJzb24gY+G7p2Egz4YgxJHGsOG7o2Mga2h1eeG6v24gbmdo4buLIHPhu60gZOG7pW5nIGNobyBj4bqjIHBow6JuIHBo4buRaSBHYW1tYSB2w6AgSW52ZXJzZSBHYXVzc2lhbi4NCg0KLSDGr+G7m2MgbMaw4bujbmcgTUxFIGPhu6dhIM+GIGzDoCBjaMOtbmggeMOhYyBjaG8gcGjDom4gcGjhu5FpIEludmVyc2UgR2F1c3NpYW4uDQoNCi0gxq/hu5tjIGzGsOG7o25nIMSQ4buZIGzhu4djaCB0cnVuZyBiw6xuaCBj4bunYSDPhiDEkcaw4bujYyB0w61uaCBi4bqxbmcgY8O0bmcgdGjhu6ljOiBEKHksIM68zIIpIC8gKG4gLSBwJyksIHRyb25nIMSRw7MgRCBsw6AgxJHhu5kgbOG7h2NoIGTGsCB2w6Agbi1wJyBsw6AgYuG6rWMgdOG7sSBkbyBkxrAuDQoNCioqU+G7rSBk4bulbmcgUjoqKg0KDQotIMSQ4buDIGZpdCBHTE1zIEdhbW1hIHbDoCBJbnZlcnNlIEdhdXNzaWFuIHRyb25nIFIsIHPhu60gZOG7pW5nIGjDoG0gZ2xtKCkgdsOgIGNo4buJIMSR4buLbmggZmFtaWx5IHTGsMahbmcg4bupbmcuDQoNCi0gR0xNIEdhbW1hIMSRxrDhu6NjIGNo4buJIMSR4buLbmggYuG6sW5nIGZhbWlseT1HYW1tYSgpLg0KDQotIEdMTSBJbnZlcnNlIEdhdXNzaWFuIMSRxrDhu6NjIGNo4buJIMSR4buLbmggYuG6sW5nIGZhbWlseT1pbnZlcnNlLmdhdXNzaWFuKCkuDQoNCi0gQ8OhYyBow6BtIGxpw6puIGvhur90IMSRxrDhu6NjIHBow6lwIHRyb25nIFIgY2hvIGPhuqMgaGFpIGZhbWlseSBuw6B5IGJhbyBn4buTbSAiaW52ZXJzZSIsICJpZGVudGl0eSIsIHbDoCAibG9nIi4gRmFtaWx5IGludmVyc2UuZ2F1c3NpYW4oKSBjxaluZyBjaOG6pXAgbmjhuq1uICIxL211XjIiLg0KDQotIMav4bubYyBsxrDhu6NuZyBQZWFyc29uIGPhu6dhIM+GIGPDsyB0aOG7gyDEkcaw4bujYyB0cnV5IHh14bqldCB04burIGvhur90IHF14bqjIHN1bW1hcnkoKSBj4bunYSBtw7QgaMOsbmggKCRkaXNwZXJzaW9uKS4NCg0KLSBDw6FjIHBsb3QgY2jhuqluIMSRb8OhbiwgYmFvIGfhu5NtIHBo4bqnbiBkxrAgY2h14bqpbiBow7NhIChzdGFuZGFyZGl6ZWQgcmVzaWR1YWxzKSBzbyB24bubaSBnacOhIHRy4buLIGZpdHRlZCAocnN0YW5kYXJkKCksIGZpdHRlZCgpKSwga2hv4bqjbmcgY8OhY2ggQ29vayAoQ29vaydzIGRpc3RhbmNlKSAoY29va3MuZGlzdGFuY2UoKSksIHbDoCBRLVEgcGxvdHMgY+G7p2EgcGjhuqduIGTGsCBxdWFudGlsZSAocXFub3JtKCksIHFyZXNpZCgpLCBxcWxpbmUoKSkgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4Mga2nhu4NtIHRyYSBjw6FjIGdp4bqjIMSR4buLbmggY+G7p2EgbcO0IGjDrG5oLiANCg0KLSBUacOqdSBjaMOtIHRow7RuZyB0aW4gQWthaWtlIChBSUMpIGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBzbyBzw6FuaCBz4buxIHBow7kgaOG7o3AgY+G7p2EgY8OhYyBFRE0ga2jDoWMgbmhhdSwgY2jhurNuZyBo4bqhbiBuaMawIEdhbW1hIHbDoCBJbnZlcnNlIEdhdXNzaWFuLiBIw6BtIEFJQygpIGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyB0w61uaCBBSUMuDQoNCg0KIyMgKipDSMavxqBORyAxMjogTcO0IGjDrG5oIFR1eeG6v24gdMOtbmggVOG7lW5nIHF1w6F0IFR3ZWVkaWUgKFR3ZWVkaWUgR0xNcykgKioNCg0KVHdlZWRpZSBFRE1zOiBQaMOibiBwaOG7kWkgVHdlZWRpZSBsw6AgbeG7mXQgbOG7m3AgY29uIGPhu6dhIEVETXMgY8OzIGjDoG0gcGjGsMahbmcgc2FpIGPDsyBk4bqhbmcgVijOvCkgPSDOvF7OviwgdHJvbmcgxJHDsyDOvCBsw6AgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCB2w6Agzr4gKHhpKSBsw6AgdGhhbSBz4buRIGNo4buJIHPhu5EgVHdlZWRpZS5UaGFtIHPhu5EgY2jhu4kgc+G7kSDOviB4w6FjIMSR4buLbmggcGjDom4gcGjhu5FpIGPhu6UgdGjhu4MgdHJvbmcgaOG7jSBUd2VlZGllLg0KDQotIE3hu5l0IHPhu5EgcGjDom4gcGjhu5FpIHRow7RuZyB0aMaw4budbmcgbMOgIHRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0IGPhu6dhIHBow6JuIHBo4buRaSBUd2VlZGllIHbhu5tpIGPDoWMgZ2nDoSB0cuG7iyDOviBj4bulIHRo4buDOg0KDQogICAgLSBDaHXhuqluIChOb3JtYWwpIGtoaSDOviA9IDAuDQoNCiAgICAtIFBvaXNzb24ga2hpIM6+ID0gMSB2w6AgdGhhbSBz4buRIHBow6JuIHTDoW4gz4YgPSAxLg0KDQogICAgLSBHYW1tYSBraGkgzr4gPSAyLg0KDQogICAgLSBJbnZlcnNlIEdhdXNzaWFuIGtoaSDOviA9IDMuDQoNCi0gS2jDtG5nIGPDsyBFRE0gVHdlZWRpZSBuw6BvIHThu5NuIHThuqFpIGtoaSAwIDwgzr4gPCAxLg0KDQotIEPDoWMgcGjDom4gcGjhu5FpIFR3ZWVkaWUgxJHGsOG7o2MgxJHhu4tuaCBuZ2jEqWEgbMOgIEVETXMgY8OzIGjDoG0gcGjGsMahbmcgc2FpIFYozrwpID0gzrxezr4uIA0KDQoqKkPhuqV1IHRyw7pjIFR3ZWVkaWUgRURNczoqKg0KDQotIFThu6sgbeG7kWkgcXVhbiBo4buHIFYozrwpID0gzrxezr4sIGPDsyB0aOG7gyBzdXkgcmEgYmnhu4N1IHRo4bupYyBjaG8gdGhhbSBz4buRIGNow61uaCB04bqvYyAoY2Fub25pY2FsIHBhcmFtZXRlcikgzrggdsOgIGjDoG0gdMOtY2ggbMWpeSAoY3VtdWxhbnQgZnVuY3Rpb24pIM66KM64KS5CaeG7g3UgdGjhu6ljIG7DoHkgcGjhu6UgdGh14buZYyB2w6BvIM6+Lg0KDQotIFBow6JuIHBo4buRaSBUd2VlZGllIGNo4buJIGzDoCBt4buZdCBFRE0gbuG6v3UgdGhhbSBz4buRIM6+IMSRxrDhu6NjIGJp4bq/dC4gVHJvbmcgdGjhu7FjIHThur8sIGdpw6EgdHLhu4sgY+G7p2Egzr4gdGjGsOG7nW5nIGtow7RuZyBiaeG6v3QgdsOgIHBo4bqjaSDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcuDQoNCi0gxJDhu5kgbOG7h2NoIGTGsCDEkcahbiB24buLICh1bml0IGRldmlhbmNlKSBkKHksIM68KSBjaG8gY8OhYyBFRE0gVHdlZWRpZS4gIMSQ4buZIGzhu4djaCBkxrAgxJHGoW4gduG7iyBsw6AgaOG7r3UgaOG6oW4ga2hpIHkgPSAwIMSR4buRaSB24bubaSBjw6FjIHRyxrDhu51uZyBo4bujcCDOviDiiaQgMCB2w6AgMSA8IM6+IDwgMiwgdsOsIHkgPSAwIGNo4buJIMSRxrDhu6NjIGNo4bqlcCBuaOG6rW4gdHJvbmcgY8OhYyB0csaw4budbmcgaOG7o3AgbsOgeS4NCg0KLSBUaGVvIHjhuqVwIHjhu4kgxJFp4buDbSB5w6puIG5n4buxYSAoc2FkZGxlcG9pbnQgYXBwcm94aW1hdGlvbiksIMSR4buZIGzhu4djaCBkxrAgZMawIChyZXNpZHVhbCBkZXZpYW5jZSkgRCh5LCDOvMyCKSB44bqlcCB44buJIHRoZW8gcGjDom4gcGjhu5FpIM+HwrIgduG7m2kgbi1wJyBi4bqtYyB04buxIGRvLCB24bubaSDEkWnhu4F1IGtp4buHbiAkXHBoaSBcbGVxIHleezIgLSBcZnJhY3tceGl9ezN9fSQga2hpIM6+IOKJpSAxLiBUdXkgbmhpw6puLCB44bqlcCB44buJIG7DoHkgY8OzIHRo4buDIGvDqW0gY2jDrW5oIHjDoWMgxJHhu5FpIHbhu5tpIGThu68gbGnhu4d1IGxpw6puIHThu6VjIGPDsyBjaOG7qWEgZ2nDoSB0cuG7iyAwIGNow61uaCB4w6FjIChraGkgMSA8IM6+IDwgMikuIFjhuqVwIHjhu4kgbsOgeSBsw6AgY2jDrW5oIHjDoWMgxJHhu5FpIHbhu5tpIHBow6JuIHBo4buRaSBJbnZlcnNlIEdhdXNzaWFuICjOviA9IDMpLg0KDQotIFR3ZWVkaWUgY8OzIHTDrW5oIGNo4bqldCBuaOG6rW4gZOG6oW5nIMSR4buVaSB04bu3IGzhu4cgKHJlc2NhbGluZyBpZGVudGl0eSkuDQoNCioqROG7ryBsaeG7h3UgbGnDqm4gdOG7pWMgZMawxqFuZyB2w6AgZOG7ryBsaeG7h3UgY8OzIGdpw6EgdHLhu4sga2jDtG5nIGNow61uaCB4w6FjOioqDQoNCi0gQ8OhYyBwaMOibiBwaOG7kWkgVHdlZWRpZSBwaMO5IGjhu6NwIHbhu5tpIG5oaeG7gXUgbG/huqFpIGThu68gbGnhu4d1IGtow6FjIG5oYXUgdMO5eSB0aHXhu5ljIHbDoG8gZ2nDoSB0cuG7iyBj4bunYSDOvi4NCg0KLSDEkOG7kWkgduG7m2kgzr4g4omlIDIsIHBow6JuIHBo4buRaSBUd2VlZGllIHRow61jaCBo4bujcCDEkeG7gyBtw7QgaMOsbmggaMOzYSBk4buvIGxp4buHdSBsacOqbiB04bulYyBkxrDGoW5nLiBQaMOibiBwaOG7kWkgR2FtbWEgKM6+ID0gMikgdsOgIEludmVyc2UgR2F1c3NpYW4gKM6+ID0gMykgbMOgIGPDoWMgdHLGsOG7nW5nIGjhu6NwIMSR4bq3YyBiaeG7h3QuIEPDoWMgcGjDom4gcGjhu5FpIFR3ZWVkaWUgduG7m2kgzr4g4omlIDIgxJHGsOG7o2Mgc+G7rSBk4bulbmcga2hpIHBow6JuIHBo4buRaSBHYW1tYSBob+G6t2MgSW52ZXJzZSBHYXVzc2lhbiBraMO0bmcgxJHhu6csIMSR4bq3YyBiaeG7h3QgxJHhu5FpIHbhu5tpIGThu68gbGnhu4d1IGLhu4sgbOG7h2NoIG5naGnDqm0gdHLhu41uZy4NCg0KLSDEkOG7kWkgduG7m2kgMSA8IM6+IDwgMiwgcGjDom4gcGjhu5FpIFR3ZWVkaWUgdGjDrWNoIGjhu6NwIMSR4buDIG3DtCBow6xuaCBow7NhIGThu68gbGnhu4d1IGxpw6puIHThu6VjIGTGsMahbmcgduG7m2kgZ2nDoSB0cuG7iyBraMO0bmcgY2jDrW5oIHjDoWMgKGV4YWN0IHplcm9zKS4gTG/huqFpIGThu68gbGnhu4d1IG7DoHkgY8OzIHRo4buDIMSRxrDhu6NjIGPhuqV1IHRyw7pjIG5oxrAgdOG7lW5nIGPhu6dhIE4gYmnhur9uIG5n4bqrdSBuaGnDqm4gR2FtbWEgxJHhu5ljIGzhuq1wLCB0cm9uZyDEkcOzIE4gdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgUG9pc3Nvbi4gxJBp4buBdSBuw6B5IGThuqtuIMSR4bq/biBt4buZdCB4w6FjIHN14bqldCBkxrDGoW5nIGNobyBnacOhIHRy4buLIHkgPSAwICjPgDApLiBWw60gZOG7pSB24buBIGThu68gbGnhu4d1IG7DoHkgbMOgIGThu68gbGnhu4d1IGzGsOG7o25nIG3GsGEuIGhv4bq3YyBk4buvIGxp4buHdSB5w6p1IGPhuqd1IGLhuqNvIGhp4buDbS4NCg0KLSDEkOG7kWkgduG7m2kgzr4gPSAxLCBwaMOibiBwaOG7kWkgVHdlZWRpZSB0aMOtY2ggaOG7o3AgY2hvIGThu68gbGnhu4d1IHLhu51pIHLhuqFjIChwaMOibiBwaOG7kWkgUG9pc3NvbiBsw6AgdHLGsOG7nW5nIGjhu6NwIMSR4bq3YyBiaeG7h3Qga2hpIM+GPTEpLg0KDQotIMSQ4buRaSB24bubaSDOviDiiaQgMCwgcGjDom4gcGjhu5FpIFR3ZWVkaWUgdGjDrWNoIGjhu6NwIGNobyBk4buvIGxp4buHdSBsacOqbiB04bulYyB0csOqbiB0b8OgbiB0cuG7pWMgc+G7kSB0aOG7sWMsIG5oxrBuZyBnacOhIHRy4buLIHRydW5nIGLDrG5oIM68ID4gMC4gQ8OhYyBwaMOibiBwaOG7kWkgbsOgeSDDrXQgY8OzIOG7qW5nIGThu6VuZyB0aOG7sWMgdOG6vy4NCg0KKipUd2VlZGllIEdMTXM6KioNCg0KLSBDw6FjIEdMTXMgZOG7sWEgdHLDqm4gcGjDom4gcGjhu5FpIFR3ZWVkaWUgxJHGsOG7o2MgZ+G7jWkgbMOgIFR3ZWVkaWUgR0xNcy4NCg0KLSDEkOG7kWkgduG7m2kgY8OhYyB0csaw4budbmcgaOG7o3AgxJHGsOG7o2MgeGVtIHjDqXQgdHJvbmcgY2jGsMahbmcgKM6+ID4gMiB2w6AgMSA8IM6+IDwgMiksIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggzrwgPiAwLiBEbyDEkcOzLCBow6BtIGxpw6puIGvhur90IChsaW5rIGZ1bmN0aW9uKSB0aMaw4budbmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgIGjDoG0gbGnDqm4ga+G6v3QgbG9nYXJpdCAobG9nYXJpdGhtaWMgbGluayBmdW5jdGlvbikuIA0KDQotIMSQ4buDIGZpdCBt4buZdCBUd2VlZGllIEdMTSwgZ2nDoSB0cuG7iyBj4bunYSDOviBwaOG6o2kgxJHGsOG7o2MgYmnhur90IGhv4bq3YyDGsOG7m2MgbMaw4bujbmcxMS4gU2F1IGtoaSBjw7MgxrDhu5tjIGzGsOG7o25nIGNobyDOviwgbcO0IGjDrG5oIGPDsyB0aOG7gyDEkcaw4bujYyBmaXQuDQoNCi0gVGhhbSBz4buRIHBow6JuIHTDoW4gz4YgdGjGsOG7nW5nIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBi4bqxbmcgY8OhY2ggc+G7rSBk4bulbmcgxrDhu5tjIGzGsOG7o25nIFBlYXJzb24xMS4uLi4gVHV5IG5oacOqbiwgxrDhu5tjIGzGsOG7o25nIGjhu6NwIGzDvSBj4buxYyDEkeG6oWkgKE1MRSkgY+G7p2Egz4YgbMOgIGPhuqduIHRoaeG6v3QgxJHhu4MgdMOtbmggdG/DoW4gTUxFIGPhu6dhIHjDoWMgc3XhuqV0IGLhurFuZyBraMO0bmcgY2jDrW5oIHjDoWMgKM+AMCkga2hpIDEgPCDOviA8IDIuDQoNCioqU+G7rSBk4bulbmcgUiDEkeG7gyBmaXQgVHdlZWRpZSBHTE1zOioqDQoNCi0gVmnhu4djIGZpdCBUd2VlZGllIEdMTXMgdHJvbmcgUiB5w6p1IGPhuqd1IGPDoGkgxJHhurd0IHbDoCB04bqjaSBjw6FjIGfDs2kgdGjGsCB2aeG7h24gYuG7lSBzdW5nLg0KDQotIEfDs2kgdHdlZWRpZXLhuqV0IGjhu691IMOtY2ggY2hvIHZp4buHYyDGsOG7m2MgbMaw4bujbmcgZ2nDoSB0cuG7iyDOviBwaMO5IGjhu6NwIGNobyBk4buvIGxp4buHdSBi4bqxbmcgY8OhY2ggc+G7rSBk4bulbmcgaMOgbSB0d2VlZGllLnByb2ZpbGUoKS4gSMOgbSBuw6B5IGhv4bqhdCDEkeG7mW5nIGLhurFuZyBjw6FjaCB0w61uaCBsb2ctbGlrZWxpaG9vZCBjaG8gbmhp4buBdSBnacOhIHRy4buLIM6+IGtow6FjIG5oYXUgxJHhu4MgdMOsbSDGsOG7m2MgbMaw4bujbmcgaOG7o3AgbMO9IGPhu7FjIMSR4bqhaS4gdHdlZWRpZS5wcm9maWxlKCkgdHLhuqMgduG7gSDGsOG7m2MgbMaw4bujbmcgTUxFIGPhu6dhIM6+ICh4aS5tYXgpLCBNTEUgY+G7p2Egz4YgKHBoaS5tYXgpLCB2w6Aga2hv4bqjbmcgdGluIGPhuq15IGNobyDOvi4NCg0KLSBHw7NpIHN0YXRtb2QgbMOgIGPhuqduIHRoaeG6v3QgxJHhu4MgZml0IFR3ZWVkaWUgR0xNcywgY3VuZyBj4bqlcCBow6BtIGZhbWlseSB0d2VlZGllKCkgY2hvIGjDoG0gZ2xtKCkuIEtoaSBz4butIGThu6VuZyBmYW1pbHk9dHdlZWRpZSgpLCBj4bqnbiBjaOG7iSDEkeG7i25oIGdpw6EgdHLhu4sgY+G7p2Egzr4gYuG6sW5nIMSR4buRaSBz4buRIHZhci5wb3dlciB2w6AgaMOgbSBsacOqbiBr4bq/dCBi4bqxbmcgbGluay5wb3dlciAobeG6t2MgxJHhu4tuaCAwIGNobyBsaW5rIGxvZ2FyaXQpLiANCg0KLSBIw6BtIHFyZXNpZCgpIHRyb25nIGfDs2kgc3RhdG1vZCDEkcaw4bujYyBraHV54bq/biBuZ2jhu4sgc+G7rSBk4bulbmcgxJHhu4MgdMOtbmggdG/DoW4gcGjhuqduIGTGsCBxdWFudGlsZSAocXVhbnRpbGUgcmVzaWR1YWxzKSBjaG8gVHdlZWRpZSBHTE1zLg0KDQotIEdpw6EgdHLhu4sgQUlDIGtow7RuZyDEkcaw4bujYyB0w61uaCBt4bq3YyDEkeG7i25oIHRyb25nIGvhur90IHF14bqjIHN1bW1hcnkoKSBj4bunYSBnbG0oKSBjaG8gVHdlZWRpZSBHTE1zIHbDrCBjw7MgdGjhu4MgdOG7kW4gdGjhu51pIGdpYW4gdMOtbmggdG/DoW4uIE7hur91IGPhuqduLCBBSUMgY8OzIHRo4buDIMSRxrDhu6NjIHTDrW5oIHRvw6FuIHRy4buxYyB0aeG6v3AgYuG6sW5nIGjDoG0gQUlDdHdlZWRpZSgpIHRyb25nIGfDs2kgdHdlZWRpZS4gDQoNCi0gSMOgbSB0d2VlZGllLmNvbnZlcnQoKSBjw7MgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgY2h1eeG7g24gxJHhu5VpIMaw4bubYyBsxrDhu6NuZyB0aGFtIHPhu5EgR0xNIHRow6BuaCBjw6FjIHRoYW0gc+G7kSBj4bunYSBjw6FjIHBow6JuIHBo4buRaSBQb2lzc29uIHbDoCBHYW1tYSBjxqEgYuG6o24ga2hpIDEgPCDOviA8IDIsIHBo4bulYyB24bulIG3hu6VjIMSRw61jaCBkaeG7hW4gZ2nhuqNpLiANCiANCiMgVEjhu5BORyBLw4ogTcOUIFThuqIgDQoNCiMjICoqMS4gTcO0IHThuqMgZOG7ryBsaeG7h3UqKiANCg0KQuG7mSBk4buvIGxp4buHdSBTdXBlcm1hcmtldCBUcmFuc2FjdGlvbnMgZ+G7k20gMTQwNTksIG3hu5dpIHPhu5EgbGnhu4d1IMSR4bqhaSBkaeG7h24gY2hvIG3hu5l0IGdpYW8gZOG7i2NoIHThuqFpIHNpw6p1IHRo4buLLiBE4buvIGxp4buHdSBiYW8gZ+G7k20gMTYgY+G7mXQgduG7m2kgdGjDtG5nIHRpbiBuaMawIHNhdTogUHVyY2hhc2VEYXRlIChOZ8OgeSBtdWEgaMOgbmcpLCBDdXN0b21lcklEIChNw6Mga2jDoWNoIGjDoG5nKSwgR2VuZGVyIChHaeG7m2kgdMOtbmgpLCBNYXJpdGFsU3RhdHVzIChUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4pLCBIb21lb3duZXIgKFTDrG5oIHRy4bqhbmcgc+G7nyBo4buvdSBuaMOgKSwgQ2hpbGRyZW4gKFPhu5EgY29uKSwgQW5udWFsSW5jb21lIChUaHUgbmjhuq1wIGjDoG5nIG7Eg20pLCBDaXR5IChUaMOgbmggcGjhu5EpLCBTdGF0ZW9yUHJvdmluY2UgKEJhbmcgaG/hurdjIHThu4luaCksIENvdW50cnkgKFF14buRYyBnaWEpLCBQcm9kdWN0RmFtaWx5IChOaMOzbSBz4bqjbiBwaOG6qW0pLCBQcm9kdWN0RGVwYXJ0bWVudCAoQuG7mSBwaOG6rW4gc+G6o24gcGjhuqltKSwgUHJvZHVjdENhdGVnb3J5IChEYW5oIG3hu6VjIHPhuqNuIHBo4bqpbSksIFVuaXRzU29sZCAoU+G7kSBsxrDhu6NuZyBiw6FuIHJhKSwgdsOgIFJldmVudWUgKERvYW5oIHRodSkuIEThu68gbGnhu4d1IG7DoHkgY2hvIHBow6lwIHBow6JuIHTDrWNoIGjDoG5oIHZpIG5nxrDhu51pIHRpw6p1IGTDuW5nLCB4dSBoxrDhu5tuZyB0acOqdSB0aOG7pSBz4bqjbiBwaOG6qW0gdsOgIMSRw6FuaCBnacOhIGhp4buHdSBxdeG6oyBraW5oIGRvYW5oIHRoZW8gdOG7q25nIHBow6JuIGtow7pjIGtow6FjaCBow6BuZyBjxaluZyBuaMawIGtodSB24buxYyDEkeG7i2EgbMO9Lg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmQgPC0gcmVhZC5jc3YoJ0Q6L0hLMl9QVERMRFRfVE1UL1N1cGVybWFya2V0IFRyYW5zYWN0aW9ucy5jc3YnLGhlYWRlciA9IFQpDQpzdHIoZCkNCmR0IDwtIGQNCmRhdGF0YWJsZShkdCxvcHRpb25zID0gbGlzdChzY3JvbGxYID0gVFJVRSkpDQpgYGANCiMjICoqMi4gVGjhu5FuZyBrw6ogYmnhur9uIMSR4buLbmggbMaw4bujbmcqKg0KDQpgYGB7cn0NCiNUw61uaCB0aOG7kW5nIGvDqg0KZGVzYyA8LSBkZXNjcmliZShkJFVuaXRzU29sZCkNCiMgSGnhu4NuIHRo4buLIGLhuqNuZyDEkeG6uXANCmthYmxlKGRlc2MpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiKSwgZnVsbF93aWR0aCA9IEYpDQpgYGANCg0KQmnhur9uIFVuaXRzU29sZCBn4buTbSAxNDA1OSBxdWFuIHPDoXQsIHRydW5nIGLDrG5oIDQuMDggxJHGoW4gduG7iyB24bubaSDEkeG7mSBs4buHY2ggY2h14bqpbiAxLjE3LCBjaG8gdGjhuqV5IG3hu6ljIHBow6JuIHTDoW4gbmjhurkgcXVhbmggdHJ1bmcgYsOsbmguIEdpw6EgdHLhu4sgdHJ1bmcgduG7iyBsw6AgNCwgZ+G6p24gdHJ1bmcgYsOsbmgsIGPDuW5nIMSR4buZIGzhu4djaCBn4bqnbiAwICgwLjAxMikgcGjhuqNuIMOhbmggcGjDom4gcGjhu5FpIGfhuqduIG5oxrAgxJHhu5FpIHjhu6luZy4gSOG7hyBz4buRIG5o4buNbiAtMC40NCBjaG8gdGjhuqV5IHBow6JuIHBo4buRaSBi4bq5dCBoxqFuIGNodeG6qW4uIEdpw6EgdHLhu4sgZGFvIMSR4buZbmcgdOG7qyAxIMSR4bq/biA4LCBwaOG6oW0gdmkgaOG6uXAuIFNhaSBz4buRIGNodeG6qW4gMC4wMDk5IGNo4bupbmcgdOG7jyDGsOG7m2MgbMaw4bujbmcgdHJ1bmcgYsOsbmggY2jDrW5oIHjDoWMuIFThu5VuZyB0aOG7gywgVW5pdHNTb2xkIHBow6JuIHBo4buRaSBn4bqnbiBjaHXhuqluLCB04bqtcCB0cnVuZyBxdWFuaCA0IHPhuqNuIHBo4bqpbSBt4buXaSBnaWFvIGThu4tjaC4NCg0KYGBge3J9DQojVMOtbmggdGjhu5FuZyBrw6oNCmRlc2MgPC0gZGVzY3JpYmUoZCRSZXZlbnVlKQ0KIyBIaeG7g24gdGjhu4sgYuG6o25nIMSR4bq5cA0Ka2FibGUoZGVzYykgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIpLCBmdWxsX3dpZHRoID0gRikNCg0KYGBgDQoNCkJp4bq/biBSZXZlbnVlIChYMSkgZ+G7k20gMTQsMDU5IHF1YW4gc8OhdCwgdHJ1bmcgYsOsbmggMTMuMDAsIMSR4buZIGzhu4djaCBjaHXhuqluIDguMjIsIHBow6JuIHBo4buRaSBs4buHY2ggcGjhuqNpIChza2V3bmVzcyAxLjEzKSB24bubaSBwaOG6oW0gdmkgcuG7mW5nICgwLjUzIMSR4bq/biA1Ni43KS4gR2nDoSB0cuG7iyB0cnVuZyB24buLIDExLjI1IHRo4bqlcCBoxqFuIHRydW5nIGLDrG5oLCBjaG8gdGjhuqV5IHPhu7EgcGjDom4gYuG7kSBraMO0bmcgxJHhu5FpIHjhu6luZy4gS3VydG9zaXMgMS4zOSBjaOG7iSByYSDEkXXDtGkgZMOgeSBoxqFuIGNodeG6qW4uIFNhaSBz4buRIGNodeG6qW4gMC4wNjkgY2hvIMaw4bubYyBsxrDhu6NuZyB0cnVuZyBiw6xuaCBjaMOtbmggeMOhYy4NCg0KYGBge3J9DQojVMOtbmggdGjhu5FuZyBrw6oNCmRlc2MgPC0gZGVzY3JpYmUoZCRDaGlsZHJlbikNCiMgSGnhu4NuIHRo4buLIGLhuqNuZyDEkeG6uXANCmthYmxlKGRlc2MpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiKSwgZnVsbF93aWR0aCA9IEYpDQpgYGANCg0KDQojIyAqKjMuIFRo4buRbmcga8OqIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmgqKg0KDQoqKkJp4bq/biBHZW5kZXIqKg0KDQpgYGB7cn0NCnByb3AudGFibGUodGFibGUoZCRHZW5kZXIpKSAlPiUgYWRkbWFyZ2lucygpDQojIFTDrW5oIHThu7cgbOG7hyBwaOG6p24gdHLEg20NCmMxIDwtIHByb3AudGFibGUodGFibGUoZCRHZW5kZXIpKSAqIDEwMA0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuDQpwaWUoYzEsDQogICAgbGFiZWxzID0gcGFzdGUobmFtZXMoYzEpLCByb3VuZChjMSwgMiksICIlIiksDQogICAgbWFpbiA9ICJU4bu3IGzhu4cgR2VuZGVyIikNCmBgYA0KDQpCaeG7g3UgxJHhu5MgdHLDqm4gdGjhu4MgaGnhu4duIHBow6JuIGLhu5EgZ2nhu5tpIHTDrW5oIGPhu6dhIGtow6FjaCBow6BuZyB0cm9uZyBi4buZIGThu68gbGnhu4d1LCB24bubaSBoYWkgbmjDs20gbMOgIEYgKEZlbWFsZSAtIE7hu68pIHbDoCBNIChNYWxlIC0gTmFtKS4gU+G7kSBsxrDhu6NuZyBnaWFvIGThu4tjaCBj4bunYSBraMOhY2ggaMOgbmcgbuG7ryBjaGnhur9tIDUxJSB04bu3IGzhu4cgbmjhu4luaCBoxqFuIHNvIHbhu5tpIG5hbSA0OSUgY2hvIHRo4bqleSBwaOG7pSBu4buvIGPDsyB4dSBoxrDhu5tuZyB0aGFtIGdpYSBtdWEgc+G6r20gbmhp4buBdSBoxqFuIHRyb25nIHNpw6p1IHRo4buLLiBT4buxIGNow6puaCBs4buHY2ggbsOgeSB0dXkga2jDtG5nIGzhu5tuIG5oxrBuZyBjw7MgdGjhu4MgcGjhuqNuIMOhbmggdmFpIHRyw7IgY+G7p2EgcGjhu6UgbuG7ryB0cm9uZyB2aeG7h2MgY2hpIHRpw6p1IHbDoCBs4buxYSBjaOG7jW4gaMOgbmcgaMOzYSB0cm9uZyBnaWEgxJHDrG5oLiBUaMO0bmcgdGluIG7DoHkgaOG7r3Ugw61jaCBjaG8gY8OhYyBjaGnhur9uIGzGsOG7o2MgdGnhur9wIHRo4buLLCBnacO6cCBzacOqdSB0aOG7iyBjw7MgdGjhu4MgxJFp4buBdSBjaOG7iW5oIGRhbmggbeG7pWMgc+G6o24gcGjhuqltIHbDoCBjw6FjIGNoxrDGoW5nIHRyw6xuaCBraHV54bq/biBtw6NpIHBow7kgaOG7o3AgaMahbiB24bubaSBuaMOzbSBraMOhY2ggaMOgbmcgbuG7rywgxJHhu5NuZyB0aOG7nWkga2hhaSB0aMOhYyB0aMOqbSB0aeG7gW0gbsSDbmcgdOG7qyBuaMOzbSBraMOhY2ggaMOgbmcgbmFtLg0KDQoqKkJp4bq/biBNYXJpdGFsU3RhdHVzKioNCg0KYGBge3J9DQp0YWJsZShkJCBNYXJpdGFsU3RhdHVzKSAlPiUgYXMuZGF0YS5mcmFtZSgpIC0+bw0KY29sbmFtZXMobyk8LWMoInZhbHVlIiwiY291bnQiKQ0Kbw0KYGBgDQpgYGB7cn0NCmdncGxvdChvLCBhZXMoeCA9IHZhbHVlLCB5ID0gY291bnQsIGZpbGwgPSB2YWx1ZSkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvdW50KSwgdmp1c3QgPSAtMC4zLCBzaXplID0gMy41KSArDQogIGxhYnModGl0bGUgPSAiQmnhu4N1IMSR4buTIGPhu5l0IiwgeCA9ICJNYXJpdGFsU3RhdHVzIiwgeSA9ICJT4buRIGzGsOG7o25nIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQoNClF1YSBiaeG7g3UgxJHhu5MgdHLDqm4gdGEgdGjhuqV5IHBow6JuIGLhu5EgYmnhur9uIE1hcml0YWxTdGF0dXMgKFTDrG5oIHRy4bqhbmcgaMO0biBuaMOibikgY+G7p2Ega2jDoWNoIGjDoG5nLCBn4buTbSBoYWkgbmjDs20gbMOgIMSRw6Mga+G6v3QgaMO0biAoTWFycmllZCAtIE0pIHbDoCDEkeG7mWMgdGjDom4gKFNpbmdsZSAtIFMpLiBL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IHPhu5EgbMaw4bujbmcga2jDoWNoIGjDoG5nIMSR4buZYyB0aMOibiBjYW8gaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBraMOhY2ggaMOgbmcgxJHDoyBr4bq/dCBow7RuLCB24bubaSA3MTkzIG5nxrDhu51pIMSR4buZYyB0aMOibiBzbyB24bubaSA2ODY2IG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0bi4gU+G7sSBjaMOqbmggbOG7h2NoIGtow7RuZyBs4bubbiBuaMawbmcgcGjhuqduIG7DoG8gcGjhuqNuIMOhbmggeHUgaMaw4bubbmcgbmfGsOG7nWkgxJHhu5ljIHRow6JuIGPDsyB0aOG7gyBtdWEgc+G6r20gdGjGsOG7nW5nIHh1ecOqbiBoxqFuIGhv4bq3YyBsaW5oIGhv4bqhdCBoxqFuIHRyb25nIGjDoG5oIHZpIHRpw6p1IGTDuW5nLiBUaMO0bmcgdGluIG7DoHkgY8OzIHRo4buDIGjhu691IMOtY2ggY2hvIHZp4buHYyB4w6J5IGThu7FuZyBjaGnhur9uIGzGsOG7o2MgdGnhur9wIHRo4buLIHBow7kgaOG7o3AgduG7m2kgdOG7q25nIG5ow7NtIGtow6FjaCBow6BuZyBk4buxYSB0csOqbiB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4uDQoNCioqQmnhur9uIEhvbWVvd25lcioqDQoNCmBgYHtyfQ0KcHJvcC50YWJsZSh0YWJsZShkJEhvbWVvd25lKSkgJT4lIGFkZG1hcmdpbnMoKQ0KIyBUw61uaCB04bu3IGzhu4cgcGjhuqduIHRyxINtDQpjMiA8LSBwcm9wLnRhYmxlKHRhYmxlKGQkSG9tZW93bmUpKSAqIDEwMA0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuDQpwaWUoYzIsDQogICAgbGFiZWxzID0gcGFzdGUobmFtZXMoYzIpLCByb3VuZChjMiwgMiksICIlIiksDQogICAgbWFpbiA9ICJU4bu3IGzhu4cgSG9tZW93bmUiKQ0KYGBgDQoNCkJp4buDdSDEkeG7kyB0csOqbiB0aOG7gyBoaeG7h24gdOG7tyBs4buHIGJp4bq/biBIb21lb3duZXIgKENo4bunIHPhu58gaOG7r3UgbmjDoCkgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UsIGfhu5NtIGhhaSBuaMOzbTogWSAoWWVzIC0gQ8OzIHPhu58gaOG7r3UgbmjDoCkgY2hp4bq/bSA2MC4wNiUsIE4gKE5vIC0gS2jDtG5nIHPhu58gaOG7r3UgbmjDoCkgY2hp4bq/bSAzOS45NCUuICBOaMawIHbhuq15LCBwaOG6p24gbOG7m24ga2jDoWNoIGjDoG5nIHRyb25nIGThu68gbGnhu4d1IGzDoCBuZ8aw4budaSBjw7Mgc+G7nyBo4buvdSBuaMOgLiDEkGnhu4F1IG7DoHkgY8OzIHRo4buDIHBo4bqjbiDDoW5oIMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYyBj4bunYSB04buHcCBraMOhY2ggaMOgbmcsIGNo4bqzbmcgaOG6oW4gbmjGsCBt4bupYyDEkeG7mSDhu5VuIMSR4buLbmggdMOgaSBjaMOtbmggaG/hurdjIMSR4buZIHR14buVaSB0csaw4bufbmcgdGjDoG5oIGNhbyBoxqFuLiBT4bufIGjhu691IG5ow6AgdGjGsOG7nW5nIGxpw6puIHF1YW4gxJHhur9uIG5o4buvbmcgbmfGsOG7nWkgY8OzIHRodSBuaOG6rXAg4buVbiDEkeG7i25oLCBjw7MgdGjhu4MgY2hpIHRpw6p1IG5oaeG7gXUgaMahbiB0cm9uZyBtdWEgc+G6r20sIGRvIMSRw7MgxJHDonkgbMOgIG3hu5l0IHnhur91IHThu5EgcXVhbiB0cuG7jW5nIMSR4buDIGRvYW5oIG5naGnhu4dwIGPDom4gbmjhuq9jIHRyb25nIHZp4buHYyBwaMOibiBraMO6YyB2w6AgdGnhur9wIGPhuq1uIGtow6FjaCBow6BuZy4gVmnhu4djIHBow6JuIHTDrWNoIHRoZW8gYmnhur9uIG7DoHkgY8WpbmcgY8OzIHRo4buDIGvhur90IGjhu6NwIHbhu5tpIGPDoWMgeeG6v3UgdOG7kSBraMOhYyBuaMawIGdp4bubaSB0w61uaCwgxJHhu5kgdHXhu5VpIGhv4bq3YyB0aHUgbmjhuq1wIMSR4buDIGhp4buDdSByw7UgaMahbiB24buBIGjDoG5oIHZpIHRpw6p1IGTDuW5nLg0KDQoNCioqQmnhur9uIEFubnVhbEluY29tZSoqDQoNCmBgYHtyfQ0KYzIgPC0gZCB8Pg0KICBncm91cF9ieShBbm51YWxJbmNvbWUpIHw+DQogIHN1bW1hcmlzZShmcmVxID0gbigpKSB8Pg0KICBtdXRhdGUocGVyID0gZnJlcSAvIHN1bShmcmVxKSwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKGZyZXEsICIgKCIsIHJvdW5kKHBlciAqIDEwMCwgMSksICIlKSIpKQ0KDQpnZ3Bsb3QoYzIsIGFlcyh4ID0gIiIsIHkgPSBwZXIsIGZpbGwgPSBBbm51YWxJbmNvbWUpKSArDQogIGdlb21fY29sKHdpZHRoID0gMSwgY29sb3IgPSAid2hpdGUiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBzaXplID0gNCkgKw0KICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDMiKSArICAjIELhuqFuIGPDsyB0aOG7gyBjaOG7jW4gU2V0MSwgU2V0Mi4uLg0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyBBbm51YWxJbmNvbWUiLCBmaWxsID0gIlRodSBuaOG6rXAiKSArDQogIHRoZW1lX3ZvaWQoKQ0KYGBgDQoNCkJp4buDdSDEkeG7kyB0csOqbiBsw6AgYmnhu4N1IMSR4buTIHRyw7JuIHRo4buDIGhp4buHbiB04bu3IGzhu4cgcGjDom4gYuG7kSB0aGVvIG3hu6ljIHRodSBuaOG6rXAgaMOgbmcgbsSDbSAoQW5udWFsSW5jb21lKSBj4bunYSBraMOhY2ggaMOgbmcgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBTdXBlcm1hcmtldCBUcmFuc2FjdGlvbnMuIEJp4buDdSDEkeG7kyBjaGlhIGtow6FjaCBow6BuZyB0aMOgbmggY8OhYyBuaMOzbSB0aHUgbmjhuq1wIHThu6sgMTBLIMSRw7QgxJHhur9uIHRyw6puIDE1MEsgxJHDtCwgxJHGsOG7o2MgbcOjIGjDs2EgYuG6sW5nIGPDoWMgc+G6r2MgxJHhu5kgeGFuaCBraMOhYyBuaGF1LiBOaMOzbSB0aHUgbmjhuq1wIHThu6sgMzBLIMSRw7QgLSA1MEsgxJHDtCBjaGnhur9tIHThu7cgbOG7hyBs4bubbiBuaOG6pXQsIGNobyB0aOG6pXkgcGjhuqduIGzhu5tuIGtow6FjaCBow6BuZyBjw7MgdGh1IG5o4bqtcCB0cnVuZyBiw6xuaC4gQ8OhYyBuaMOzbSB0aHUgbmjhuq1wIGNhbyBoxqFuICgkMTEwSyB0cuG7nyBsw6puKSBjaGnhur9tIHThu7cgbOG7hyBuaOG7jyBoxqFuLCBwaOG6o24gw6FuaCBy4bqxbmcgc2nDqnUgdGjhu4sgY2jhu6cgeeG6v3UgcGjhu6VjIHbhu6UgxJHhu5FpIHTGsOG7o25nIGPDsyB0aHUgbmjhuq1wIHRydW5nIGLDrG5oIHbDoCB0cnVuZyBiw6xuaCDigJMgdGjhuqVwLiBCaeG7g3UgxJHhu5MgZ2nDunAgdGEgaMOsbmggZHVuZyByw7UgcsOgbmcgduG7gSBjxqEgY+G6pXUgdGh1IG5o4bqtcCBj4bunYSBraMOhY2ggaMOgbmcgdHJvbmcgZOG7ryBsaeG7h3UuDQoNCioqQmnhur9uIENpdHkqKg0KYGBge3J9DQp0YWJsZShkJENpdHkpICU+JSBhcy5kYXRhLmZyYW1lKCkgLT5vMg0KY29sbmFtZXMobzIpPC1jKCJ2YWx1ZSIsImNvdW50IikNCm8yDQpgYGANCmBgYHtyfQ0KDQoNCmdncGxvdChvMiwgYWVzKHggPSB2YWx1ZSwgeSA9IGNvdW50LCBmaWxsID0gdmFsdWUpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb3VudCksIHZqdXN0ID0gLTAuMywgc2l6ZSA9IDEuNSkgKw0KICBsYWJzKHRpdGxlID0gIkJp4buDdSDEkeG7kyBj4buZdCIsIHggPSAiQ2l0eSIsIHkgPSAiU+G7kSBsxrDhu6NuZyIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KQmnhu4N1IMSR4buTIGPhu5l0IHRyw6puIHRo4buDIGhp4buHbiBz4buRIGzGsOG7o25nIGdpYW8gZOG7i2NoIHRoZW8gdOG7q25nIHRow6BuaCBwaOG7kSB0cm9uZyBi4buZIGThu68gbGnhu4d1IFN1cGVybWFya2V0IFRyYW5zYWN0aW9ucy4gVHJvbmcgxJHDsywgU2FsZW0gKDEuMzk4IGdpYW8gZOG7i2NoKSB2w6AgVGFjb21hICgxLjI1NyBnaWFvIGThu4tjaCkgbMOgIGhhaSB0aMOgbmggcGjhu5EgY8OzIHPhu5EgbMaw4bujbmcgZ2lhbyBk4buLY2ggY2FvIG5o4bqldCwgY2hvIHRo4bqleSDEkcOieSBsw6Agbmjhu69uZyB0aOG7iyB0csaw4budbmcgdHLhu41uZyDEkWnhu4NtIHbhu5tpIGhv4bqhdCDEkeG7mW5nIG11YSBz4bqvbSBzw7RpIMSR4buZbmcuIE3hu5l0IHPhu5EgdGjDoG5oIHBo4buRIGtow6FjIG5oxrAgR3VhZGFsYWphcmEsIFNlYXR0bGUsIFNhbiBEaWVnbywgU2FuIEFuZHJlcyB2w6AgU3Bva2FuZSBjxaluZyBjw7Mgc+G7kSBsxrDhu6NuZyBnaWFvIGThu4tjaCBraMOhIGNhbywgcGjhuqNuIMOhbmggbeG7qWMgxJHhu5kgdGnDqnUgZMO5bmcg4buVbiDEkeG7i25oLiBOZ8aw4bujYyBs4bqhaSwgY8OhYyB0aMOgbmggcGjhu5EgbmjGsCBDYW1hY2hvLCBIaWRhbGdvLCBTYW4gRnJhbmNpc2NvIHbDoCBWaWN0b3JpYSBjw7Mgc+G7kSBsxrDhu6NuZyBnaWFvIGThu4tjaCB0aOG6pXAgaMahbiDEkcOhbmcga+G7gywgZG8gcXV5IG3DtCBuaOG7jyBob+G6t2MgbeG7qWMgxJHhu5kgaG/huqF0IMSR4buZbmcgdGjGsMahbmcgbeG6oWkgdGjhuqVwIGjGoW4uIEJp4buDdSDEkeG7kyBuw6B5IGdpw7pwIG5o4bqtbiBkaeG7h24gcsO1IHPhu7EgY2jDqm5oIGzhu4djaCBnaeG7r2EgY8OhYyBraHUgduG7sWMgdsOgIGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBwaMOibiB0w61jaCB0aeG7gW0gbsSDbmcgdGjhu4sgdHLGsOG7nW5nLCBo4buXIHRy4bujIHF1eeG6v3QgxJHhu4tuaCBt4bufIHLhu5luZyBob+G6t2MgxJFp4buBdSBjaOG7iW5oIGNoaeG6v24gbMaw4bujYyBraW5oIGRvYW5oIHRoZW8gdOG7q25nIMSR4buLYSBwaMawxqFuZy4NCg0KKipCaeG6v24gU3RhdGVvclByb3ZpbmNlKioNCmBgYHtyfQ0KYzQgPC0gdGFibGUoZCRTdGF0ZW9yUHJvdmluY2UpDQpjNCA8LSBkIHw+IGdyb3VwX2J5KFN0YXRlb3JQcm92aW5jZSkgfD4gc3VtbWFyaXNlKGZyZXEgPSBuKCkpIHw+IG11dGF0ZShjNCwgcGVyID0gZnJlcS9zdW0oZnJlcSkpDQpjNCB8PiBnZ3Bsb3QoYWVzKHggPSAiIiwgeSA9IHBlciwgZmlsbCA9IFN0YXRlb3JQcm92aW5jZSkpICsgZ2VvbV9jb2woKSArIGNvb3JkX3BvbGFyKCd5JykNCmBgYA0KDQpCaeG7g3UgxJHhu5MgdHLDsm4gdGjhu4MgaGnhu4duIGJp4bq/biBTdGF0ZW9yUHJvdmluY2UgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBTdXBlcm1hcmtldCBUcmFuc2FjdGlvbnMgY2hvIHRo4bqleSBz4buxIHBow6JuIGLhu5EgdOG6p24gc3XhuqV0IGdpYW8gZOG7i2NoIHNpw6p1IHRo4buLIHRoZW8gdOG7q25nIGJhbmcgaG/hurdjIHThu4luaC4gVHJvbmcgxJHDsywgY8OhYyBiYW5nIG5oxrAgV0EgKFdhc2hpbmd0b24pIHbDoCBDQSAoQ2FsaWZvcm5pYSkgY2hp4bq/bSB04bu3IHRy4buNbmcgbOG7m24gbmjhuqV0LCBjaG8gdGjhuqV5IMSRw6J5IGzDoCBoYWkga2h1IHbhu7FjIGPDsyBob+G6oXQgxJHhu5luZyBnaWFvIGThu4tjaCBzw7RpIMSR4buZbmcgaMahbiwgY8OzIHRo4buDIGRvIGTDom4gc+G7kSDEkcO0bmcgaG/hurdjIHPhu7EgaGnhu4duIGRp4buHbiBj4bunYSBuaGnhu4F1IHNpw6p1IHRo4buLLiBOZ8aw4bujYyBs4bqhaSwgY8OhYyB04buJbmggbmjGsCBHdWVycmVybywgREYgKERpc3RyaXRvIEZlZGVyYWwpIHbDoCBKYWxpc2NvIGNoaeG6v20gdOG7tyBs4buHIG5o4buPIGjGoW4sIHBo4bqjbiDDoW5oIHPhu5EgbMaw4bujbmcgZ2lhbyBk4buLY2ggw610IGjGoW4gdOG6oWkgY8OhYyBraHUgduG7sWMgbsOgeS4gU+G7sSBjaMOqbmggbOG7h2NoIG7DoHkgY8OzIHRo4buDIHBo4bqjbiDDoW5oIHPhu7Ega2jDoWMgYmnhu4d0IHbhu4EgcXV5IG3DtCB0aOG7iyB0csaw4budbmcsIG5odSBj4bqndSB0acOqdSBkw7luZyBob+G6t2MgbeG7qWMgxJHhu5kgaGnhu4duIGRp4buHbiBj4bunYSBo4buHIHRo4buRbmcgc2nDqnUgdGjhu4sgdHJvbmcgdOG7q25nIHbDuW5nLiBCaeG7g3UgxJHhu5MgZ2nDunAgbmjhuq1uIGRp4buHbiByw7UgY8OhYyBraHUgduG7sWMgdHLhu41uZyDEkWnhu4NtIHRyb25nIGhv4bqhdCDEkeG7mW5nIGLDoW4gbOG6uyBzacOqdSB0aOG7iyB2w6AgY8OzIHRo4buDIGjhu5cgdHLhu6MgY2hvIGPDoWMgcXV54bq/dCDEkeG7i25oIGtpbmggZG9hbmggaG/hurdjIHBow6JuIGLhu5Ugbmd14buTbiBs4buxYy4NCg0KKipCaeG6v24gQ291bnRyeSoqDQoNCmBgYHtyfQ0KYzUgPC0gZA0KYzUgPC0gdGFibGUoZCRDb3VudHJ5KQ0KYzUgPC0gZCB8PiBncm91cF9ieShDb3VudHJ5KSB8PiBzdW1tYXJpc2UoZnJlcSA9IG4oKSkgfD4gbXV0YXRlKGM1LCBwZXIgPSBmcmVxL3N1bShmcmVxKSkNCmM1IHw+IGdncGxvdChhZXMoeCA9ICIiLCB5ID0gcGVyLCBmaWxsID0gQ291bnRyeSkpICsgZ2VvbV9jb2woKSArIGNvb3JkX3BvbGFyKCd5JykNCmBgYA0KDQpCaeG7g3UgxJHhu5MgdHLDqm4gdGjhu4MgaGnhu4duIHThu7cgbOG7hyBwaMOibiBi4buRIHRoZW8gcXXhu5FjIGdpYSB0cm9uZyBi4buZIGThu68gbGnhu4d1IHbhu5tpIGJhIHF14buRYyBnaWEgZ+G7k20gQ2FuYWRhLCBNZXhpY28gdsOgIFVTQS4gUXVhbiBzw6F0IGJp4buDdSDEkeG7kywgY8OzIHRo4buDIHRo4bqleSBVU0EgY2hp4bq/bSB04bu3IGzhu4cgbOG7m24gbmjhuqV0LCBjaGnhur9tIGjGoW4gbeG7mXQgbuG7rWEgdOG7lW5nIHPhu5EsIHRo4buDIGhp4buHbiDEkcOieSBsw6AgdGjhu4sgdHLGsOG7nW5nIGNo4bunIHnhur91IHRyb25nIGThu68gbGnhu4d1LiBNZXhpY28gxJHhu6luZyB0aOG7qSBoYWkgduG7m2kgdOG7tyBs4buHIMSRw6FuZyBr4buDIG5oxrBuZyBuaOG7jyBoxqFuIFVTQSwgdHJvbmcga2hpIENhbmFkYSBjaGnhur9tIHThu7cgbOG7hyB0aOG6pXAgbmjhuqV0LCBjaOG7iSBjaGnhur9tIG3hu5l0IHBo4bqnbiBy4bqldCBuaOG7jy4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgaG/huqF0IMSR4buZbmcgaG/hurdjIGThu68gbGnhu4d1IHRodSB0aOG6rXAgdOG7qyBVU0EgbMOgIGNo4bunIHnhur91LCB0cm9uZyBraGkgQ2FuYWRhIGNo4buJIMSRw7NuZyB2YWkgdHLDsiBwaOG7pSB0cm9uZyB04buVbmcgdGjhu4MgZOG7ryBsaeG7h3UuDQoNCioqQmnhur9uIFByb2R1Y3RGYW1pbHkqKg0KDQpgYGB7cn0NCnByb3AudGFibGUodGFibGUoZCRQcm9kdWN0RmFtaWx5KSkgJT4lIGFkZG1hcmdpbnMoKQ0KIyBUw61uaCB04bu3IGzhu4cgcGjhuqduIHRyxINtDQpjNSA8LSBwcm9wLnRhYmxlKHRhYmxlKGQkUHJvZHVjdEZhbWlseSkpICogMTAwDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgdHLDsm4NCnBpZShjNSwNCiAgICBsYWJlbHMgPSBwYXN0ZShuYW1lcyhjNSksIHJvdW5kKGM1LCAyKSwgIiUiKSwNCiAgICBtYWluID0gIlThu7cgbOG7hyBQcm9kdWN0RmFtaWx5IikNCmBgYA0KDQpCaeG7g3UgxJHhu5MgdHLDqm4gdGjhu4MgaGnhu4duIHThu7cgbOG7hyBjw6FjIG5ow7NtIHPhuqNuIHBo4bqpbSB0cm9uZyBi4buZIGThu68gbGnhu4d1IFN1cGVybWFya2V0IFRyYW5zYWN0aW9ucywgYmFvIGfhu5NtIEZvb2QgKFRo4buxYyBwaOG6qW0pLCBEcmluayAoxJDhu5MgdeG7kW5nKSB2w6AgTm9uLUNvbnN1bWFibGUgKEtow7RuZyB0acOqdSBkw7luZykuIEvhur90IHF14bqjIGNobyB0aOG6pXkgbmjDs20gc+G6o24gcGjhuqltIHRo4buxYyBwaOG6qW0gY2hp4bq/bSB04bu3IGzhu4cgY2FvIG5o4bqldCB24bubaSA3Mi4yMiUsIGNobyB0aOG6pXkgxJHDonkgbMOgIG3hurd0IGjDoG5nIGNo4bunIGzhu7FjIMSRxrDhu6NjIHRpw6p1IHRo4bulIG5oaeG7gXUgbmjhuqV0IHThuqFpIHNpw6p1IHRo4buLLiBOaMOzbSBz4bqjbiBwaOG6qW0ga2jDtG5nIHRpw6p1IGTDuW5nIGNoaeG6v20gMTguODklLCDEkeG7qW5nIHRo4bupIGhhaSB24buBIHThu7cgdHLhu41uZyB2w6AgY8OzIHRo4buDIGJhbyBn4buTbSBjw6FjIG3hurd0IGjDoG5nIG5oxrAgxJHhu5MgZ2lhIGThu6VuZyBob+G6t2MgdsSDbiBwaMOybmcgcGjhuqltLiBOaMOzbSDEkeG7kyB14buRbmcgY2hp4bq/bSB04bu3IGzhu4cgdGjhuqVwIG5o4bqldCB24bubaSA4Ljg5JSwgcGjhuqNuIMOhbmggbeG7qWMgdGnDqnUgdGjhu6UgaG/hurdjIHPhu7EgxrB1IHRpw6puIHBow6JuIHBo4buRaSBjaMawYSBjYW8uIEPGoSBj4bqldSBuw6B5IGNobyB0aOG6pXkgc2nDqnUgdGjhu4sgxJFhbmcgdOG6rXAgdHJ1bmcgbeG6oW5oIHbDoG8gY8OhYyBt4bq3dCBow6BuZyB0aGnhur90IHnhur91LCDEkeG6t2MgYmnhu4d0IGzDoCB0aOG7sWMgcGjhuqltLCB2w6AgxJHDonkgY8OzIHRo4buDIGzDoCBjxqEgc+G7nyDEkeG7gyDEkWnhu4F1IGNo4buJbmggY2hp4bq/biBsxrDhu6NjIGtpbmggZG9hbmggaG/hurdjIG3hu58gcuG7mW5nIGRhbmggbeG7pWMgc+G6o24gcGjhuqltIHRyb25nIHTGsMahbmcgbGFpLg0KDQoqKkJp4bq/biBQcm9kdWN0RGVwYXJ0bWVudCoqDQoNCioqKlThuqduIHPhu5EqKioNCg0KYGBge3J9DQp0YWJsZShkJFByb2R1Y3REZXBhcnRtZW50KQ0KYGBgDQoqKipU4bqnbiBzdeG6pXQqKioNCmBgYHtyfQ0KdGFibGUoZCRQcm9kdWN0RGVwYXJ0bWVudCkvc3VtKHRhYmxlKGQkUHJvZHVjdERlcGFydG1lbnQpKQ0KYGBgDQoNCkThu7FhIHRyw6puIHBow6JuIHTDrWNoIHThu7cgbOG7hyBjw6FjIGRhbmggbeG7pWMgc+G6o24gcGjhuqltIMSRxrDhu6NjIGdpYW8gZOG7i2NoIHThuqFpIHNpw6p1IHRo4buLLCB0YSB0aOG6pXkgUHJvZHVjZSAoUmF1IGPhu6cgcXXhuqMgdMawxqFpKSBjaGnhur9tIHThu7cgdHLhu41uZyBjYW8gbmjhuqV0IHbhu5tpIDE0LjE4JSwgY2hvIHRo4bqleSDEkcOieSBsw6AgbmjDs20gaMOgbmcgxJHGsOG7o2MgbXVhIG5oaeG7gXUgbmjhuqV0LCBwaMO5IGjhu6NwIHbhu5tpIG5odSBj4bqndSB0acOqdSBkw7luZyBow6BuZyBuZ8OgeS4gVGnhur9wIHRoZW8gbMOgIFNuYWNrIEZvb2RzICjEkOG7kyDEg24gduG6t3QpIHbhu5tpIDExLjM4JSB2w6AgSG91c2Vob2xkICjEkOG7kyBkw7luZyBnaWEgxJHDrG5oKSBjaGnhur9tIDEwLjEwJSwgcGjhuqNuIMOhbmggbmh1IGPhuqd1IGNhbyB24bubaSBjw6FjIG3hurd0IGjDoG5nIHRp4buHbiBs4bujaSB2w6AgdGhp4bq/dCB54bq/dSBjaG8gc2luaCBob+G6oXQuIE3hu5l0IHPhu5EgbmjDs20ga2jDoWMgY8WpbmcgY8OzIHThu7cgbOG7hyDEkcOhbmcga+G7gyBuaMawIEZyb3plbiBGb29kcyAoxJDhu5MgxJHDtG5nIGzhuqFuaCkgY2hp4bq/bSA5LjgzJSwgQ2FubmVkIEZvb2RzICjEkOG7kyBo4buZcCkgduG7m2kgNi45NSUsIHbDoCBEYWlyeSAoU+G6o24gcGjhuqltIHThu6sgc+G7r2EpIGtob+G6o25nIDYuNDIlLiBOZ8aw4bujYyBs4bqhaSwgY8OhYyBuaMOzbSBjw7MgdOG7tyBs4buHIHRo4bqlcCBuaMawIENhcm91c2VsICgwLjQyJSksIE1lYXQgKFRo4buLdCkgKDAuNjMlKSwgU2VhZm9vZCAoSOG6o2kgc+G6o24pICgwLjczJSksIHbDoCBDYW5uZWQgUHJvZHVjdHMgKDAuNzglKSBjaG8gdGjhuqV5IGNow7puZyDDrXQgxJHGsOG7o2MgbOG7sWEgY2jhu41uIGjGoW4gaG/hurdjIGzDoCBuaOG7r25nIG3hurd0IGjDoG5nIGPDsyB04bqnbiBzdeG6pXQgbXVhIHPhuq9tIHRo4bqlcCBoxqFuLiDEkGnhu4F1IG7DoHkgcGjhuqNuIMOhbmggdGjDs2kgcXVlbiB0acOqdSBkw7luZyBoxrDhu5tuZyDEkeG6v24gc+G7sSB0aeG7h24gbOG7o2ksIGLhuqNvIHF14bqjbiBsw6J1IHbDoCBk4buFIHPhu60gZOG7pW5nIHRyb25nIG5ow7NtIGtow6FjaCBow6BuZyBj4bunYSBzacOqdSB0aOG7iy4NCg0KKipCaeG6v24gUHJvZHVjdENhdGVnb3J5KioNCg0KKioqVOG6p24gc+G7kSoqKg0KDQpgYGB7cn0NCnRhYmxlKGQkUHJvZHVjdENhdGVnb3J5KQ0KYGBgDQoNCioqKlThuqduIHN14bqldCoqKg0KYGBge3J9DQp0YWJsZShkJFByb2R1Y3RDYXRlZ29yeSkvc3VtKHRhYmxlKGQkUHJvZHVjdENhdGVnb3J5KSkNCmBgYA0KDQpE4buxYSB0csOqbiB04bu3IGzhu4cgcGjDom4gYuG7kSBjw6FjIGRhbmggbeG7pWMgc+G6o24gcGjhuqltLCBjw7MgdGjhu4MgdGjhuqV5IGtow6FjaCBow6BuZyBjw7MgeHUgaMaw4bubbmcgY2hpIHRpw6p1IG5oaeG7gXUgbmjhuqV0IGNobyBjw6FjIG3hurd0IGjDoG5nIHRoaeG6v3QgeeG6v3UgdsOgIHBo4buVIGJp4bq/biBuaMawIHJhdSBj4bunIHF14bqjICgxNC4xOCUpLCByYXUgKDEyLjI5JSkgdsOgIMSR4buTIMSDbiB24bq3dCAoMTEuMzglKS4gxJBp4buBdSBuw6B5IHBo4bqjbiDDoW5oIG5odSBj4bqndSBjYW8gxJHhu5FpIHbhu5tpIHRo4buxYyBwaOG6qW0gdMawxqFpIHPhu5FuZyB2w6AgY8OhYyBz4bqjbiBwaOG6qW0gdGnhu4duIGzhu6NpIHRyb25nIHRpw6p1IGTDuW5nIGjhurFuZyBuZ8OgeS4gTmdvw6BpIHJhLCBjw6FjIG5ow7NtIG5oxrAgdGjhu7FjIHBo4bqpbSDEkcO0bmcgbOG6oW5oICg5LjgzJSksIMSR4buTIGTDuW5nIGdpYSDEkcOsbmggKDEwLjEwJSkgdsOgIG5ndXnDqm4gbGnhu4d1IGzDoG0gYsOhbmggKDcuNjMlKSBjxaluZyBjaGnhur9tIHThu7cgdHLhu41uZyDEkcOhbmcga+G7gy4gVHJvbmcga2hpIMSRw7MsIGPDoWMgZGFuaCBt4bulYyBuaMawIMSR4buTIGjhu5lwIMSR4bq3YyBiaeG7h3QsIHPhuqNuIHBo4bqpbSBjaMSDbSBzw7NjIHPhu6ljIGto4buPZSB2w6AgY8OhYyBt4bq3dCBow6BuZyDDrXQgcGjhu5UgYmnhur9uICh2w60gZOG7pTogbuG6v24sIHPhuqNuIHBo4bqpbSBjYXJvdXNlbCwgc+G6o24gcGjhuqltIMSRw7NuZyBo4buZcCBo4bqjaSBz4bqjbikgY8OzIHThu7cgbOG7hyB0acOqdSB0aOG7pSBy4bqldCB0aOG6pXAgKGTGsOG7m2kgMSUpLiBOaMOsbiBjaHVuZywgdGjDs2kgcXVlbiB0acOqdSBkw7luZyB04bqtcCB0cnVuZyBt4bqhbmggdsOgbyBuaHUgeeG6v3UgcGjhuqltIHbDoCB0aOG7sWMgcGjhuqltIGThu4UgY2jhur8gYmnhur9uLCB0cm9uZyBraGkgY8OhYyBz4bqjbiBwaOG6qW0gxJHhurdjIHRow7kgaG/hurdjIMOtdCBz4butIGThu6VuZyBjaOG7iSBjaGnhur9tIG3hu5l0IHBo4bqnbiBuaOG7jyB0cm9uZyBjxqEgY+G6pXUgdGnDqnUgZMO5bmcuDQoNCg0K