├── data ├── __init__.py ├── pmf-map-d5 │ ├── shapes.json │ └── V.txt ├── 6bb8d06c69c0666e6da14c094d4320d115f1ffc8 │ └── shapes.json ├── HtWt.csv ├── Guber1999data.txt └── test_scores.csv ├── fig ├── bda.jpg ├── doing.jpg ├── fig1.png ├── fig2.png ├── fig3.png ├── fig4.png ├── infer.png ├── infer2.png ├── monte1.jpg ├── monte1.png ├── robert.jpg ├── toyoda.jpg └── distrib.png ├── doc ├── 2008amstat.pdf └── ._2008amstat.pdf ├── qa.md ├── probprog0.ipynb ├── coin_pymc.ipynb ├── coin_pystan.ipynb ├── linreg_pystan.ipynb └── probprog2.ipynb /data/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/pmf-map-d5/shapes.json: -------------------------------------------------------------------------------- 1 | {"U":[1000,5],"V":[100,5]} -------------------------------------------------------------------------------- /fig/bda.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/bda.jpg -------------------------------------------------------------------------------- /fig/doing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/doing.jpg -------------------------------------------------------------------------------- /fig/fig1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/fig1.png -------------------------------------------------------------------------------- /fig/fig2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/fig2.png -------------------------------------------------------------------------------- /fig/fig3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/fig3.png -------------------------------------------------------------------------------- /fig/fig4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/fig4.png -------------------------------------------------------------------------------- /fig/infer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/infer.png -------------------------------------------------------------------------------- /fig/infer2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/infer2.png -------------------------------------------------------------------------------- /fig/monte1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/monte1.jpg -------------------------------------------------------------------------------- /fig/monte1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/monte1.png -------------------------------------------------------------------------------- /fig/robert.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/robert.jpg -------------------------------------------------------------------------------- /fig/toyoda.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/toyoda.jpg -------------------------------------------------------------------------------- /fig/distrib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/fig/distrib.png -------------------------------------------------------------------------------- /doc/2008amstat.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/doc/2008amstat.pdf -------------------------------------------------------------------------------- /doc/._2008amstat.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bakfoo/pyconjp/HEAD/doc/._2008amstat.pdf -------------------------------------------------------------------------------- /data/6bb8d06c69c0666e6da14c094d4320d115f1ffc8/shapes.json: -------------------------------------------------------------------------------- 1 | {"test":[1000,100],"train":[1000,100]} -------------------------------------------------------------------------------- /data/HtWt.csv: -------------------------------------------------------------------------------- 1 | male,height,weight 2 | 0,63.2,168.7 3 | 0,68.7,169.8 4 | 0,64.8,176.6 5 | 0,67.9,246.8 6 | 1,68.9,151.6 7 | 1,67.8,158.0 8 | 1,68.2,168.6 9 | 0,64.8,137.2 10 | 1,64.3,177.0 11 | 0,64.7,128.0 12 | 1,66.9,168.4 13 | 1,66.9,136.2 14 | 1,67.1,160.3 15 | 1,70.2,233.9 16 | 1,67.4,171.7 17 | 1,71.1,185.5 18 | 0,63.4,177.6 19 | 1,66.9,132.9 20 | 0,71.0,140.1 21 | 1,70.4,151.9 22 | 0,59.5,147.2 23 | 1,70.4,159.0 24 | 0,61.5,113.0 25 | 1,74.5,194.5 26 | 0,65.3,145.1 27 | 1,68.8,196.5 28 | 0,67.2,148.9 29 | 1,68.7,132.9 30 | 0,60.0,168.4 31 | 0,62.5,146.2 32 | 1,72.0,236.4 33 | 1,67.9,140.0 34 | 1,65.1,156.2 35 | 1,63.5,178.7 36 | 1,68.2,147.5 37 | 0,64.6,97.7 38 | 1,68.1,189.6 39 | 0,66.2,221.9 40 | 0,62.8,168.1 41 | 0,65.3,143.1 42 | 0,65.8,217.7 43 | 0,68.7,133.2 44 | 0,63.8,96.5 45 | 1,70.6,270.6 46 | 0,61.5,137.2 47 | 0,61.9,124.2 48 | 0,65.1,128.3 49 | 1,68.7,203.6 50 | 0,57.6,132.4 51 | 1,66.3,189.4 52 | 1,69.0,174.0 53 | 0,63.4,163.3 54 | 1,69.5,183.5 55 | 1,67.8,193.8 56 | 0,61.6,119.7 57 | 1,71.2,157.4 58 | 1,67.4,146.1 59 | 0,66.1,128.3 60 | 1,70.7,179.1 61 | 0,67.0,140.0 62 | 1,66.8,202.2 63 | 1,69.9,169.4 64 | 0,57.7,122.8 65 | 0,62.5,248.5 66 | 1,66.6,154.4 67 | 0,60.6,140.2 68 | 1,70.4,141.6 69 | 0,66.4,144.4 70 | 0,62.3,116.2 71 | 1,73.3,175.0 72 | -------------------------------------------------------------------------------- /qa.md: -------------------------------------------------------------------------------- 1 | # 「エンジニアのためのベイズ推定入門」質問回答 2 | 3 | ## 1. pystanのStanコードに日本語コメント 4 | 5 | 講習中に,probprog3.ipynbにおいて,以下のようにpystanのStanコードに日本語コメント入れておりました. 6 | 7 | ```` 8 | coin_code = """ 9 | //並びが重要 10 | 11 | // 12 | 13 | // カスタマイズ関数の定義 14 | function{} 15 | 16 | // stanに渡すデータを宣言する 17 | data { 18 | int n; // number of tosses 19 | int y; // number of heads 20 | } 21 | 22 | // stanに渡したデータの加工を指示 23 | transformed data {} 24 | 25 | // 推定するパラメータを宣言 26 | parameters { 27 | real p; 28 | } 29 | 30 | // パラメータを加工したい場合はここで指示 31 | transformed parameters {} 32 | 33 | // [必須] 事前確率,尤度をモデリング 34 | model { 35 | p ~ beta(2, 2); 36 | y ~ binomial(n, p); 37 | } 38 | 39 | // 事後分布からのサンプリングを加工 40 | generated quantities {} 41 | """ 42 | 43 | ```` 44 | 45 | しかし,このコードのままでは,asciiエラーが出てしまい,実行できません. 46 | 47 | これは,pystanの仕様で,stanにコードを渡すとき(C++によるビルドをするため)に強制的にasciiに文字コード変換してしまうためです.日本語のコメントがあるとこのときにasciiエラーになります.従いまして,pystanでは,stanコードに日本語を使うことができません.大変失礼いたしました. 48 | 49 | こちらは,GitHubのリポジトリのほうは修正しておきました. 50 | 51 | https://github.com/bakfoo/pyconjp/blob/master/probprog3.ipynb 52 | 53 | 54 | ## 2. pymc3のfind_MAP( )の振る舞い 55 | 56 | 講習中にpymc3のfind_MAP( )関数の振る舞いについて質問がありました.以下が実際の実装になりますが, 57 | 58 | https://github.com/pymc-devs/pymc3/blob/master/pymc3/tuning/starting.py 59 | 60 | **find_MAP( )**自体は単に**scipy.optimize.fmin**関数群へのラッパーでした.デフォルトでは**scipy.optimize.fmin_bfgs**が呼ばれていて,**scipy.optimize.fmin_bfgs**は与えられた関数を直接準ニュートン法で解き,最小値を求めます. 61 | 62 | http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_bfgs.html 63 | 64 | 事後分布が数値データで与えられた後にMAP推定を求めることは,数値的にはニュートン法で最小値を求めることに他なりませんので正しい振る舞いです. 65 | 66 | 従いまして,講習中の会話で出てきた,事後分布からサンプリングしているということはありません. -------------------------------------------------------------------------------- /data/Guber1999data.txt: -------------------------------------------------------------------------------- 1 | spend,stu_tea_rat,salary,prcnt_take,sat_v,sat_m,sat_t 2 | "Alabama",4.405,17.2,31.144,8,491,538,1029 3 | "Alaska",8.963,17.6,47.951,47,445,489,934 4 | "Arizona",4.778,19.3,32.175,27,448,496,944 5 | "Arkansas",4.459,17.1,28.934,6,482,523,1005 6 | "California",4.992,24.0,41.078,45,417,485,902 7 | "Colorado",5.443,18.4,34.571,29,462,518,980 8 | "Connecticut",8.817,14.4,50.045,81,431,477,908 9 | "Delaware",7.030,16.6,39.076,68,429,468,897 10 | "Florida",5.718,19.1,32.588,48,420,469,889 11 | "Georgia",5.193,16.3,32.291,65,406,448,854 12 | "Hawaii",6.078,17.9,38.518,57,407,482,889 13 | "Idaho",4.210,19.1,29.783,15,468,511,979 14 | "Illinois",6.136,17.3,39.431,13,488,560,1048 15 | "Indiana",5.826,17.5,36.785,58,415,467,882 16 | "Iowa",5.483,15.8,31.511,5,516,583,1099 17 | "Kansas",5.817,15.1,34.652,9,503,557,1060 18 | "Kentucky",5.217,17.0,32.257,11,477,522,999 19 | "Louisiana",4.761,16.8,26.461,9,486,535,1021 20 | "Maine",6.428,13.8,31.972,68,427,469,896 21 | "Maryland",7.245,17.0,40.661,64,430,479,909 22 | "Massachusetts",7.287,14.8,40.795,80,430,477,907 23 | "Michigan",6.994,20.1,41.895,11,484,549,1033 24 | "Minnesota",6.000,17.5,35.948,9,506,579,1085 25 | "Mississippi",4.080,17.5,26.818,4,496,540,1036 26 | "Missouri",5.383,15.5,31.189,9,495,550,1045 27 | "Montana",5.692,16.3,28.785,21,473,536,1009 28 | "Nebraska",5.935,14.5,30.922,9,494,556,1050 29 | "Nevada",5.160,18.7,34.836,30,434,483,917 30 | "New,Hampshire",5.859,15.6,34.720,70,444,491,935 31 | "New,Jersey",9.774,13.8,46.087,70,420,478,898 32 | "New,Mexico",4.586,17.2,28.493,11,485,530,1015 33 | "New,York",9.623,15.2,47.612,74,419,473,892 34 | "North,Carolina",5.077,16.2,30.793,60,411,454,865 35 | "North,Dakota",4.775,15.3,26.327,5,515,592,1107 36 | "Ohio",6.162,16.6,36.802,23,460,515,975 37 | "Oklahoma",4.845,15.5,28.172,9,491,536,1027 38 | "Oregon",6.436,19.9,38.555,51,448,499,947 39 | "Pennsylvania",7.109,17.1,44.510,70,419,461,880 40 | "Rhode,Island",7.469,14.7,40.729,70,425,463,888 41 | "South,Carolina",4.797,16.4,30.279,58,401,443,844 42 | "South,Dakota",4.775,14.4,25.994,5,505,563,1068 43 | "Tennessee",4.388,18.6,32.477,12,497,543,1040 44 | "Texas",5.222,15.7,31.223,47,419,474,893 45 | "Utah",3.656,24.3,29.082,4,513,563,1076 46 | "Vermont",6.750,13.8,35.406,68,429,472,901 47 | "Virginia",5.327,14.6,33.987,65,428,468,896 48 | "Washington",5.906,20.2,36.151,48,443,494,937 49 | "West,Virginia",6.107,14.8,31.944,17,448,484,932 50 | "Wisconsin",6.930,15.9,37.746,9,501,572,1073 51 | "Wyoming",6.160,14.9,31.285,10,476,525,1001 52 | -------------------------------------------------------------------------------- /data/test_scores.csv: -------------------------------------------------------------------------------- 1 | ,score,male,siblings,family_inv,non_english,prev_disab,age_test,non_severe_hl,mother_hs,early_ident,non_white 2 | 0,40,0,2.0,2.0,False,,55,1.0,,False,False 3 | 1,31,1,0.0,,False,0.0,53,0.0,0.0,False,False 4 | 2,83,1,1.0,1.0,True,0.0,52,1.0,,False,True 5 | 3,75,0,3.0,,False,0.0,55,0.0,1.0,False,False 6 | 5,62,0,0.0,4.0,False,1.0,50,0.0,,False,False 7 | 6,85,1,1.0,1.0,False,0.0,53,0.0,,False,False 8 | 7,39,0,2.0,3.0,True,1.0,50,1.0,1.0,False,True 9 | 9,98,0,0.0,1.0,False,,48,0.0,0.0,True,False 10 | 10,64,0,0.0,0.0,True,0.0,54,0.0,,False,True 11 | 12,109,1,1.0,0.0,False,0.0,48,1.0,1.0,True,False 12 | 13,111,0,0.0,0.0,False,1.0,48,1.0,,False,True 13 | 14,91,0,2.0,0.0,False,0.0,58,1.0,1.0,True,True 14 | 16,68,1,2.0,3.0,False,0.0,59,0.0,,True,True 15 | 17,87,0,1.0,0.0,True,0.0,58,0.0,,False,True 16 | 18,73,0,1.0,,False,0.0,54,1.0,1.0,False,True 17 | 19,65,1,0.0,2.0,False,0.0,50,1.0,1.0,False,True 18 | 21,71,1,1.0,2.0,False,1.0,58,0.0,0.0,True,True 19 | 23,82,0,1.0,0.0,False,1.0,59,0.0,1.0,True,False 20 | 25,97,0,1.0,0.0,False,1.0,56,1.0,1.0,False,False 21 | 26,95,1,1.0,0.0,True,0.0,55,0.0,1.0,True,False 22 | 27,98,1,1.0,0.0,False,0.0,52,0.0,1.0,True,False 23 | 28,96,1,1.0,0.0,False,0.0,58,0.0,,False,False 24 | 29,79,1,1.0,,True,,52,1.0,1.0,False,True 25 | 30,55,1,2.0,,True,0.0,57,0.0,,False,True 26 | 31,78,0,1.0,,False,0.0,48,0.0,,False,False 27 | 32,115,0,1.0,0.0,False,0.0,55,0.0,1.0,False,False 28 | 33,55,0,2.0,3.0,True,0.0,56,1.0,0.0,False,True 29 | 34,70,1,1.0,2.0,True,0.0,52,0.0,0.0,False,False 30 | 35,62,0,0.0,1.0,True,0.0,53,0.0,1.0,False,True 31 | 36,128,0,1.0,0.0,False,0.0,49,0.0,1.0,True,False 32 | 37,113,0,0.0,,True,0.0,52,1.0,1.0,False,True 33 | 38,138,1,1.0,,False,0.0,49,0.0,1.0,True,False 34 | 39,68,1,0.0,,False,1.0,54,1.0,0.0,False,False 35 | 40,133,0,1.0,0.0,False,,52,1.0,1.0,False,False 36 | 41,60,1,0.0,1.0,False,,49,1.0,1.0,False,True 37 | 42,84,0,2.0,0.0,True,,52,1.0,,False,False 38 | 43,93,0,1.0,0.0,False,0.0,54,1.0,1.0,False,False 39 | 44,58,0,1.0,2.0,False,0.0,54,0.0,,False,False 40 | 45,55,0,2.0,,False,0.0,48,0.0,,False,True 41 | 46,43,1,1.0,2.0,False,1.0,54,0.0,,False,False 42 | 47,20,1,1.0,,True,0.0,53,0.0,,False,True 43 | 48,75,1,1.0,,False,0.0,55,0.0,,True,False 44 | 49,55,0,1.0,2.0,True,1.0,54,0.0,0.0,False,True 45 | 50,61,1,1.0,1.0,True,0.0,57,0.0,1.0,False,True 46 | 51,84,0,2.0,0.0,False,0.0,52,0.0,1.0,False,False 47 | 52,67,0,2.0,2.0,False,0.0,49,0.0,1.0,True,True 48 | 53,89,1,1.0,0.0,False,0.0,48,1.0,1.0,False,True 49 | 54,76,1,1.0,,False,1.0,56,1.0,1.0,False,True 50 | 55,98,1,1.0,1.0,True,0.0,51,1.0,1.0,True,False 51 | 56,93,1,0.0,0.0,False,,58,1.0,1.0,True,False 52 | 57,69,1,2.0,2.0,False,0.0,54,1.0,0.0,False,True 53 | 58,0,1,1.0,2.0,True,1.0,48,1.0,,True,True 54 | 59,83,0,2.0,,False,1.0,57,0.0,1.0,False,False 55 | 61,78,1,0.0,,False,0.0,50,0.0,0.0,False,False 56 | 63,94,0,0.0,2.0,False,1.0,56,0.0,1.0,False,True 57 | 64,61,1,0.0,1.0,False,1.0,57,0.0,1.0,False,False 58 | 65,116,0,1.0,0.0,False,0.0,55,1.0,1.0,True,True 59 | 66,93,0,3.0,2.0,False,0.0,52,1.0,0.0,False,True 60 | 67,88,0,1.0,2.0,False,0.0,59,0.0,1.0,True,True 61 | 69,99,1,0.0,0.0,False,0.0,59,0.0,,False,True 62 | 70,98,1,0.0,1.0,False,0.0,55,1.0,1.0,False,False 63 | 71,77,0,1.0,0.0,False,0.0,56,0.0,1.0,False,False 64 | 72,66,1,1.0,0.0,False,0.0,57,0.0,1.0,True,True 65 | 73,98,0,1.0,0.0,False,1.0,49,0.0,1.0,False,False 66 | 74,107,1,1.0,1.0,False,0.0,51,0.0,1.0,False,False 67 | 75,110,1,1.0,1.0,False,0.0,54,0.0,1.0,False,False 68 | 76,94,1,0.0,1.0,False,0.0,49,1.0,1.0,False,True 69 | 77,97,0,1.0,1.0,False,,57,1.0,0.0,False,True 70 | 78,93,1,0.0,0.0,True,,59,0.0,1.0,False,True 71 | 79,98,0,1.0,2.0,False,1.0,50,1.0,1.0,True,False 72 | 80,100,0,0.0,0.0,False,0.0,50,1.0,0.0,False,False 73 | 81,95,0,2.0,,False,,58,0.0,1.0,False,False 74 | 82,71,1,0.0,1.0,False,0.0,49,1.0,,True,False 75 | 83,85,1,1.0,0.0,False,0.0,50,1.0,1.0,False,False 76 | 84,77,1,1.0,0.0,False,0.0,50,1.0,1.0,False,False 77 | 85,113,0,1.0,0.0,False,0.0,48,0.0,,True,False 78 | 89,94,0,2.0,,True,0.0,58,0.0,,True,False 79 | 90,94,1,1.0,2.0,False,0.0,51,0.0,1.0,False,False 80 | 91,116,0,0.0,0.0,False,0.0,58,0.0,,True,False 81 | 92,28,1,0.0,1.0,False,1.0,52,1.0,1.0,True,True 82 | 93,92,0,0.0,1.0,True,0.0,59,1.0,0.0,True,True 83 | 94,28,0,1.0,3.0,False,,48,0.0,0.0,False,True 84 | 95,144,1,0.0,0.0,False,0.0,50,1.0,0.0,False,True 85 | 96,20,1,1.0,3.0,False,1.0,55,1.0,,False,True 86 | 97,21,1,0.0,2.0,True,0.0,53,0.0,,True,True 87 | 98,96,1,0.0,0.0,False,1.0,50,0.0,1.0,False,False 88 | 99,55,1,3.0,3.0,False,0.0,55,0.0,0.0,False,False 89 | 100,61,1,1.0,1.0,False,1.0,54,1.0,1.0,False,False 90 | 101,67,1,2.0,2.0,False,1.0,53,1.0,1.0,False,False 91 | 102,62,0,2.0,,False,0.0,57,1.0,1.0,False,False 92 | 103,94,0,3.0,2.0,False,0.0,48,1.0,,False,False 93 | 104,54,0,1.0,,True,0.0,51,1.0,,False,True 94 | 105,80,1,3.0,2.0,False,0.0,52,1.0,,True,False 95 | 106,20,1,2.0,1.0,False,1.0,56,0.0,,True,False 96 | 107,99,0,1.0,0.0,False,1.0,56,0.0,,False,False 97 | 108,128,1,1.0,1.0,False,0.0,49,0.0,,False,False 98 | 110,93,1,2.0,1.0,False,1.0,55,0.0,1.0,False,True 99 | 111,97,1,1.0,2.0,False,0.0,51,1.0,,True,True 100 | 112,93,0,2.0,0.0,True,0.0,49,0.0,,True,True 101 | 114,55,0,2.0,1.0,False,0.0,48,0.0,0.0,False,False 102 | 115,55,0,3.0,2.0,False,0.0,57,0.0,0.0,False,True 103 | 116,63,0,2.0,0.0,False,,48,0.0,1.0,False,True 104 | 117,111,1,1.0,1.0,False,0.0,50,0.0,1.0,True,True 105 | 118,113,1,1.0,0.0,False,0.0,57,0.0,1.0,False,True 106 | 119,131,0,0.0,0.0,False,0.0,48,1.0,1.0,False,False 107 | 120,109,1,2.0,1.0,False,0.0,59,0.0,1.0,True,False 108 | 121,117,1,1.0,0.0,False,0.0,54,1.0,0.0,True,False 109 | 122,89,1,2.0,1.0,False,0.0,50,1.0,1.0,False,False 110 | 123,69,1,3.0,0.0,True,0.0,51,1.0,,False,False 111 | 124,62,0,0.0,1.0,True,0.0,58,1.0,,False,True 112 | 125,74,0,1.0,,True,0.0,48,1.0,0.0,True,True 113 | 126,55,1,1.0,2.0,True,0.0,50,0.0,,True,True 114 | 127,96,0,3.0,,False,0.0,57,0.0,1.0,True,False 115 | 128,96,1,0.0,0.0,False,0.0,58,0.0,1.0,False,False 116 | 129,70,0,2.0,2.0,False,0.0,57,1.0,,True,True 117 | 131,55,0,1.0,,True,0.0,58,0.0,0.0,False,True 118 | 132,84,1,1.0,,False,0.0,54,1.0,0.0,False,False 119 | 133,55,0,2.0,1.0,False,0.0,52,0.0,1.0,False,False 120 | 134,70,0,0.0,3.0,False,0.0,54,0.0,0.0,False,False 121 | 135,91,0,2.0,0.0,False,0.0,48,1.0,,True,False 122 | 136,91,0,2.0,,False,1.0,48,1.0,,False,False 123 | 137,68,0,0.0,3.0,False,0.0,50,0.0,,False,False 124 | 138,97,0,3.0,1.0,False,0.0,53,0.0,0.0,True,True 125 | 139,106,1,2.0,0.0,False,0.0,48,0.0,1.0,True,False 126 | 140,106,0,3.0,0.0,False,0.0,58,1.0,1.0,False,True 127 | 141,126,1,1.0,1.0,False,0.0,53,0.0,1.0,True,False 128 | 142,85,0,0.0,3.0,True,0.0,50,0.0,,True,True 129 | 143,90,1,1.0,1.0,False,0.0,48,1.0,,True,True 130 | 144,103,0,2.0,0.0,False,0.0,58,0.0,1.0,True,False 131 | 145,96,0,0.0,0.0,False,0.0,52,1.0,0.0,True,False 132 | 146,60,0,1.0,2.0,False,0.0,49,0.0,0.0,False,True 133 | 147,69,0,1.0,0.0,False,0.0,50,0.0,1.0,False,True 134 | 148,86,1,0.0,0.0,False,0.0,59,0.0,1.0,False,False 135 | 149,90,1,2.0,,False,0.0,48,0.0,,False,True 136 | 150,55,0,0.0,1.0,False,1.0,54,1.0,1.0,False,False 137 | 151,121,0,1.0,0.0,False,0.0,51,0.0,1.0,True,False 138 | 152,117,1,0.0,0.0,False,1.0,55,1.0,0.0,True,False 139 | 153,88,1,1.0,0.0,False,,58,1.0,1.0,True,True 140 | 154,108,0,0.0,0.0,False,1.0,49,1.0,1.0,True,False 141 | 155,103,0,3.0,0.0,False,0.0,58,1.0,1.0,True,False 142 | 156,87,1,1.0,0.0,False,0.0,57,1.0,,False,False 143 | 157,55,0,0.0,1.0,False,0.0,49,0.0,1.0,False,True 144 | 158,107,0,1.0,1.0,False,1.0,58,0.0,1.0,True,False 145 | 159,95,1,1.0,1.0,True,0.0,58,0.0,,True,True 146 | 160,121,0,1.0,0.0,False,1.0,56,1.0,,True,False 147 | 161,99,0,0.0,0.0,False,0.0,55,0.0,,False,True 148 | 162,89,0,3.0,1.0,False,0.0,58,0.0,,False,False 149 | 163,89,1,1.0,1.0,False,0.0,54,0.0,1.0,True,False 150 | 164,78,1,2.0,,True,0.0,56,1.0,0.0,False,True 151 | 165,90,0,2.0,,False,0.0,52,0.0,,False,True 152 | 166,94,1,1.0,1.0,False,0.0,50,0.0,,True,True 153 | 167,87,0,1.0,1.0,True,0.0,49,0.0,,False,True 154 | 168,82,1,2.0,1.0,True,0.0,52,0.0,,True,True 155 | 169,71,0,1.0,1.0,False,1.0,56,1.0,1.0,True,True 156 | 170,56,0,2.0,,False,1.0,58,1.0,0.0,False,False 157 | 171,91,1,0.0,,False,1.0,58,0.0,1.0,False,True 158 | 172,55,0,0.0,3.0,False,0.0,53,0.0,0.0,False,True 159 | 173,94,1,2.0,0.0,False,1.0,57,0.0,1.0,False,True 160 | 174,68,1,1.0,1.0,True,1.0,58,0.0,0.0,False,True 161 | 175,107,0,1.0,0.0,False,0.0,48,0.0,1.0,False,False 162 | 176,77,1,1.0,1.0,True,0.0,52,0.0,0.0,True,False 163 | 177,118,0,0.0,0.0,False,0.0,54,0.0,1.0,False,False 164 | 178,138,1,2.0,3.0,False,,58,1.0,,True,False 165 | 179,103,1,2.0,2.0,False,0.0,55,1.0,1.0,True,True 166 | 180,105,0,2.0,0.0,False,1.0,56,1.0,1.0,True,False 167 | 181,119,1,1.0,0.0,False,0.0,59,0.0,,False,True 168 | 182,62,1,2.0,1.0,False,1.0,59,0.0,,False,False 169 | 183,78,0,0.0,0.0,False,0.0,58,0.0,,True,True 170 | 184,97,1,3.0,2.0,False,0.0,58,1.0,,False,False 171 | 186,89,1,0.0,0.0,True,0.0,57,0.0,1.0,False,True 172 | 187,97,0,1.0,1.0,False,0.0,56,0.0,1.0,False,True 173 | 188,100,1,1.0,,False,0.0,52,0.0,1.0,False,True 174 | 189,70,0,1.0,2.0,True,0.0,50,1.0,,True,True 175 | 190,56,1,0.0,2.0,False,0.0,55,0.0,,False,True 176 | 191,81,1,2.0,1.0,True,0.0,53,0.0,,False,True 177 | 192,86,1,1.0,0.0,False,0.0,48,1.0,1.0,False,True 178 | 193,103,0,0.0,2.0,False,0.0,58,1.0,0.0,False,True 179 | 194,85,1,1.0,2.0,True,1.0,52,0.0,,True,True 180 | 195,124,0,1.0,2.0,False,,59,0.0,1.0,False,True 181 | 196,59,0,0.0,2.0,True,0.0,49,0.0,0.0,True,True 182 | 198,83,1,1.0,3.0,False,0.0,48,1.0,0.0,True,True 183 | 199,91,1,1.0,0.0,False,0.0,53,1.0,0.0,False,False 184 | 200,96,1,1.0,2.0,False,,54,1.0,0.0,False,True 185 | 201,133,1,1.0,0.0,False,0.0,56,1.0,,False,False 186 | 202,60,0,3.0,0.0,False,1.0,53,0.0,1.0,False,False 187 | 203,57,1,1.0,3.0,False,1.0,51,0.0,1.0,True,True 188 | 204,108,1,1.0,0.0,False,0.0,58,0.0,1.0,False,False 189 | 205,111,1,0.0,,False,0.0,51,1.0,1.0,True,False 190 | 206,83,0,3.0,2.0,False,0.0,58,0.0,,True,True 191 | 207,80,1,1.0,0.0,False,1.0,48,1.0,,True,False 192 | 208,55,1,1.0,0.0,False,,58,0.0,,True,False 193 | 209,107,1,0.0,0.0,False,0.0,50,0.0,0.0,False,False 194 | 210,58,0,0.0,2.0,False,0.0,56,0.0,,False,True 195 | 211,81,1,0.0,2.0,False,0.0,50,0.0,0.0,True,True 196 | 212,58,0,1.0,1.0,False,0.0,58,0.0,0.0,False,True 197 | 213,58,0,1.0,1.0,False,,58,0.0,,True,True 198 | 214,124,1,2.0,2.0,False,1.0,56,0.0,,True,True 199 | 215,72,0,2.0,2.0,True,0.0,48,0.0,,True,True 200 | 216,133,0,1.0,0.0,False,0.0,59,1.0,1.0,False,False 201 | 217,80,1,1.0,0.0,False,1.0,59,0.0,,False,False 202 | 218,92,1,2.0,1.0,True,0.0,52,1.0,1.0,False,True 203 | 219,80,0,1.0,,False,1.0,52,1.0,1.0,False,False 204 | 220,68,0,2.0,2.0,False,0.0,53,0.0,1.0,True,False 205 | 221,104,1,2.0,0.0,False,0.0,52,1.0,1.0,False,False 206 | 222,71,1,1.0,,False,0.0,57,1.0,,False,True 207 | 223,118,0,2.0,0.0,False,0.0,57,1.0,,True,False 208 | 224,99,1,2.0,2.0,False,1.0,59,0.0,,True,False 209 | -------------------------------------------------------------------------------- /data/pmf-map-d5/V.txt: -------------------------------------------------------------------------------- 1 | 7.025275147059556469e-02 -3.250346249053889802e-01 -6.364957379137800575e-02 8.099296492188002780e-03 -2.439593141217983874e-01 -6.910012805230346389e-02 -3.522241362462256720e-01 1.419325102357496815e-01 6.852113580472209142e-02 -1.724676317147963434e-01 -5.270429245383335265e-03 -2.411071570107891082e-01 1.322325565818886217e-01 -1.789051301798449262e-02 -2.362666334029190074e-01 -2.451197565782855040e-02 -5.800020009497708351e-02 4.231294362636611739e-01 -1.630458777186226393e-02 -2.154767531988164564e-01 -1.652716657809382150e-01 -8.778602950727786014e-02 2.291318888873339621e-01 -1.358329823232233002e-01 -2.692647780767304377e-02 7.446543914827097321e-02 -3.214764670328487117e-01 1.489865563856355990e-01 -1.396881137100195736e-01 5.093690577182089646e-02 -2.223338438758085400e-01 -3.107091207219231030e-02 6.979230104047486061e-02 -1.882207249415511763e-01 -1.660720284355681753e-01 -1.357760130661815057e-01 1.261270565564734207e-02 -6.218166970624527945e-02 -1.360403226049418934e-01 -2.019373395934412618e-01 2.370265809965013126e-01 -1.706766567734964435e-01 -1.806999812638544756e-02 -3.356285042215595427e-02 -2.949407234580483372e-01 9.775232959842365676e-02 -3.361838199813741990e-01 -7.223601140614026306e-02 -4.738378123524170094e-02 -2.020241333899825964e-01 3.310376924528834336e-02 -3.605019476769381614e-01 1.471348329731347604e-01 -1.739858456266164116e-02 -4.678659832683990799e-02 2.621237478043531716e-02 -3.529538112901545732e-01 2.087306386377603129e-01 -6.570643357243557969e-02 -8.652460386026258540e-03 -1.769747708079628112e-01 2.259420524231207927e-02 1.840511100770006181e-01 -6.195340903948522854e-02 -2.059022505817257320e-01 -1.660687916437444608e-02 -3.376774092364398516e-01 2.350578366176028777e-01 -6.144907590333655717e-02 -1.316357644817535769e-02 -1.806957355028339374e-01 7.361053347265120173e-02 2.765847483576213545e-02 -9.030538256992044766e-02 -3.000672459611195553e-01 -3.183948216797393566e-02 2.260795563068628833e-01 9.628994985711296362e-02 -1.302592834981735337e-01 -3.444086611875014636e-01 -1.833403081087862374e-01 3.186462808810045649e-02 2.544765126802873700e-01 -7.932404222553468554e-02 -6.618197370787480549e-02 -4.318226094895987605e-02 -2.378011589982809149e-02 -7.301262902021903034e-02 -1.461617068059651026e-01 -1.899064798997736891e-01 -7.818858947132857617e-02 -1.575154013379910511e-02 1.044582725455722449e-01 -2.633291387587236021e-01 -3.253932284886096316e-02 -1.233436625284373978e-01 5.963459387111452042e-02 1.235389235870364422e-01 -3.209291527191132087e-01 -8.141982915138459842e-02 -4.015286238991102458e-02 -4.095501503824227063e-01 2.077246005610974833e-01 -2.430426801720032230e-03 4.607205271869754121e-02 1.002714989814882801e-01 -3.327641705216792811e-01 1.446769624301140755e-01 4.145508400080256950e-02 -1.524880508812700153e-01 4.595618898519242962e-02 -1.751285504195698173e-01 2.452708745322280254e-02 -1.267938603177703738e-01 -1.997317831258585419e-01 2.474342441679572846e-01 -7.893665567638560865e-02 2.064557178811388116e-01 4.324258209453688689e-02 -3.168488340212687326e-01 -4.575662298409147524e-03 -2.825223450632741717e-01 1.941564130766804119e-01 -7.175804593223405331e-03 -1.567424486983580167e-01 -6.072661120356839110e-02 -3.759357701887497405e-01 2.065144011268355284e-01 -3.072103300320051106e-02 2.587565736319164672e-02 -1.956767901174644858e-02 -4.261088884087083084e-01 4.217037400166314537e-02 -6.039788355049495461e-02 1.100478045271662403e-01 -2.917825945285911285e-02 -1.953226016377870300e-01 3.624297848386972415e-02 -3.075653488740555663e-01 2.596008734189170913e-02 -1.943228247585993829e-01 -4.559623437692860159e-01 -2.324381307790848381e-02 -7.734703836578470104e-02 7.021339211016086601e-02 1.038703125809309069e-01 -1.053902330387627845e-01 2.247337213489649654e-01 -1.605977990765040664e-01 -1.215623745013551943e-01 -5.126513500033428455e-02 -4.077831482708730859e-01 1.834357887786394192e-01 9.251617265893713471e-03 7.732406444743245011e-02 -6.904338513826140111e-02 -3.459646604649804780e-01 -9.817414940617875951e-02 -2.223038896350979232e-01 1.087836753139672652e-01 3.972319048246152062e-03 -3.709250163924272120e-02 2.784667482301857455e-01 -9.691965546986497371e-02 -2.871120201267898797e-01 6.726670562321378222e-02 -3.196366497436279874e-01 2.309139612952040566e-01 2.410343206143590253e-02 -4.274113166595175373e-02 -1.013063019459033987e-01 -4.141823813916821195e-01 -8.667974678912201969e-02 -1.473632225218755309e-01 7.282411628807854143e-02 -6.900902902580217935e-02 -4.438218160434794224e-01 -7.316441411191244859e-02 -9.476004324111114707e-02 1.133749416071619526e-01 6.542728098406731807e-02 -7.702008830092127445e-02 5.399068228382287310e-02 -9.012068862605145114e-02 -3.499071232792290154e-01 5.817831148384478707e-02 -3.027844918739723834e-01 -8.261547459906964930e-02 -1.240172288864114652e-01 -1.823955402391677361e-01 3.608794398059107789e-02 -2.713507343810256378e-01 2.725276621056544335e-01 -6.095446851908448149e-02 2.049417992345326997e-02 -2.602176958099685841e-02 -2.392573254284047490e-01 1.333995060387386244e-01 -1.201963591826060163e-01 -1.450895040552757642e-01 -2.218413823618620856e-02 -1.924181224231701071e-01 1.866721397925795722e-01 -8.545667763319106380e-02 -2.082685496393580360e-01 -3.675775411179169061e-02 -3.568334182535315979e-01 1.982342166311761578e-01 -6.283562043843242406e-02 4.955256125653789701e-02 2.159815136654104906e-01 -8.713687593850312496e-02 9.054945323558939718e-02 -3.951497803912260715e-02 -2.495328288735607913e-01 1.100129859449642256e-01 -1.903200967444780220e-02 2.923322479350974265e-02 1.816319138466735567e-02 -4.491113563561400790e-01 -6.637323142409700012e-03 -2.954158314335886826e-01 8.716663306688693380e-02 -1.060107497807610683e-01 -8.331063832585244855e-02 -4.492280184787634384e-02 -4.062642851393399313e-01 2.478975895410621966e-02 -4.102784118478539771e-02 -5.514460920252829690e-02 2.016428763229805368e-02 -2.464640139793658757e-01 -1.643037109146081357e-04 -2.580139303754991897e-01 1.022866196466620456e-02 -8.308223888418438119e-02 -2.998026419722329416e-01 -1.498298776063522984e-02 -2.085164462224606829e-01 -2.406301687574628409e-02 -8.196611006626551565e-02 -3.571913494909118025e-01 8.080934759813755870e-04 -2.226446058115501836e-01 1.162585169544999852e-01 -1.173978372206849058e-01 -4.627243212811145145e-01 -1.021071304641517768e-01 -1.312754380610091087e-01 1.230902232394939649e-01 1.374693943152563783e-02 -2.080830686128717355e-01 5.156807863842958195e-01 4.896886639641932076e-02 -7.297525303482016445e-02 2.345966779782827916e-02 -2.625981166938947120e-01 4.297122054035368843e-01 4.144052238259838400e-02 -5.319433247315485946e-02 -8.945326711293344335e-02 -3.982310518156336743e-01 5.282008312147390416e-02 -1.112062886646115883e-01 1.196522128158529485e-01 -9.293660000898731899e-02 -3.966418855634729623e-01 1.032758523680322570e-03 -1.634546504719568971e-01 9.048531957329075670e-02 2.317094606394019540e-01 -2.807532561646403080e-01 5.918311354575536351e-03 1.893875554508333420e-02 -1.927358741509737072e-01 -1.030525654292282212e-01 -3.606686412199201497e-01 9.708415961391471394e-02 -1.078308188084243086e-01 -3.271572469441867692e-02 1.572092520006925509e-01 -2.996795611722300953e-02 8.047662563459201390e-02 -5.104754626135434015e-02 -3.402179684552729122e-01 9.267228921413961373e-02 2.428112534525795896e-01 2.764877352897241458e-01 -9.104047337870464773e-02 -3.808261853554564813e-01 8.138147055055705570e-02 -1.120068313915035807e-01 1.690441402258569814e-01 -1.467099911126145129e-01 -1.818916497515821740e-01 8.299359749527424057e-02 -1.155374290335028364e-01 -1.093844479532201097e-01 -1.055825256240732618e-01 -3.649177636678683778e-01 -6.505108168094615728e-02 -4.055650428957008335e-01 5.518325972160815357e-02 -1.457718746794694209e-01 9.247200685882758786e-02 -2.949056097500276502e-02 -3.516650989170413411e-01 -1.396639788309889108e-01 -2.710895328604691068e-01 7.013582033788494374e-02 3.087782144612147631e-02 -1.157161484122659068e-01 -2.744645886827511150e-03 -2.875885701742439959e-01 -1.242124773854006159e-01 6.681545019475414182e-02 -1.254413561924280218e-01 6.296859521677956872e-02 -1.048395950672550425e-01 -2.956886732276127749e-01 -4.753494082074142223e-03 -4.342612749805601080e-01 1.799031924232626645e-01 1.668569563175420836e-02 9.144577952632895745e-02 -2.497284917063386303e-02 -4.053761062029964668e-01 -2.940074655044222149e-02 -1.609963527720890686e-01 7.744278003382620845e-02 2.744377508861728376e-01 -1.256962847128192673e-01 1.583009189445629961e-01 -6.704858559495400702e-03 -2.639087401281393630e-01 -7.638135213860977428e-03 -3.042276633032961475e-01 -7.179312712837340738e-02 -2.732742833596539245e-01 1.026230894681686018e-01 -1.048359108219135485e-02 -3.889942711065146885e-01 -2.270338742571004209e-02 -1.138199372351924449e-01 5.990927749355406257e-02 1.081156598060476620e-01 -2.012576635050564722e-01 1.817079103894892189e-01 -1.089673292568670432e-01 -9.810524653367796999e-02 7.336218133534722075e-02 7.107265931725120778e-02 1.536082195116220406e-01 -3.655570048083484069e-01 -1.487841772173448089e-02 1.426188971668064243e-01 -3.196175538396416882e-01 1.300166071379049992e-01 -1.770761360073420387e-01 2.206196538458039536e-01 2.229570019881434439e-01 -1.087989813153135699e-01 3.749230288262343502e-01 -1.513165386082827579e-01 1.361450849311223732e-01 1.099321155600168354e-01 1.262024195809175742e-01 3.199417970938301381e-01 -1.743728853817690105e-01 -1.584024164347837271e-01 1.411235246671756760e-01 2.293533672403339288e-02 3.305028378246180343e-01 -1.473120941942593354e-01 -1.559042259304678317e-02 1.531425048430541946e-01 -2.577695493891538070e-01 1.051633033017282254e-01 -1.636427781052036401e-01 1.734710376538649290e-01 2.437284799145850167e-01 -5.417827961333585712e-02 2.916156448623717923e-01 -1.973707581703931513e-01 1.079113656834617269e-01 1.951614842169845931e-01 -1.248263412764664265e-01 2.365576666261525185e-01 -2.213875378625221879e-01 1.553737824280402580e-01 2.555991063378300621e-01 -2.137606408751396153e-02 3.743561431935535921e-01 -1.626652417827155472e-01 7.057496156820639022e-02 2.051696315230655265e-01 -1.777492973373584750e-01 4.138867575154446810e-01 -7.042481578508254236e-02 1.873884254881585942e-01 1.677485703048013088e-01 -3.236115805278429458e-01 1.933253261899645359e-01 7.091854994062566503e-03 6.402130611309138353e-02 2.073475554333647497e-01 -9.437498779517355940e-02 6.655147320116301668e-02 -2.680006051943059631e-01 -1.379511827769827614e-02 1.524085267376272534e-01 -2.445265579812484213e-01 2.067609822272087339e-01 -1.216915664324557111e-01 1.629808284084436620e-01 1.215623398803718225e-01 -4.459989914334427930e-02 1.079662046849377555e-01 -3.149564497254985218e-01 6.270213781857982178e-03 1.369612014221529839e-01 -1.472516778397248149e-01 3.215905228988156783e-01 -1.158921176742012255e-01 7.132647066851664774e-02 3.167035589653426908e-01 -5.413024902566573177e-02 -3.332082564922075885e-02 -1.855892310408754631e-01 -1.496342668804667153e-01 2.268530863748751125e-01 -2.670777901748587202e-01 5.559056084885924398e-02 -7.371409480012701410e-02 5.184546890259626728e-02 2.667753975995606486e-01 -2.489166822835588988e-01 -7.374284071584276401e-02 -1.722738751326520490e-01 3.790472345972790980e-02 1.224113528837714182e-01 -3.483134926884020044e-01 -1.861921939025922568e-01 -2.664238513931722618e-01 2.165068757010098488e-01 1.188528869631937379e-01 4.424134445952692014e-03 7.162877495182143339e-02 -3.834210029805943387e-01 -4.879791242698384469e-03 3.030633189327409660e-01 -1.998897543716387226e-01 -8.960293023409347801e-02 -1.992008430762560178e-01 3.848876116268527825e-02 2.824329467999686649e-01 -1.510730932652388503e-01 4.913014111302070608e-02 -1.801618695003844028e-01 5.256890882131032977e-02 1.770109720959167909e-01 -2.827164778192856054e-01 -9.779265319109230886e-03 -1.873189763752747816e-01 1.314680608153139807e-01 3.596871833612313996e-01 -1.446920805272626231e-01 -9.769861623631946601e-02 -1.694277276484935923e-01 -8.815029723753972646e-02 2.771816102534981896e-01 -1.432486576434439662e-01 1.691919487301818056e-02 -1.265547782713580260e-01 -4.126337075368374796e-02 3.027992668298730705e-01 -1.807534043101328147e-01 -1.046177431199133215e-02 -2.078951059078922303e-01 3.473625726009305775e-02 2.181975147998301001e-01 -1.635867998285900071e-01 -7.161641085612364954e-02 -2.418137391422026383e-01 2.458736120717211829e-02 5.635004881338091104e-02 -1.859277897655348677e-01 3.307487100721033801e-01 -3.115677261187249289e-02 7.286617456274419036e-02 1.772169944646579953e-01 -1.790957743541361433e-02 1.361185140191000786e-01 -2.542977466201185588e-01 -3.096260302895709193e-02 2.814580616113852851e-02 -2.861688978178203446e-01 3.666998017921264119e-01 3.320056954479119748e-02 8.533716834500452986e-02 2 | -------------------------------------------------------------------------------- /probprog0.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# エンジニアのためのベイズ推定入門" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## 確率論的プログラミングのすすめ" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "------------------\n", 22 | "\n", 23 | "# 目次\n", 24 | "\n", 25 | "## 第0部 準備\n", 26 | "\n", 27 | "- はじめに\n", 28 | " - チュートリアルの進め方\n", 29 | " - 対象\n", 30 | "- 参考文献,参考講義紹介\n", 31 | "- セットアップ\n", 32 | "\n", 33 | "## 第1部 ベイズ基礎\n", 34 | "\n", 35 | "- 結合確率,周辺確率,条件付き確率\n", 36 | "- ベイズの定理の導出\n", 37 | "- ベイズ更新と事前確率・事後確率\n", 38 | "\n", 39 | "## 第2部 モンテカルロ法と推定\n", 40 | "\n", 41 | "- モンテカルロサンプリングとパラメータ推定\n", 42 | "- ベイズの定理 + モンテカルロ -> 確率論的プログラミング\n", 43 | "- 点推定,区間推定\n", 44 | " - EAP\n", 45 | " - MAP\n", 46 | " - MED\n", 47 | " - 区間推定\n", 48 | "- マルコフ鎖モンテカルロ(MCMC)のさわり\n", 49 | "\t- メトロポリス・ヘイスティング法\n", 50 | "\t- ギブスサンプリング法\n", 51 | " - スライスサンプリング\n", 52 | "\t- ハミルトニアンモンテカルロ法\n", 53 | "- 計算機実装\n", 54 | " - pymc3\n", 55 | " - pystan\n", 56 | "\n", 57 | "## 第3部 モデリング入門\n", 58 | "- 確率論的プログラマの仕事\n", 59 | "- コイン投げ - pymc3\n", 60 | "- コイン投げ - pystan\n", 61 | "- モデリングの素振り練習\n", 62 | " - 正規分布 normal: pymc3, pystan\n", 63 | " - 線形回帰 linreg: pymc3, pystan\n", 64 | " - ロジステック回帰 gender: pymc3, pystan\n", 65 | " - 階層ベイズ gelmanradon: pymc3" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": {}, 71 | "source": [ 72 | "-------------------------\n", 73 | "\n", 74 | "# 第0部 準備" 75 | ] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": {}, 80 | "source": [ 81 | "## はじめに\n", 82 | "\n", 83 | "### チュートリアルの進め方\n", 84 | "\n", 85 | "- 教材となるJupyter Notebookをダウンロード,またはDocker ImageをDocker Hubからpull,~~さらには今回の講習で利用するJupyterHubサーバー~~または以下のnbviewerにアクセスします.\n", 86 | "\n", 87 | "http://nbviewer.ipython.org/github/bakfoo/pyconjp/tree/master/\n", 88 | "\n", 89 | "- 教材,および捕捉資料はプロジェクタで投影します.\n", 90 | "- Jupyter Notebookのコードを一つ一つ実行させながら,確率論的プログラミングを理解していきます.\n", 91 | "- 質問は随時受け付けますが,時間内に答えることが難しい質問は後に回してまとめて回答します.\n", 92 | "\n", 93 | "### 対象\n", 94 | "\n", 95 | "- ベイズ推定の基本身につけたいと思っているエンジニア\n", 96 | "- 確率論的プログラミングが気になっている全ての人\n", 97 | "- Python / NumPy / SciPy を使ったプログラミングを何度か自分の力で書き上げた方,またはそれに必要な知識を持った方\n", 98 | "- 大学初年度程度の数学(線形代数,確率論,統計学)の知識があると理解がスムーズになります." 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "## 参考文献,参考講義紹介\n", 106 | "\n", 107 | "### 確率論的プログラミング入門/参考文献\n", 108 | "- John Kruschke, Doing Bayesian Data Analysis 1st ed.\n", 109 | "\n", 110 | "![alt text](fig/doing.jpg \"doging\")\n", 111 | "\n", 112 | "- Gelman et al., Bayesian Data Analysis 3rd ed.\n", 113 | "\n", 114 | "![alt text](fig/bda.jpg \"bda\")\n", 115 | "\n", 116 | "- 豊田秀樹編著, 基礎からのベイズ統計学 - ハミルトニアンモンテカルロ法による実践的入門\n", 117 | "\n", 118 | "![alt text](fig/toyoda.jpg \"bda\")\n", 119 | "\n", 120 | "- C.P.ロバート & G. カセーラ, Rによるモンテカルロ法入門\n", 121 | "\n", 122 | "![alt text](fig/robert.jpg \"bda\")\n", 123 | "\n", 124 | "- Cliburn Chan & Janice McCarthy STA663 http://people.duke.edu/~ccc14/sta-663-2015/\n", 125 | "\n", 126 | "### 確率論的プログラミング入門/MCMC HMC ビデオチュートリアル\n", 127 | "\n", 128 | "修士の大学院生レベルですが,確率論的プログラミング入門として,以下のビデオチュートリアルは非常に良いです.\n", 129 | "\n", 130 | "- Harvard Extentions AM207\n", 131 | " - Monte Carlo Methods, Stochastic Optimization (Verena Kaynig-Fittkau and Pavlos Protopapas) http://am207.org/\n", 132 | " - Python2, numpy/scipyのバニラな実装\n", 133 | "\n", 134 | "- Machine Learning Summer School in Sydney, 2015 http://rp-www.cs.usyd.edu.au/~mlss/\n", 135 | " - Bayesian Inference and MCMC (Bob Carpenter) https://youtu.be/qQFF4tPgeWI\n", 136 | " - Stan Hands-on (Bob Carpenter) https://youtu.be/6NXRCtWQNMg\n", 137 | "- Machine Learning Summer School in Iceland, 2014 http://mlss2014.hiit.fi/slides.php\n", 138 | " - Hamiltonian Monte Carlo and Stan (Michael Betancourt) https://www.youtube.com/watch?v=pHsuIaPbNbY \n", 139 | " - Hamiltonian Monte Carlo and Stan 2 (Michael Betancourt) https://www.youtube.com/watch?v=xWQpEAyI5s8 https://www.youtube.com/watch?v=xWQpEAyI5s8" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": 7, 145 | "metadata": { 146 | "collapsed": false 147 | }, 148 | "outputs": [ 149 | { 150 | "data": { 151 | "text/html": [ 152 | "\n", 153 | " \n", 160 | " " 161 | ], 162 | "text/plain": [ 163 | "" 164 | ] 165 | }, 166 | "execution_count": 7, 167 | "metadata": {}, 168 | "output_type": "execute_result" 169 | } 170 | ], 171 | "source": [ 172 | "from IPython.display import YouTubeVideo\n", 173 | "\n", 174 | "# Bob Carpenter: \"Bayesian Inference and MCMC\" in MLSS Sydney 2015\n", 175 | "YouTubeVideo('qQFF4tPgeWI')" 176 | ] 177 | }, 178 | { 179 | "cell_type": "code", 180 | "execution_count": 6, 181 | "metadata": { 182 | "collapsed": false 183 | }, 184 | "outputs": [ 185 | { 186 | "data": { 187 | "text/html": [ 188 | "\n", 189 | " \n", 196 | " " 197 | ], 198 | "text/plain": [ 199 | "" 200 | ] 201 | }, 202 | "execution_count": 6, 203 | "metadata": {}, 204 | "output_type": "execute_result" 205 | } 206 | ], 207 | "source": [ 208 | "# Bob Carpenter: \"Stan Hands-on\" in MLSS Sydney 2015\n", 209 | "YouTubeVideo('6NXRCtWQNMg')" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": 8, 215 | "metadata": { 216 | "collapsed": false 217 | }, 218 | "outputs": [ 219 | { 220 | "data": { 221 | "text/html": [ 222 | "\n", 223 | " \n", 230 | " " 231 | ], 232 | "text/plain": [ 233 | "" 234 | ] 235 | }, 236 | "execution_count": 8, 237 | "metadata": {}, 238 | "output_type": "execute_result" 239 | } 240 | ], 241 | "source": [ 242 | "# Michael Betancourt: \"Hamiltonian Monte Carlo and Stan\" in MLSS Iceland 2014\n", 243 | "YouTubeVideo('pHsuIaPbNbY')" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 9, 249 | "metadata": { 250 | "collapsed": false 251 | }, 252 | "outputs": [ 253 | { 254 | "data": { 255 | "text/html": [ 256 | "\n", 257 | " \n", 264 | " " 265 | ], 266 | "text/plain": [ 267 | "" 268 | ] 269 | }, 270 | "execution_count": 9, 271 | "metadata": {}, 272 | "output_type": "execute_result" 273 | } 274 | ], 275 | "source": [ 276 | "# Michael Betancourt: \"Hamiltonian Monte Carlo and Stan\" in MLSS Iceland 2014\n", 277 | "YouTubeVideo('xWQpEAyI5s8')" 278 | ] 279 | }, 280 | { 281 | "cell_type": "markdown", 282 | "metadata": { 283 | "collapsed": true 284 | }, 285 | "source": [ 286 | "## セットアップ\n", 287 | "\n", 288 | "### 0 チュートリアル環境の構築前の注意\n", 289 | "\n", 290 | "確率論的プログラミングはまだ若い分野ですので,計算環境の構築方法が成熟していません.チュートリアルではpymc3やpystanを利用しますが,それらの開発者は基本的にUbuntuにAnaconda Pythonを利用してるので,まともに動作する環境はどうしてもUbuntu + Anacondaが中心になってしまいます.以下に構築前の注意を列挙します.\n", 291 | "\n", 292 | "- Windowsで確率論的プログラミングを行うことは,pymc3のtheanoのGPUの問題,pystanのプロセス制限の問題等,制約が多すぎて困難な道となります.Windowsを利用する場合,VMWare, VirtualBox, Vagrant等の仮想環境またはDocker等のコンテナ技術を利用してLinuxを用意するほうが精神衛生上望ましいと考えています.\n", 293 | "- Python環境の構築はAnacondaディストリビューションを前提とします.素のPythonから確率論的プログラミングの環境を構築することは,数々の罠に嵌まる可能性が否定できませんので推奨できません.\n", 294 | "- もしも,チュートリアル当日までに環境を構築できなくても問題ありません.チュートリアルはJupyter Notebookで行いますので,Docker Imageを用意~~するか,JupyterHub等によりWebブラウザからチュートリアルマテリアルにアクセス~~し実行できるようにします.\n", 295 | "- 皆様には大変申し訳ございませんが,JupyterHubが技術的理由により用意できませんでした.お詫びを申しあげます.代わりに以下のnbviewerで代替させていただきます.\n", 296 | "\n", 297 | "http://nbviewer.ipython.org/github/bakfoo/pyconjp/tree/master/\n", 298 | "\n", 299 | "### 1 Linux/OSX環境に直接チュートリアル環境の構築する方法\n", 300 | "\n", 301 | "それぞれのOS環境にて,C/C++のビルドができるところまで完了している,というのがチュートリアル環境を構築するための大前提です.たとえばUbuntuでは,\n", 302 | "\n", 303 | "```\n", 304 | "apt-get install build-essential\n", 305 | "```\n", 306 | "\n", 307 | "が完了している,ということです.OSX環境であればXcodeとコマンドラインツールがインストール済みで,コマンドラインでgccが動作するということです.\n", 308 | "\n", 309 | "#### 1.1 Python環境の構築\n", 310 | "\n", 311 | "以下のサイトからダウンロードしてAnaconda Pythonをインストールしてください.Python3.4を使います.\n", 312 | "\n", 313 | "https://www.continuum.io/downloads\n", 314 | "\n", 315 | "すでにAnaconda環境がある場合は,以下のようにpython環境を新しくすれば,既存の環境を壊すことなくチュートリアルの環境が構築できます.\n", 316 | "\n", 317 | "```\n", 318 | "conda create -n pycon python=3.4\n", 319 | "source activate pycon\n", 320 | "conda install anaconda\n", 321 | "```\n", 322 | "\n", 323 | "#### 1.2 pymc3のインストール\n", 324 | "\n", 325 | "以下の手順でpipを利用してpymc3を構築します.ポイントはtheano, pymc3ともに最新版のリポジトリのものを利用しないとバグのために動作しない,ということです.インストール時にc/c++のビルドを行います.公式インストール手順:https://pymc-devs.github.io/pymc3/getting_started/\n", 326 | "\n", 327 | "```\n", 328 | "pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git\n", 329 | "pip install --process-dependency-links git+https://github.com/pymc-devs/pymc3\n", 330 | "pip install pasty\n", 331 | "pip install seaborn\n", 332 | "```\n", 333 | "\n", 334 | "#### 1.3 pystanのインストール\n", 335 | "\n", 336 | "次に以下の手順でpipを利用してpystanを構築します.インストール時にc/c++のビルドを行います.公式インストール手順:https://pystan.readthedocs.org/en/latest/getting_started.html\n", 337 | "\n", 338 | "```\n", 339 | "pip install pystan\n", 340 | "```\n", 341 | "\n", 342 | "以上でチュートリアル環境の構築は終了です.\n", 343 | "\n", 344 | "### 2 Dockerを利用してチュートリアル環境を構築する方法\n", 345 | "\n", 346 | "#### 2.1 VirtualBoxをダウンロードしてインストール\n", 347 | "\n", 348 | "- https://www.virtualbox.org/wiki/Downloads\n", 349 | "\n", 350 | "#### 2.2 Docker Toolboxをダウンロードしてインストール\n", 351 | "\n", 352 | "- https://www.docker.com/toolbox\n", 353 | "\n", 354 | "#### 2.3 以下のコマンドでDockerコンテナ起動\n", 355 | "\n", 356 | "注意: 下記にある三番目のdocker runの\"[LOCAL DIR]”の部分はご自分のディレクトリを指定ください.\n", 357 | "\n", 358 | "```\n", 359 | "docker-machine create --driver virtualbox --virtualbox-memory 3081 dev\n", 360 | "\n", 361 | "eval \"$(docker-machine env dev)\"\n", 362 | "\n", 363 | "docker run -t -i -v [LOCAL DIR]:/notebook -p 8888:8888 yutakashino/pyconjp:v1.2 /bin/bash\n", 364 | "\n", 365 | "root@d3c2644d9fb3:/notebook# git clone https://github.com/bakfoo/pyconjp.git\n", 366 | "root@d3c2644d9fb3:/notebook# ipython notebook --ip=* --port=8888\n", 367 | "```\n", 368 | "\n", 369 | "#### 2.4 ブラウザでアクセス\n", 370 | "\n", 371 | "- ipは\"docker-machine ip dev\"により調べる\n", 372 | "- portは8888\n", 373 | "- \n", 374 | "```\n", 375 | "http://192.168.99.101:8888/tree/pyconjp\n", 376 | "```" 377 | ] 378 | }, 379 | { 380 | "cell_type": "code", 381 | "execution_count": null, 382 | "metadata": { 383 | "collapsed": true 384 | }, 385 | "outputs": [], 386 | "source": [] 387 | } 388 | ], 389 | "metadata": { 390 | "kernelspec": { 391 | "display_name": "Python 3", 392 | "language": "python", 393 | "name": "python3" 394 | }, 395 | "language_info": { 396 | "codemirror_mode": { 397 | "name": "ipython", 398 | "version": 3 399 | }, 400 | "file_extension": ".py", 401 | "mimetype": "text/x-python", 402 | "name": "python", 403 | "nbconvert_exporter": "python", 404 | "pygments_lexer": "ipython3", 405 | "version": "3.4.3" 406 | } 407 | }, 408 | "nbformat": 4, 409 | "nbformat_minor": 0 410 | } 411 | -------------------------------------------------------------------------------- /coin_pymc.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from __future__ import division\n", 12 | "import os\n", 13 | "import sys\n", 14 | "import glob\n", 15 | "import matplotlib.pyplot as plt\n", 16 | "import numpy as np\n", 17 | "import pandas as pd\n", 18 | "%matplotlib inline\n", 19 | "%precision 4\n", 20 | "#plt.style.use('ggplot')\n", 21 | "import seaborn as sns\n", 22 | "sns.set_style('white')\n", 23 | "sns.set_context('paper')\n", 24 | "\n", 25 | "np.random.seed(1234)\n", 26 | "import pymc3 as pm\n", 27 | "import scipy.stats as stats\n", 28 | "\n", 29 | "import logging\n", 30 | "_logger = logging.getLogger(\"theano.gof.compilelock\")\n", 31 | "_logger.setLevel(logging.ERROR)" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 4, 37 | "metadata": { 38 | "collapsed": false 39 | }, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "\r", 46 | " [-----------------100%-----------------] 1000 of 1000 complete in 0.1 sec" 47 | ] 48 | } 49 | ], 50 | "source": [ 51 | "n = 100\n", 52 | "h = 61\n", 53 | "alpha = 2\n", 54 | "beta = 2\n", 55 | "\n", 56 | "niter = 1000\n", 57 | "with pm.Model() as model: # context management\n", 58 | " # define priors\n", 59 | " p = pm.Beta('p', alpha=alpha, beta=beta)\n", 60 | "\n", 61 | " # define likelihood\n", 62 | " y = pm.Binomial('y', n=n, p=p, observed=h)\n", 63 | "\n", 64 | " # inference\n", 65 | " start = pm.find_MAP() # Use MAP estimate (optimization) as the initial state for MCMC\n", 66 | " step = pm.Metropolis() # Have a choice of samplers\n", 67 | " trace = pm.sample(niter, step, start, random_seed=123, progressbar=True)" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 5, 73 | "metadata": { 74 | "collapsed": false 75 | }, 76 | "outputs": [ 77 | { 78 | "data": { 79 | "image/png": "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\ngMH/B59ilHgy5CJHAAAAAElFTkSuQmCC\n", 80 | "text/plain": [ 81 | "" 82 | ] 83 | }, 84 | "metadata": {}, 85 | "output_type": "display_data" 86 | } 87 | ], 88 | "source": [ 89 | "plt.hist(trace['p'], 15, histtype='step', normed=True, label='post');\n", 90 | "x = np.linspace(0, 1, 100)\n", 91 | "plt.plot(x, stats.beta.pdf(x, alpha, beta), label='prior');\n", 92 | "plt.legend(loc='best');" 93 | ] 94 | } 95 | ], 96 | "metadata": { 97 | "kernelspec": { 98 | "display_name": "Python 3", 99 | "language": "python", 100 | "name": "python3" 101 | }, 102 | "language_info": { 103 | "codemirror_mode": { 104 | "name": "ipython", 105 | "version": 3 106 | }, 107 | "file_extension": ".py", 108 | "mimetype": "text/x-python", 109 | "name": "python", 110 | "nbconvert_exporter": "python", 111 | "pygments_lexer": "ipython3", 112 | "version": "3.4.3" 113 | } 114 | }, 115 | "nbformat": 4, 116 | "nbformat_minor": 0 117 | } 118 | -------------------------------------------------------------------------------- /coin_pystan.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 4, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from __future__ import division\n", 12 | "import os\n", 13 | "import sys\n", 14 | "import glob\n", 15 | "import matplotlib.pyplot as plt\n", 16 | "import numpy as np\n", 17 | "import pandas as pd\n", 18 | "%matplotlib inline\n", 19 | "%precision 4\n", 20 | "#plt.style.use('ggplot')\n", 21 | "import seaborn as sns\n", 22 | "sns.set_style('white')\n", 23 | "sns.set_context('paper')\n", 24 | "\n", 25 | "np.random.seed(1234)\n", 26 | "import pystan\n", 27 | "import scipy.stats as stats\n", 28 | "\n", 29 | "import scipy.stats as stats" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 5, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "coin_code = \"\"\"\n", 41 | "data {\n", 42 | " int n; // number of tosses\n", 43 | " int y; // number of heads\n", 44 | "}\n", 45 | "transformed data {}\n", 46 | "parameters {\n", 47 | " real p;\n", 48 | "}\n", 49 | "transformed parameters {}\n", 50 | "model {\n", 51 | " p ~ beta(2, 2);\n", 52 | " y ~ binomial(n, p);\n", 53 | "}\n", 54 | "generated quantities {}\n", 55 | "\"\"\"\n", 56 | "\n", 57 | "coin_dat = {\n", 58 | " 'n': 100,\n", 59 | " 'y': 61,\n", 60 | " }\n", 61 | "\n", 62 | "fit = pystan.stan(model_code=coin_code, data=coin_dat, iter=1000, chains=1)\n", 63 | "#fit = pystan.stan(file='coin_code.stan', data=coin_dat, iter=1000, chains=1)" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 6, 69 | "metadata": { 70 | "collapsed": false 71 | }, 72 | "outputs": [ 73 | { 74 | "name": "stdout", 75 | "output_type": "stream", 76 | "text": [ 77 | "Inference for Stan model: anon_model_7f1947cd2d39ae427cd7b6bb6e6ffd77.\n", 78 | "1 chains, each with iter=1000; warmup=500; thin=1; \n", 79 | "post-warmup draws per chain=500, total post-warmup draws=500.\n", 80 | "\n", 81 | " mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat\n", 82 | "p 0.6 4.5e-3 0.05 0.51 0.58 0.61 0.63 0.69 105 1.0\n", 83 | "lp__ -70.21 0.07 0.71 -72.34 -70.32 -69.92 -69.78 -69.74 102 1.01\n", 84 | "\n", 85 | "Samples were drawn using NUTS(diag_e) at Tue Oct 6 09:18:52 2015.\n", 86 | "For each parameter, n_eff is a crude measure of effective sample size,\n", 87 | "and Rhat is the potential scale reduction factor on split chains (at \n", 88 | "convergence, Rhat=1).\n" 89 | ] 90 | } 91 | ], 92 | "source": [ 93 | "print(fit)" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 7, 99 | "metadata": { 100 | "collapsed": false 101 | }, 102 | "outputs": [ 103 | { 104 | "data": { 105 | "text/plain": [ 106 | "KeysView(OrderedDict([('p', array([ 0.5849, 0.6032, 0.6161, 0.6406, 0.5578, 0.5511, 0.5845,\n", 107 | " 0.5935, 0.6055, 0.6308, 0.6219, 0.5853, 0.5001, 0.649 ,\n", 108 | " 0.56 , 0.5821, 0.6758, 0.5972, 0.5986, 0.6453, 0.6075,\n", 109 | " 0.5348, 0.6184, 0.6529, 0.5438, 0.5766, 0.5906, 0.6449,\n", 110 | " 0.5919, 0.5979, 0.5434, 0.5007, 0.6288, 0.6595, 0.6078,\n", 111 | " 0.6273, 0.6336, 0.5237, 0.5512, 0.5237, 0.5705, 0.605 ,\n", 112 | " 0.6121, 0.5118, 0.7063, 0.6399, 0.6078, 0.6135, 0.6015,\n", 113 | " 0.4795, 0.5954, 0.5643, 0.6487, 0.58 , 0.6044, 0.6002,\n", 114 | " 0.5955, 0.5841, 0.6152, 0.6517, 0.6099, 0.6342, 0.5969,\n", 115 | " 0.5858, 0.5916, 0.612 , 0.6146, 0.6504, 0.5188, 0.6575,\n", 116 | " 0.5784, 0.6214, 0.5267, 0.6073, 0.4621, 0.6644, 0.5658,\n", 117 | " 0.6635, 0.5984, 0.6505, 0.6464, 0.5102, 0.566 , 0.7129,\n", 118 | " 0.6163, 0.5673, 0.5658, 0.6334, 0.6098, 0.6946, 0.6664,\n", 119 | " 0.6404, 0.6248, 0.6976, 0.6066, 0.5549, 0.6875, 0.6911,\n", 120 | " 0.5921, 0.6336, 0.6219, 0.5418, 0.6857, 0.501 , 0.6338,\n", 121 | " 0.5788, 0.6508, 0.5935, 0.6333, 0.5267, 0.6228, 0.5128,\n", 122 | " 0.561 , 0.6318, 0.6662, 0.6427, 0.6178, 0.6594, 0.5788,\n", 123 | " 0.5658, 0.5848, 0.628 , 0.5348, 0.6449, 0.5837, 0.6831,\n", 124 | " 0.582 , 0.6313, 0.5761, 0.584 , 0.6078, 0.5733, 0.6486,\n", 125 | " 0.6292, 0.5932, 0.5621, 0.6265, 0.5764, 0.5904, 0.6947,\n", 126 | " 0.6263, 0.6087, 0.5658, 0.5504, 0.6143, 0.6243, 0.65 ,\n", 127 | " 0.6116, 0.5821, 0.5993, 0.651 , 0.5237, 0.5672, 0.6373,\n", 128 | " 0.667 , 0.5843, 0.6157, 0.5845, 0.6059, 0.5973, 0.611 ,\n", 129 | " 0.6427, 0.6552, 0.5262, 0.6704, 0.5386, 0.6194, 0.6502,\n", 130 | " 0.6189, 0.5826, 0.5923, 0.5536, 0.6362, 0.6222, 0.6195,\n", 131 | " 0.5517, 0.6471, 0.6308, 0.6251, 0.6306, 0.626 , 0.6619,\n", 132 | " 0.5934, 0.6155, 0.6123, 0.6586, 0.7215, 0.6076, 0.632 ,\n", 133 | " 0.5959, 0.5945, 0.5093, 0.5936, 0.6354, 0.5656, 0.6416,\n", 134 | " 0.6395, 0.659 , 0.5731, 0.6546, 0.614 , 0.6278, 0.5786,\n", 135 | " 0.6444, 0.5128, 0.5733, 0.5348, 0.5779, 0.5696, 0.6002,\n", 136 | " 0.6081, 0.6323, 0.6467, 0.6024, 0.647 , 0.576 , 0.6515,\n", 137 | " 0.6031, 0.5735, 0.6509, 0.6113, 0.5504, 0.6908, 0.6147,\n", 138 | " 0.7103, 0.634 , 0.6559, 0.5976, 0.5775, 0.6362, 0.4502,\n", 139 | " 0.5847, 0.6008, 0.6434, 0.623 , 0.6294, 0.7335, 0.6134,\n", 140 | " 0.5635, 0.6416, 0.5997, 0.6521, 0.643 , 0.6119, 0.5436,\n", 141 | " 0.5408, 0.6506, 0.6444, 0.5911, 0.6582, 0.6402, 0.612 ,\n", 142 | " 0.6243, 0.5657, 0.621 , 0.6779, 0.5487, 0.5544, 0.5914,\n", 143 | " 0.6471, 0.6627, 0.6384, 0.6155, 0.5518, 0.5732, 0.5216,\n", 144 | " 0.6414, 0.5853, 0.5947, 0.6332, 0.6688, 0.5386, 0.5281,\n", 145 | " 0.6078, 0.6507, 0.6293, 0.5357, 0.622 , 0.5838, 0.6684,\n", 146 | " 0.6067, 0.6621, 0.6145, 0.5517, 0.6406, 0.6042, 0.6055,\n", 147 | " 0.67 , 0.6647, 0.5561, 0.5775, 0.5849, 0.5256, 0.5869,\n", 148 | " 0.7103, 0.6105, 0.602 , 0.56 , 0.5398, 0.624 , 0.6163,\n", 149 | " 0.6476, 0.5955, 0.6287, 0.5592, 0.6346, 0.5849, 0.6613,\n", 150 | " 0.5691, 0.649 , 0.5647, 0.6486, 0.5484, 0.5679, 0.6195,\n", 151 | " 0.5677, 0.6166, 0.6863, 0.5472, 0.7137, 0.5445, 0.5339,\n", 152 | " 0.4631, 0.6293, 0.5958, 0.5488, 0.5525, 0.5926, 0.5904,\n", 153 | " 0.6368, 0.5956, 0.612 , 0.6052, 0.6276, 0.6742, 0.6312,\n", 154 | " 0.5939, 0.6359, 0.5896, 0.635 , 0.6487, 0.6373, 0.582 ,\n", 155 | " 0.5256, 0.6064, 0.6273, 0.6527, 0.6539, 0.6897, 0.6279,\n", 156 | " 0.629 , 0.5819, 0.6055, 0.5879, 0.6335, 0.6147, 0.7057,\n", 157 | " 0.4897, 0.5856, 0.6015, 0.5798, 0.5922, 0.5691, 0.6897,\n", 158 | " 0.6041, 0.5922, 0.6072, 0.623 , 0.6231, 0.5898, 0.5645,\n", 159 | " 0.6097, 0.5941, 0.5706, 0.6093, 0.5454, 0.6367, 0.6342,\n", 160 | " 0.6415, 0.5955, 0.6249, 0.4806, 0.6281, 0.6487, 0.6034,\n", 161 | " 0.6116, 0.622 , 0.5553, 0.6 , 0.6349, 0.5536, 0.6059,\n", 162 | " 0.628 , 0.6168, 0.6306, 0.5782, 0.6266, 0.5547, 0.5488,\n", 163 | " 0.5927, 0.5599, 0.61 , 0.5926, 0.6288, 0.6049, 0.6351,\n", 164 | " 0.6549, 0.5837, 0.5296, 0.5494, 0.5386, 0.5561, 0.5667,\n", 165 | " 0.6623, 0.6237, 0.5858, 0.6259, 0.6015, 0.6111, 0.6466,\n", 166 | " 0.5129, 0.6247, 0.5796, 0.5698, 0.6191, 0.5781, 0.6506,\n", 167 | " 0.6208, 0.5249, 0.5711, 0.6311, 0.6283, 0.5901, 0.6296,\n", 168 | " 0.5764, 0.5778, 0.5906, 0.5906, 0.664 , 0.6279, 0.5091,\n", 169 | " 0.4724, 0.6378, 0.6018, 0.5102, 0.5701, 0.6121, 0.5858,\n", 170 | " 0.7041, 0.5274, 0.5227, 0.6265, 0.6219, 0.5509, 0.5996,\n", 171 | " 0.535 , 0.7011, 0.6681, 0.6809, 0.5826, 0.6726, 0.5735,\n", 172 | " 0.5697, 0.6194, 0.5708, 0.5959, 0.5133, 0.5975, 0.4991,\n", 173 | " 0.5706, 0.6137, 0.6668, 0.661 , 0.6175, 0.5895, 0.6415,\n", 174 | " 0.6147, 0.5828, 0.6592, 0.5633, 0.592 , 0.5487, 0.6668,\n", 175 | " 0.5756, 0.5802, 0.6395, 0.5862, 0.6151, 0.5967, 0.605 ,\n", 176 | " 0.6023, 0.5723, 0.6569, 0.575 , 0.6586, 0.6148, 0.5918,\n", 177 | " 0.619 , 0.6021, 0.6345])), ('lp__', array([-69.8367, -69.7442, -69.7659, -70.0128, -70.2323, -70.3781,\n", 178 | " -69.8396, -69.7753, -69.7427, -69.8813, -69.8001, -69.8328,\n", 179 | " -72.0816, -70.163 , -70.1895, -69.8632, -70.8694, -69.7588,\n", 180 | " -69.7538, -70.0922, -69.7434, -70.8064, -69.7778, -70.2437,\n", 181 | " -70.5558, -69.9255, -69.7927, -70.0849, -69.7845, -69.7561,\n", 182 | " -70.5655, -72.0569, -69.8601, -70.3962, -69.7436, -69.8455,\n", 183 | " -69.9139, -71.1596, -70.375 , -71.1615, -70.0081, -69.7429,\n", 184 | " -69.7515, -71.5966, -72.1389, -70.0023, -69.7436, -69.7556,\n", 185 | " -69.7467, -73.0796, -69.7662, -70.1097, -70.1559, -69.8848,\n", 186 | " -69.7431, -69.7496, -69.7657, -69.844 , -69.7621, -70.2165,\n", 187 | " -69.7465, -69.9226, -69.7597, -69.8287, -69.7859, -69.7511,\n", 188 | " -69.7599, -70.1904, -71.3337, -70.3475, -69.9034, -69.7964,\n", 189 | " -71.0597, -69.7432, -74.0558, -70.5249, -70.084 , -70.4986,\n", 190 | " -69.7545, -70.1931, -70.112 , -71.6589, -70.0811, -72.4849,\n", 191 | " -69.767 , -70.0581, -70.0828, -69.9123, -69.7463, -71.5898,\n", 192 | " -70.5802, -70.0104, -69.8226, -71.7217, -69.7429, -70.292 ,\n", 193 | " -71.295 , -71.4409, -69.783 , -69.9148, -69.8 , -70.6086,\n", 194 | " -71.2254, -72.0455, -69.9165, -69.8983, -70.1985, -69.7752,\n", 195 | " -69.9112, -71.0594, -69.8068, -71.5584, -70.1695, -69.8932,\n", 196 | " -70.573 , -70.048 , -69.7745, -70.3931, -69.8983, -70.084 ,\n", 197 | " -69.837 , -69.8522, -70.8064, -70.0849, -69.8474, -71.125 ,\n", 198 | " -69.8637, -69.8865, -69.9316, -69.8449, -69.7436, -69.9687,\n", 199 | " -70.1535, -69.8644, -69.7768, -70.1488, -69.8376, -69.9277,\n", 200 | " -69.7937, -71.5929, -69.836 , -69.7446, -70.084 , -70.3936,\n", 201 | " -69.7586, -69.8183, -70.1817, -69.7501, -69.8631, -69.7517,\n", 202 | " -70.2019, -71.1596, -70.0604, -69.9632, -70.5956, -69.8422,\n", 203 | " -69.7645, -69.8396, -69.7427, -69.7582, -69.7486, -70.048 ,\n", 204 | " -70.2934, -71.0768, -70.6979, -70.6963, -69.7836, -70.1866,\n", 205 | " -69.7804, -69.8584, -69.7819, -70.3214, -69.9485, -69.8018,\n", 206 | " -69.7843, -70.3632, -70.1252, -69.8811, -69.8249, -69.8796,\n", 207 | " -69.8326, -70.458 , -69.7756, -69.7633, -69.7521, -70.3745,\n", 208 | " -72.9757, -69.7434, -69.8955, -69.7637, -69.7703, -71.6961,\n", 209 | " -69.7746, -69.938 , -70.0868, -70.0292, -69.9962, -70.3827,\n", 210 | " -69.9707, -70.28 , -69.7574, -69.8501, -69.9009, -70.0757,\n", 211 | " -71.5584, -69.9688, -70.8073, -69.9096, -70.0221, -69.7494,\n", 212 | " -69.7439, -69.899 , -70.118 , -69.7451, -70.123 , -69.9326,\n", 213 | " -70.2131, -69.7442, -69.9655, -70.2007, -69.7494, -70.3924,\n", 214 | " -71.428 , -69.7603, -72.3435, -69.9195, -70.3091, -69.7572,\n", 215 | " -69.9142, -69.9488, -74.8021, -69.8385, -69.7482, -70.0584,\n", 216 | " -69.8083, -69.8662, -73.7457, -69.7554, -70.1234, -70.0292,\n", 217 | " -69.7508, -70.226 , -70.0521, -69.7508, -70.5621, -70.6347,\n", 218 | " -70.195 , -70.0764, -69.789 , -70.3651, -70.0064, -69.7512,\n", 219 | " -69.8184, -70.0856, -69.7936, -70.94 , -70.4327, -70.3039,\n", 220 | " -69.7876, -70.1252, -70.4778, -69.9795, -69.7633, -70.3611,\n", 221 | " -69.97 , -71.2321, -70.0264, -69.833 , -69.7691, -69.9089,\n", 222 | " -70.65 , -70.6964, -71.0125, -69.7436, -70.196 , -69.8654,\n", 223 | " -70.7795, -69.8005, -69.8466, -70.6364, -69.7429, -70.4634,\n", 224 | " -69.7595, -70.3632, -70.0131, -69.7433, -69.7427, -70.6858,\n", 225 | " -70.5329, -70.2669, -69.914 , -69.8365, -71.0976, -69.8193,\n", 226 | " -72.3435, -69.7475, -69.7458, -70.1894, -70.662 , -69.8157,\n", 227 | " -69.7672, -70.1354, -69.7656, -69.8586, -70.2034, -69.9278,\n", 228 | " -69.8367, -70.4422, -70.0307, -70.163 , -70.1023, -70.1535,\n", 229 | " -70.4407, -70.0488, -69.784 , -70.052 , -69.7683, -71.2468,\n", 230 | " -70.4694, -72.5285, -70.537 , -70.8336, -73.9984, -69.8652,\n", 231 | " -69.7641, -70.4312, -70.346 , -69.7804, -69.7934, -69.9572,\n", 232 | " -69.7652, -69.7511, -69.7428, -69.8483, -70.8179, -69.8863,\n", 233 | " -69.7732, -69.9449, -69.799 , -69.9318, -70.1565, -69.9641,\n", 234 | " -69.8637, -71.0976, -69.7428, -69.8453, -70.2388, -70.2653,\n", 235 | " -71.3825, -69.8505, -69.8623, -69.8656, -69.7427, -69.8118,\n", 236 | " -69.9138, -69.7602, -72.1069, -72.5645, -69.8302, -69.7467,\n", 237 | " -69.8874, -69.7827, -70.0303, -71.3825, -69.7433, -69.7825,\n", 238 | " -69.7431, -69.8079, -69.8089, -69.7978, -70.1061, -69.7462,\n", 239 | " -69.772 , -70.0068, -69.7454, -70.5147, -69.9549, -69.922 ,\n", 240 | " -70.0269, -69.7656, -69.823 , -73.0196, -69.8533, -70.1562,\n", 241 | " -69.7439, -69.7502, -69.8003, -70.2851, -69.75 , -69.9306,\n", 242 | " -70.3214, -69.7427, -69.8522, -69.7695, -69.8789, -69.9053,\n", 243 | " -69.8381, -70.2968, -70.4298, -69.7798, -70.1904, -69.7467,\n", 244 | " -69.7801, -69.8598, -69.7429, -69.9337, -70.2864, -69.8472,\n", 245 | " -70.9655, -70.4172, -70.6968, -70.2678, -70.0688, -70.4689,\n", 246 | " -69.8136, -69.8285, -69.8322, -69.7467, -69.749 , -70.1169,\n", 247 | " -71.5545, -69.8215, -69.8895, -70.0197, -69.7815, -69.9072,\n", 248 | " -70.195 , -69.7926, -71.1198, -70.0002, -69.8844, -69.8548,\n", 249 | " -69.7954, -69.8684, -69.9277, -69.9109, -69.7927, -69.7922,\n", 250 | " -70.513 , -69.8508, -71.7031, -73.4639, -69.9702, -69.7461,\n", 251 | " -71.6618, -70.0145, -69.7514, -69.8285, -72.0298, -71.0365,\n", 252 | " -71.1943, -69.8375, -69.7996, -70.3811, -69.751 , -70.8016,\n", 253 | " -71.8872, -70.6279, -71.0467, -69.8584, -70.7657, -69.966 ,\n", 254 | " -70.0202, -69.7834, -70.0037, -69.764 , -71.5398, -69.7574,\n", 255 | " -72.1274, -70.0068, -69.7566, -70.5922, -70.4328, -69.7727,\n", 256 | " -69.8001, -70.0268, -69.7603, -69.8558, -70.3893, -70.1278,\n", 257 | " -69.7836, -70.4335, -70.5922, -69.9375, -69.8826, -69.9965,\n", 258 | " -69.8255, -69.7617, -69.7607, -69.7428, -69.7453, -69.982 ,\n", 259 | " -70.3326, -69.9458, -70.3749, -69.7607, -69.7849, -69.781 ,\n", 260 | " -69.7456, -69.9256]))]))" 261 | ] 262 | }, 263 | "execution_count": 7, 264 | "metadata": {}, 265 | "output_type": "execute_result" 266 | } 267 | ], 268 | "source": [ 269 | "coin_dict = fit.extract()\n", 270 | "coin_dict.keys()\n", 271 | "# lp_ is the log posterior" 272 | ] 273 | }, 274 | { 275 | "cell_type": "code", 276 | "execution_count": 8, 277 | "metadata": { 278 | "collapsed": false 279 | }, 280 | "outputs": [ 281 | { 282 | "data": { 283 | "image/png": "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\nYII=\n", 284 | "text/plain": [ 285 | "" 286 | ] 287 | }, 288 | "metadata": {}, 289 | "output_type": "display_data" 290 | } 291 | ], 292 | "source": [ 293 | "fit.plot('p');\n", 294 | "plt.tight_layout()" 295 | ] 296 | } 297 | ], 298 | "metadata": { 299 | "kernelspec": { 300 | "display_name": "Python 3", 301 | "language": "python", 302 | "name": "python3" 303 | }, 304 | "language_info": { 305 | "codemirror_mode": { 306 | "name": "ipython", 307 | "version": 3 308 | }, 309 | "file_extension": ".py", 310 | "mimetype": "text/x-python", 311 | "name": "python", 312 | "nbconvert_exporter": "python", 313 | "pygments_lexer": "ipython3", 314 | "version": "3.4.3" 315 | } 316 | }, 317 | "nbformat": 4, 318 | "nbformat_minor": 0 319 | } 320 | -------------------------------------------------------------------------------- /linreg_pystan.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 線形回帰モデル - pystan" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 2, 13 | "metadata": { 14 | "collapsed": true 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "from __future__ import division\n", 19 | "import os\n", 20 | "import sys\n", 21 | "import glob\n", 22 | "import matplotlib.pyplot as plt\n", 23 | "import numpy as np\n", 24 | "import pandas as pd\n", 25 | "%matplotlib inline\n", 26 | "%precision 4\n", 27 | "#plt.style.use('ggplot')\n", 28 | "import seaborn as sns\n", 29 | "sns.set_style('white')\n", 30 | "sns.set_context('paper')\n", 31 | "\n", 32 | "np.random.seed(1234)\n", 33 | "import pystan\n", 34 | "import scipy.stats as stats\n", 35 | "\n", 36 | "import scipy.stats as stats" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "## 線形回帰モデルのパラメータ推定\n", 44 | "\n", 45 | "普通の伝統的な統計学では以下の線形回帰式を用いて回帰パラメータ$a$, $b$を推定する.\n", 46 | "\n", 47 | "$$\n", 48 | "y \\sim ax + b\n", 49 | "$$\n", 50 | "\n", 51 | "確率論的プログラミングにおいては,,\n", 52 | "\n", 53 | "$$y = ax + b + \\epsilon$$\n", 54 | "\n", 55 | "という線型モデルを次の形式に解釈することでモデリングを行う.\n", 56 | "\n", 57 | "$$\n", 58 | "y \\sim \\mathcal{N}(ax + b, \\sigma^2)\n", 59 | "$$\n", 60 | "\n", 61 | "推定するパラメータは$a$, $b$ と $\\sigma$で,それぞれの事前分布は次のように決めるとする.\n", 62 | "\n", 63 | "$$\n", 64 | "a \\sim \\mathcal{N}(0, 100) \\\\\n", 65 | "b \\sim \\mathcal{N}(0, 100) \\\\\n", 66 | "\\sigma \\sim \\mathcal{U}(0, 20)\n", 67 | "$$" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 3, 73 | "metadata": { 74 | "collapsed": false 75 | }, 76 | "outputs": [], 77 | "source": [ 78 | "lin_reg_code = \"\"\"\n", 79 | "data {\n", 80 | " int n; \n", 81 | " real x[n];\n", 82 | " real y[n]; \n", 83 | "}\n", 84 | "transformed data {}\n", 85 | "parameters {\n", 86 | " real a;\n", 87 | " real b;\n", 88 | " real sigma;\n", 89 | "}\n", 90 | "transformed parameters {\n", 91 | " real mu[n];\n", 92 | " for (i in 1:n) {\n", 93 | " mu[i] <- a*x[i] + b;\n", 94 | " }\n", 95 | "}\n", 96 | "model {\n", 97 | " sigma ~ uniform(0, 20);\n", 98 | " y ~ normal(mu, sigma);\n", 99 | "}\n", 100 | "generated quantities {}\n", 101 | "\"\"\"\n", 102 | "\n", 103 | "n = 11\n", 104 | "_a = 6\n", 105 | "_b = 2\n", 106 | "x = np.linspace(0, 1, n)\n", 107 | "y = _a*x + _b + np.random.randn(n)\n", 108 | "\n", 109 | "lin_reg_dat = {\n", 110 | " 'n': n,\n", 111 | " 'x': x,\n", 112 | " 'y': y\n", 113 | " }\n", 114 | "\n", 115 | "fit = pystan.stan(model_code=lin_reg_code, data=lin_reg_dat, iter=1000, chains=1)" 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": 4, 121 | "metadata": { 122 | "collapsed": false 123 | }, 124 | "outputs": [ 125 | { 126 | "name": "stdout", 127 | "output_type": "stream", 128 | "text": [ 129 | "Inference for Stan model: anon_model_4bdbb0aeaf5fafee91f7aa8b257093f2.\n", 130 | "1 chains, each with iter=1000; warmup=500; thin=1; \n", 131 | "post-warmup draws per chain=500, total post-warmup draws=500.\n", 132 | "\n", 133 | " mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat\n", 134 | "a 5.74 0.15 1.3 3.03 4.9 5.82 6.59 8.25 80 1.0\n", 135 | "b 2.06 0.09 0.78 0.57 1.54 2.03 2.52 3.77 78 1.0\n", 136 | "sigma 1.38 0.04 0.4 0.81 1.09 1.3 1.58 2.33 89 1.0\n", 137 | "mu[0] 2.06 0.09 0.78 0.57 1.54 2.03 2.52 3.77 78 1.0\n", 138 | "mu[1] 2.63 0.08 0.68 1.34 2.19 2.6 3.02 4.08 80 1.0\n", 139 | "mu[2] 3.2 0.06 0.58 2.09 2.83 3.17 3.53 4.44 85 1.0\n", 140 | "mu[3] 3.78 0.05 0.5 2.73 3.47 3.76 4.08 4.82 95 1.0\n", 141 | "mu[4] 4.35 0.04 0.44 3.49 4.07 4.35 4.63 5.22 115 1.0\n", 142 | "mu[5] 4.93 0.03 0.42 4.1 4.64 4.92 5.2 5.78 150 1.0\n", 143 | "mu[6] 5.5 0.03 0.43 4.7 5.22 5.51 5.78 6.41 163 1.0\n", 144 | "mu[7] 6.07 0.04 0.49 5.15 5.75 6.08 6.39 7.09 156 1.0\n", 145 | "mu[8] 6.65 0.05 0.56 5.63 6.28 6.63 7.02 7.8 143 1.0\n", 146 | "mu[9] 7.22 0.06 0.66 5.94 6.81 7.21 7.66 8.54 131 1.0\n", 147 | "mu[10] 7.8 0.07 0.76 6.34 7.29 7.76 8.28 9.32 116 1.0\n", 148 | "lp__ -8.09 0.16 1.47 -11.87 -8.82 -7.75 -7.03 -6.32 88 1.01\n", 149 | "\n", 150 | "Samples were drawn using NUTS(diag_e) at Tue Oct 6 10:44:55 2015.\n", 151 | "For each parameter, n_eff is a crude measure of effective sample size,\n", 152 | "and Rhat is the potential scale reduction factor on split chains (at \n", 153 | "convergence, Rhat=1).\n" 154 | ] 155 | } 156 | ], 157 | "source": [ 158 | "print(fit)" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": 5, 164 | "metadata": { 165 | "collapsed": false 166 | }, 167 | "outputs": [ 168 | { 169 | "data": { 170 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcUAAAE3CAYAAADbm1qWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4FOe1/7+zq121XfWGRJMEqCAJRC/GuCYuormhIIsf\nNrbjQlxiYudecx07BuxrCG5xkhvHiQwRJsaXa4wLcY2NgwABRhUJCQmBJNTbrtq2+f2x2tWW2V5m\nJZ3P8/Ag7cy8853RznvmvO95z2FYlmVBEARBEAQEfAsgCIIgCF+BjCJBEARBjEBGkSAIgiBGIKNI\nEARBECOQUSQIgiCIEcgoEgRBEMQIZBQJgiAIYgQyigRBEAQxgh/fAgjf4OGHH0ZbWxuUSiUef/xx\n3HzzzXxLIgiC8DoMZbQhAKC3txehoaGQy+XIzc3FJ598wrckgiAIr0OeIgEA+Nvf/oZvv/0WANDU\n1ISOjg5ERUXxrIogCMK7kFEkcOLECZSVleHDDz+ESCTCqlWroFAo+JZFEAThdSjQhkB/fz/CwsIg\nEolQWlqKixcv8i2JIAiCF8goElixYgV6enqQk5OD9957D6mpqXxLIgiC4AUKtCEIgiCIETzmKe7c\nuRN5eXnYsWOH0ed//vOfkZ+fj7vvvhvfffcdAODQoUO45ZZbkJ+fj927d3tKEkFMSNra2rBu3Tpk\nZWVBo9EAAP7yl79gw4YN2Lp1K1QqFc8KCcJ38IhRrKiowODgIAoLC6FUKlFWVqbfdv/992Pfvn14\n77338Kc//QkAwDAMNm/ejH379mHr1q2ekEQQE5awsDC89957mDNnDgCgs7MTp06dwv79+5GSkoKv\nvvqKZ4UE4Tt4xCiWlJRg+fLlAIBly5bh3Llz+m1+ftqA16GhIYSEhOg/37t3L+69914UFRV5QhJB\nTFjEYrH+WWNZFuXl5Vi0aBEA8+eTICY6HlmSIZPJMGXKFACAVCpFTU2N0fYXXngBX331FXbt2gUA\nuOmmm7Bu3Tp0dXVh8+bNOHToEBiGMWt3aGgI5eXliI6OhlAo9IR0gvAYarUa7e3tyMjIQEBAAG86\nZDIZJBIJAEAikaCvr89sH3rWiLGOs8+bR4yiRCKBXC4HoH0ADT1CQGsUt27divvuuw8HDx6EVCoF\nAERERGD69Olob29HTEyMWbvl5eXIy8vzhGSC8BqFhYVYsGABL+dmGAZSqRQtLS0AALlcbvZ8AvSs\nEeMHR583jxjF7OxsHDhwALfeeiuKiopwxx136LcpFAqIxWKIxWL9pL9cLodEIsHQ0BAaGhoQGRnJ\n2W50dDQA7UXGxcV5QjpBeIyWlhbk5eXpv8d8wLIsMjIysH//fjzwwAM4fvw45s6da7YfPWsEH5ys\n0L6sLZ7t+nfO2efNI0YxPT0d/v7+yMvLQ1paGjIzM7F9+3Zs27YNO3bsQF1dHZRKJTZv3gwAKCgo\nwA8//ACNRoOHHnrI4nCN7vO4uDhMnjzZE9IJwuN4ezhSpVLhgQceQHV1NR544AE89dRTWLBgATZs\n2ID4+Hjcd999FjXSs0Z4k4tt2v/d+Z1z9HnzWJq35557zuj3bdu2AQBefPFFs323bNmCLVu2eEoK\nQUxo/Pz8UFBQYPRZVlYWHnzwQX4EEYQPQxltCIIgCGIEMooEQYw5OnoGUdvYw7cMYhxCRpEgiDFH\nRV0nmtrkfMsgxiFkFAmCIAhiBDKKBEEQdqLRsFCrNXzLIDwIGUWCIAg7OXehHT+UNPMtg/AgZBQJ\ngiDsRDag4FsC4WHIKBIEQRDECD5RT1Eul+Phhx/Gz372M3z00UeekkQQBEEQVvGJeooHDx5ETk4O\nCgsL8eGHH0KpVHpCFuElhpVqHDlWh4de/gp5z3+OR1/9GqfPt/ItiyAIwiY+UU+xpKQEy5Ytg0Ag\nQGpqKurq6jwhi/ACV1pleOJ3/8JfDpdh5uQwrFqRhHBpAF78ywns/aySb3kEMW5RqtTolQ/zLWPM\n4xP1FE3ru8lkMk/IIjzMmapW/Pfe04gMDcCbW6/HtDjtS889N87CB19fQOHRKqRNj8DCdKq6QBDu\nprS2A/IBJVbOowTuruART9GeeopHjx7Fnj17zPa3VN+N8G2+O9uIl949ibTECPzuiWv1BhEABAIG\n62+ahXkpMXjrg3Po66cIPsI9sCzr1vYGhpQYGBqb0zdDw2qzz7r6hjCkUDndZnOHHErVxFqX6RGj\nmJ2djaKiIgBAUVGRUb02hULbIRrWU9Ttr1arUVVVhaSkJE/IIjwAy7L46Lta7C48gxVzE/Bf9y9G\nUIDIbD+GYfD4+rlQKNX4x5fVPCglxiNutokormxFcSU/89+NbTIolOaGzW4Y84/Kajtw7kK7U80p\nVRrUXO5BzZVuzu3fnW1ES2e/U237Mh4xiob1FIVCob6eIgDs2LED+fn52Lhxo76e4l133YUjR44g\nLy8Pd911l37ekfBtlCoN/uf/yvDuxxVYd90MPPWzefATWv5KRYYG4pal0/HlqQb0D47Nt3HCuwwM\nKaGykkHGzTaRN5QqNS429qLmivNJznU20dR7Vipd8/Ss3f+m9vGXf9Yn6ilKJBJ9JCoxNmjukON3\nhWdwsbEXP1+XiZxr7PPuc65JwkffXcSXpxqwduUMD6skLKFQKPDEE09ALpdDKpXi9ddfh1gs5luW\nGcWVrZAGiTEvNUb/WVff0OgOLAtOF8kAncGZNTUcAoH1fflCZ8c0Vlxf2YACgf5+Fl88GWa0LcYN\nl6lvj8MmunvY2pegxfuEQwwOq1B4tApbdn2LHtkwXtlyjd0GEQCiwgKxfE48jhyroxySPPL9998j\nMzMT+/btQ1ZWFo4dO8a3JIuYZpEpq+3Q/6yxo29ubJOjtWvAamSmfFDp0tybIWq1Bt+dbXQoElR3\nGZZsmUqtwdmqNly0Wi5Le7SZwXLSQOqaYTn88XFsEz3nKRLjC4VSjc+OX8LBry9gYEiJNdcmI/fm\nFAT4O/4VWrUiCd//2ISSmg4jD4DwHuHh4foo776+PoSHh/OsyDICq26P7d7Zng78zPlWt3hXgHad\nLgA0t/cjVOJvcb+qS11o7RowihZlLIiwJzhNd6iGZSHk+Nxx2JH2Rj9RqjQYGFJCEqQdVbB2b+ub\nexEuDUCY1PI98EXIUyRscry0GQ//99f425FyLEqPw59+fRM25cx2yiACQMrUcMREBOGHkiY3KyXs\nJTs7GxUVFcjJyUFFRQWys7P5lmQRxkov5ZDHYsM4cLXlyWHC1q4Bs/MMDCk5DaBqJAJULBKabdOh\nuzxT75lx1lXUixv9seyi/YE7l1tkKKlxLsiHT8goEhYZGlZhz/4zePm9YkyLC8Hvf3UDnsjNRmxE\nkEvtMgyDa7LicaL8qtVJfMJzHD58GNdddx0++eQTrFy5EocPH7Z5DMuyOF/fhcFh9wwzcqFUafTf\nCZ2hsOQ9Ae4JtDE0ToZUXerC9z/afnFT2zOGawOd7R0YUuHH6jaz7aqRSH1rXrPuPg24KYiNa55T\n/7f3wMuCr8xTklEkOBkYUuI37xTheNlVPLF+Lp7fvBhTYqVua3/5nHjIBpQoNZgfIryH4XrgsLAw\n9PfbDq0fUqjR1j2A+uZej+k6XtqMkxUtALS1CwHAWmwM6waDVHWpi/NzS8bSkKZ2OX441+SyYbRl\nENRq2+3rDJbumdK36eycohVtvmG+PAMZRcIMhVKN5/9chEtX+/DSQ8tw06JpVt/WnWHmlDDERATh\n31SbjhdWr16Nzz77DPn5+fj000+xatUqu4/19Au9bqhQ56EYekemHbSrUlz1Tjp7BwFAv+baU+i9\nZwvbO3oGzT7T2GETlSo1vjvbqL8OQ3T3huucnvgO+IijSIE2hDnvHC7HxcZevPzYcqROi/DIORiG\nwbLMSfj2zBU8ppnjs6Hy45XQ0FD89a9/derYHvkwvjvbiOVz4q2uS3UVnffFWPluuGrUVHZ4YNZg\n9BGf3Nv7+hVQqtSIDA202o4tR1PnKTZc7UNosBjhIQFG2zmHtPXDz5bbHRzJgtPVN2RRI6thMTCk\nhMLF9Y628BGbSJ4iYcy/zjbiaNElPLQ2w2MGUceC1Fj0yhWo8+BwHOE+dAZI58k5m31FrdbYlbxh\ndPjU0FN0/HzWjIJS5UIGGUDvhnF6U2DxY3Ubyi922m7HxoWpDDxRrikHrrn50RYt3wDdPeYcCWJH\n/yuubDUJmhnxIi3o1rhhWJsvyCgSeuQDCrzzURmWZ8XjlqXTPX6+9KQI+IuFnIEFhO9htvzNySH1\nyktdnKXEzl0w/h7ozmdkFK1oam6XW0xJZgnXPUWdjtF2rNk3lmVRUdcJuclLgS0bYsnIqNUaXGmV\nceYnZe3wFHVD1EIOb5xzTlFnKA0+Mr0Ws2NGsJlD1UfGT71eZPj3v/89cnNzkZubq8+PeujQIdxy\nyy3Iz8/H7t27PSWJsEHhP6ugUKrx4NoMt88hciHyEyIzOQpnySiOCUw7Ome/IfIB7jV3vXLjzzVc\nnbrpnKLB7zVXetDc7lguTrdFPBraDSttqtQsOnoGccbkpcCWDkOjaHg/GlpkqGvqNUoUECAWjrRp\nh2yOeVuzc3MtVRn5f2BIhTPnW80SFZgec7mlD8dLm73iQQ4Nq3DShch2rxcZXrt2LQ4cOIB33nkH\nb7/9NgDtG+fmzZuxb98+bN261ROSCBs0tPThs+OXcM9Ns2zOf7iT7JRonK/vGrOVCbxNaWkpNm7c\niDvvvBNKpdKrL5Gm/Zm93Vu3bAhdfUNQqjQOLefgHD412ccbvoW1zlX38miowxlNtgyY4XaGI/DI\n0NhIgsRQqTVoaOnT7m+lXd28Ldecvt5Q27F+U6HUQD6oRO1I7lbT7R29Q5yfG7VpRacjtHYNYEih\nhszJajxeLzI8ebI2e4NIJDL64+7duxf33nuv3nskvMsHX15AREgA1q5M9up556XEQK1h7Zt3IfDK\nK6/g9ddfR1BQEEQiEUpLS712brPITzu9rNKaDpTVduBMVStOjSy3sAf9+jiD/tr0lK46evbMbZp6\ndYC5oeQaPnVEG1cqNUMseYo6Y2b6wlLX1Kv3moeV2gjT7842GueNNWjX1ChqNKx+uJMrHyvXtZ2v\n79QnCDc9Rnceb7zE6M7h7GCXR4yiTCZDcHAwAG2R4b6+PrN93nrrLeTm5gIAbrrpJhw5cgRvvvkm\nXn31VZ9ZxDlRaG6X44eSJtxx3QyI/CxnzPAECdESxIQH0ryinQiFQkREjAZAefNZcdUgDSuMg1ps\naddt7pENGwy5OmeYuWjp7LdYlcLQCA0pzINxTDO1GE27OahJrWFtDisaGhlDZ0JnzEzPqeEw0oD5\n0g3dfvIBBY6XNus9x9rGHn3mGkNtrIUAGxbs6GJ/DWv23dAbRavzrZa3OYJO28Umc7tjD7wUGf7y\nyy/R19eH22+/HYDWcAJAREQEpk+fjvb2sZcaaCzz4Tc1CAn2x0+WTPP6uRmGQdaMaJTXkadoDxkZ\nGXjllVfQ3d2NPXv2GNUq9TTuWyNofRkD1/nOVLWhuV3uVk+Ry9jpOHbOeiYb+YDWwxytTDEqpK3b\nfNG/tSCTH8412RwpMRo+NfhcN7RsbARZi38cU49Qd1hL5wCUKg0USjUuXe3D1Q7uuVlrxk2ngWVZ\ns+/KqGft+Zc43al9ak7RWpHhqqoq7N+/H//1X/+l/0xnQIeGhtDQ0IDIyEhPyCI46O4bwrdnrmDN\nymT4W8mr6EkyZ0Ti0tU+h6oKTFSeffZZLF26FOvWrcP8+fPx9NNPe+3cZsNoBvk6h5Vqh7O6sADa\nuwctLoswPd3AkIpjTtH5TpYr4tJRdOsUdZfeKx/mDPYZrexhn15rnh+Xp2iY8cbaGUyvmctDbbhq\n2cOyOM3IGi/2N2121GBa1tbX757n31r5LXvwepHhXbt2obOzE5s3b8Zjjz0GACgoKEBubi42btyI\nhx56CEIhP53zROTLU5fBMAx+stj7XqKOjKQoACBv0Q5OnTqFwMBAZGZmIjAwEMXFxR4/p64ygplN\nHPm/uLIVJ8quOpzujGVZVNZ3orKeO82aaefWJRsy68Rd6f/cYRRHdVjv9E3LX9nCzKgYfGAom3PY\n1co9MZs7dPIGcg0R66RweYo6o216lGxAAfmgEi2d/U7HFbR3D3IuG3EWrxcZfvfdd8323bJlC7Zs\n2eIpKYQF1BoWR09cwoq5CQgJ5q/AbExEEGIjglBe24HlWfG86RgLHD16FAzDgGVZVFVVISQkBAsX\nLvToOc9daMPAkApJCaFGn3P1p8MKFYICRHa1q+vIuIYW5YNKs3yfg0Mq1DUZJ3pwZU7R0SxKXDoN\nC/sa/m4Je+Vqr2u0MSNPUWAefWp0LMzn9HQIBQw0GhatXQOYFBXs9EsFlzHWaWnpHLBobHvlw4gI\nCdBnQjpbpY0lmBrnXF7l9u5BVNZ3Ii0xAjHh2kIFrnqKlOZtAnOmqhXt3YO4ddl0vqUgMzkKZRcp\nObgtnn/+ef3PLMviiSee8Oj5OnuHMDCsTSlmj0EaVqqNjKI1z9HatjPnWznXzg1byKLjTMHq6gbH\nFvoXlXHk6R2R2NQuR1v3gM0KMvZ212bDp4bRp0b72dngCEKBAM0dclxs7EWAWOh0RDEXukNNvyeG\nnK/vQkRIADJnRDnUtkKpxuCwyqw+pW4pl/Wam45hc/j0T3/6E1pbzUOSibHPFycakBQfipSp/BeY\nzZwRiYYWGc0r2qCnp0f/r7q6GvX19R49X63VSu/mDA5p1yF29g5qOywrnayu87TUn9nzxq/b5ZLB\nPJjFgrwGzTljRK3J6egZxNWOfptJL+w1OmZrQg0DbRhuD1KHWs1anGtlmNG2lCoNWjqNg4Ls92RN\nfof9qd2GFOZrVW1lu/mxus2ojmNfvwJqtQadI0tMRH6jpszViGybnuKkSZPw3HPPQSgUYt26dbjx\nxhshEtk3PEL4Lr3yYZw+34r7V8/2SvYaWxjOK9IQqmV+8YtfANB2jKGhofppCT7g6ns6+4YQHy1B\n+cVOCAQMFqTFWjy+vVu7PIABgwuX7fTaLBgLQ6/zx+o2pCdGIioswHihu8FxNlOO2Ynpk2OzQ7az\nvzY1MJZeELgMUV+/ArCS2Ec3dNnZO2SWv1ZhZy5YRzxM0xeQgSFzo2h6fc3tcvgJBYgZ8bwNI4VZ\nVptTNjYiSL9A/9yFdqycp10Db2roHcWmUVyzZg3WrFmDlpYW7NmzB7/5zW+wZs0a3HfffZg0aZJL\nJyf449i5JrAArp07mW8pALTzitHhgagko2iVffv28S1BD2ewhcE8oEbD2rVYXzagcDgQxVSD6fBZ\nZX0nkhJCMSVWqjecl1v6cP5SF5ZnxUPphuLWbd0DZi+U7lprp1RpEGgwUmjJC3P0fBqWxdBIZQyl\n2twAltbYN4XhyLwd173ulg0hXGpQ6cOkOd360RiO4WjdrbCn3qUz2DSKMpkMn376KT7//HNMmjQJ\nb7/9tn4u44MPPvCIKMLzfHvmCualxCBM6m97Zy8xOykSFfUUgcrFww8/bHHbn/70J69oEDCM8Xo4\njn3UGpZznZ4h7hyY0GngatPUC9LlVh1Wqp2u8GHI+fouTIoKNtFj2Vh09g7aHYSkUKrR1C7HpMhg\nq/s5GlRypUWm97pYN1eCMhyaNYSr5JQrUcSerl1p0yg+8sgjWLVqFd5++21IJBL95+vXr/eoMMJz\nNLXLceFyD7bmzedbihGzEyPx/dlG9A8qERxIQ/SGWBomdWXo+6OPPsJHH30EjUaDXbt2ITbW8lAn\nYN4Bc4XeywYUOG9hiYU7MDU6ek+RM3en9n/TAronyq4iPMQ9L4OmgT+GuV1N7035xU74i+1bbtbS\n2Y/O3iHUXulBWqJxCTfdn7z2So/RIvsAsRCMgNHP63JhOAzpSpQml11iwHC+FJhmMuLC0suEWsMa\n3dPyix0uR5fawqZR/N3vfoeYmBh9GHhbWxtiY2Nx5513elQY4Tm+P9uIALEQizPi+JZixOykSGhY\n4PylLqtzURMRXc5gAOjo6EBbW5u+001ISHC4vdbWVhQXF6OgoMCh4wy9xcr6LqeqHrizT9O1xRV9\nqNPJNYfV3edYQJelOTPTDr/m8mhgEte8pT0GAjD2rqovcc+36vKM6pAEiaFSaTAI+5OuO4sjSRO4\nkjO0dA4YpZS09J2ob+o1us7O3iHuHUdwRxUOm9GnzzzzjP5tlGEYPPPMMy6flOCXH0qbsSg9DgFi\n31qRMzlGglCJGBW0iN8ib775Jn7xi1/goYcewksvvYTf/e53TrVz7NgxaDQabNq0Cdu3b7d7SEog\nNIh8dLoDcr7j0qVX0zGkUKGpXc45fMrlyTqLpWaspRJzZYjW0Bsy9YzkA0pOQ8MwsFnPy/A+uXJn\nOJMbWTg3lyHr6Bm0K9+xvYE/gPZ+u2NY3KZRVJtMxpr+TowtLrf04XKLDNfM9b1gFoZhtPOKZBQt\ncuzYMezfvx+JiYl4//33ER7u3HKazs5OKJVKFBQUICAgAF9//bVdx7kjC4w7PcXLLTLUXunh9Mo0\nGveeiwtrnp+lNZXugCvCkgFj09IxBpbL2dJKAHdCcEsvSaaVOexpT4cjCRaKyq7ipANVWCxh0yjG\nx8fjD3/4A06fPo0//vGPiI+3rzN1pMiwXC7Hww8/jJ/97Gf46KOPnLgMwl7+XdKMQH8h5qX65vDk\n7MRI1Fzp5lzLRAABAdplBgzDQCaToba21ql2pFKpPhPOkiVLcPHiRbuOc8ciaU/YqcY2udlnGnd6\nis4c48KpbVcQMd9uz5+GcVNiT7PTs6NLPXTxAEKh/d8VS1fLx2Ixm7do+/btCAkJwaeffoqQkBB9\nDlNrOFpk+ODBg8jJyUFhYSE+/PBDKJVUcNZT/FDajIVpcbwl/7ZFRnIUVGrW4WwjE4X169djcHAQ\nmzZtwsaNG/WVZhxl3rx5qK6uBgBUVlZiypQpdh3naGo0TtxoFa0ZaZZlOavGO9ueN3FquaM9RtFN\nZsZ0TlGl1gAMMD0+BNHh2iLljgSBWXoJ4GMNtc1JJbFYjLVr16Kvrw8sy6Kjo8Omt8hVZDgzMxMA\nd5HhkpISPP/88xAIBEhNTUVdXR1SUlJcujDCnCutMlxukSHvp6l8S7HItEkhCA4UofxiJ+bMjOZb\njs8RFxeHwMBA3HDDDbjhhhucbic1NRX+/v7Iz89HREQE7r//fruOc4dRdKWyhSnWIhE1LOtwpKJQ\nyECj4jjGRjtJCaFW05s5ijNJABjYvrfusjGm8uqb+/QadDjyVfH0MLcj2DSKO3fuxMmTJ40W6tta\nFyWTyfRvnlKpFDU1NWb7GBYZlslk+uUeEokEMpnM/isg7OZE+VWIRULMS43hW4pFhAIGsxMjUV5H\neVC5+Pjjj7Fz506sWLECq1evRnJystNtPfvssw4f45Y5Rc8uMzM6D+ugq+gnFHDOT9ZbKacEuOdl\nQTCSrBuwvVyCa6s9XpW7bI89np2h1z1rarj1rEUWhPUPen/U0KZRLC0txeHDhx1q1NEiw7r9IyIi\nIJfLzfYn3MPxsquYnxrjc1GnpmQkR2Lf5+ehUKoh9tFhXr747W9/C6VSiWPHjuH3v/89mpqavJpE\nwx1G0dPrzHSwcM5T5KKJY87SENOjwqT+6JGNLvsQChmzqh9m5zY0ijZeHAyNkq5tbbSt/ce5gqVm\nBAJGfw7Dah4B/tafYy4PVyBgzPLYxkcHc9ardCc25xTnzp2LhoYGhxp1tMiwbn+1Wo2qqiokJSU5\ndD7CNu3dg6i90oMlGb6fmi8jORJKlcb+fJgTjNbWVlRXV6OpqQkzZszw6rmFAo+UYPUYjtoAZ+cU\nTb0000xRurJG1tsY/dnWchfDxPm6FxV7rtVdXrqllw0Go/fC8F7a+t5wNcflfQsYBrGRtu+lK9h0\nGY4dO4Yvv/wSgYGB+os9cuSI1WMMiwynpaXpiwxv27bNqMiwVCrFH/7wB9x1113YunUr9u3bh9zc\nXPj5+bYnMxY5UX4VQgGDRem+GXVqSFJ8KAL9/VBe14mMZMdKzIx3Nm7cCIlEglWrVuHvf/87xGLv\n1sF0JKLQF3DUM3JLIBHMPWpH27Xl4epS1mnPJQCgscsoOuOli0UC81RtVsJFua7U1vVz6bJ0ROq0\nCLS6mPTbGjatz6effupUw44UGZZIJF7L3zhRKSq7iszkKEiC+CsmbC9CoQCzkyJRWtOB3Jsp4MqQ\nN954w+m1ie7AVucWFODHmUFGLBK6ZWG1I7CseQkmWxheX9r0CLR2Ddi3zs7ESpjeJ/uGnbn3yZoR\nhcstMvRYKKumO5flglGuIfITmhlFS8ZVwDCcWYZsXT/X0DKX0+6NaFSbYyGlpaXYuHEj7rzzTiiV\nSqczaBD80devQEVdB5Zm+f7QqY65s6Jx/lIXrVc0gU+DCGg7t5lTw4w6vISY0ZzIC9O5UwcG2Jnz\n01US443jERz2FA2uKyRYDJHIuIv087PQZZqcxnQY1p7O3JLdkASJMWeW5UhsP6H9w6fWkAZzvzCL\nLF2zBbgu1dbLlFKtQWxEkH6No2BkLa49bbsbm1f7yiuv4PXXX0dQUBBEIhFKSko8r4pwK6cqWqBh\ngcWzfSvXqTXmzIyGSq1BpQeTSxPOER8lwTVz43HN3ARMiZUiMT7U5jGWOrOsmVEOG8yIkACL2wL9\njRPJO5qKzs9weJhjKDA4gHtwTXeWmVPCsDRzktkcmj3G2ZLhtOVk6nKIqtQal8JL/SwMjXMZRUv3\n1dCYGfqttj1FDfyEAszSFTy3MAzrDWwaRaFQiIiI0Szt7opeIrzHifKrSJkajsjQQL6l2M20OCnC\nJP4oMai2TWipr69HUVERNBoNurq8+9IwOUYKQNuBCwUMkhJC7RoaNOzwdZlPAEAkFEDkYIRxfHSw\nXYErff0KXHRw7aChNqHA3FuxtPhd1y8KhQKIRUIY2sQwqT9CLHhhRm1buo023CNJkPZFwHR4OiFa\nwrW7RSwFw0yJlUIaJDbyfi1OKTLGd0h3iK1viM6s6PYXMIxRRQ9LJCWYv5DZc6+tYdMoZmRk4JVX\nXkF3dzdEazUzAAAgAElEQVT27NljFElK+D5Dwyr8WN2GJZljZ+gU0D5cc2ZG41wNGUVDfv/73+O1\n117Dq6++CoZhsHXrVq+de0qs1OGhNB0WIysZxuEXbbFIaFZOyRKOrnMzvD7HMrKMHDPyu6GBmTMz\n2qgihCWc9RSFAgazpoYjLTHSyDubMSUMgf72By1a8hSDAkSYlxpjFGRleZ2i8XXoTaQd93JYqTYo\nPsG9j+k9Mq1nCbgeLGXzG/7ss89i6dKlWLduHebPn4+nn37apRMS3uVsdRsUKg2WjjGjCABzZ0Wh\nvrnXKPx8olNUVIQ333wTEokEDMNApfLsnGuAv1D/Nm6p07QHQ//BMEiDgeNzYbqWuJZPuBpqYmi8\nnFqeofN0TDrmkGAxsmZGWbUNls5nagiCTIZwGYbBpKhgSDhqkDrywmFr2YShDEtrLrVGUXduYNok\nqfYzO85vuJ+9LySce7k4mGnTKJ46dQqBgYHIzMxEYGAgiouLXTsj4VWKyq5iSqzU4aEUX2DOzBiw\nLFBC3qIehmEwNKSNhlQoFB6fzvATCBAdph12d2n43eKbv+X5KUveoNUO08XbITYIrBEIGLsDO/QL\n1kculGtIOVwaYF27necyvF9xkUGIChv9u5h+HRyZUrW03Eb3qWHbSpWGM+hIm6x+9PepcSG4Nnuy\nXfeRZUcNqrV1kJ7Gpm999OhRfYHhqqoqhISE6LPrE76NUqXGqcoWrFoxNpMhRIcHYlqcFKfPt+La\n7Mm2D5gAPPbYY7j33ntx5coVbNy4EU8++aTHzxng74eV81y7/zovSMAwSJ4ciporo8V41Rw9d2Ro\nAGLCg3CeI9DKUzYxMT4E4VLjIB6zvpnj3EsyJ6Gls99Im6UhPOueon06Nfr5SwYp06wPIzvy0mQ4\nn2oIl6FSqNQQ+QmgMkmJp92XK2rU9sVpWFY/3CsJFBllBBptyII4N2LTKD7//PP6n1mWxRNPPOF2\nEYRnOHehHQNDKizP8r3aifayIC0WX5y8DLWGdUuKsbHO0qVL8eGHH6Krq8soAM5TODM/kzItHPXN\nveYLvqGNNg2V+BsZRVOvYEqslDOAQoe1DtYVzzkmPMip6/UXCfWpE3VpCS19V7Xa7asIMXNqGBo4\ncq4GB4qgUA7jmjkJNrU5cjdszRcbZsNRKDUIEAvBioVGATEChoHGwVeTzBlRKKvtAMuyYBgGSzMn\nQSBg8O+SZofacRc2jWJPz+iXt6WlBfX19XY1vHPnTlRUVCA9Pd1oIf+HH36IP/7xj5g3bx527doF\nADh06BD+/Oc/Izo6GnPmzPFq8MB45njpVUyKCsb0SWM3l+zC9Dj877e1uNDQbXdwxXjkpZde4vyc\nYRh9YgxPkDw5zOFj4iKDIRYJUVY7mtTd1I4xjG64zDjQRiwSYFqc1Gr7nno1YjgMmanBNi25Jh1J\nhhEbEYTgAD99cgyLnqK185tsjI+SID7KfNojPTHSanFjQxx5STCdk4wICYCfUMD5EqJSaeAXJELm\njCg0tsn1xlsgYMA6mKNB9yKhM7rW8h2LTLxZS/fTXyzElBjnpoxsGsVf/OIX2pMzDEJDQ+16AA3r\nKb7wwgsoKyvTl4668cYbsWjRIrz11lv6/RmGwebNm3H33Xc7dRGEOWq1BicrruIni6fxUpPMXaRO\nC4ckUITi8y0T2ij+5Cc/0RsQb/49xU5Gm5p2xrq5ttEoTQYsWLNAm6lxIRBaGMYzaMwjcAa6mNiU\n2MggxEYGobRGa/CzU0YX1Rtmi7I3aMZom40LC/T3w+CwCn5CAfwCrd8jnaftSK5TP6EAkaEBCBD7\noaldDmmw2OiF2jCIScOy8BMI4CcUGM/DMgw0jHNrQy0FSemuO1Qi5ow2NYUFiyUZk9DY6FwGJZtG\ncd++fQ43aq2eYnh4OPr7zbOc7927F4cPH8Zjjz2GpUuXOnxOwpiSmg7IBpRYPmfsDp0C2nVf81Jj\nUFzZio23pfMthzcWL16s/7myshKXLl3C9OnTkZ7um/fEdCmAmacoAKCGrgigQ1iLCo0JD3K6QDWX\nc2fqKTJgECb1x8ypYQjyF1k0cpaXFFgRYMPYz0uNsZmMQPcyMiVW6207lOuU0Rb57uwdRFO73EyO\naVNcgTmGSzLs8VKzU2L0Q82WLi0hRoLaKz2IiwzWt502PWJkCYfNUziMTaP48MMPW9xmKV+pPfUU\nDbnpppuwbt06dHV1YfPmzTh06NCY9m58ge9+bMSkqGDMcGL4y9dYPDsO3//YhKsd/Xa9KY5nXn75\nZTQ2NiIzMxOfffYZJk2aZJZn2BEKCgrwxRdfYP/+/W5UqV3bds2ceJypbsPgkMrcKI5YQ4ZhjDpu\n+zK/WN7myho1rj7HkhyuYU1bbQHWDbot5X5CAWBjuaMr/aa9xwaMzCPq7rWhh6vNaGO/IQ70F+rv\niaW/fWRoABpbhUaZjGIigsyOmZcag7NVbXaf2xI2jWJsbCyys7ORmZmJsrIylJeX47777rP65bVV\nT9H05kul2reaiIgITJ8+He3t7YiJ8d1CuL6OQqnGifKrWHVN0rh4uViYHgexnwA/lDTh7htn8S2H\nV8rKyowM2M9+9jOn21IoFKiqqvLYd0QoFOi7y5jwILR0DiA4cKTLceGUer12epnhIf7o7rO91pXL\noJp5iq7eKo7j56fFortvyC3rcWcnRaKjZ9CpY3XSdPlHI0O50+kF+PthSKHmDCZiBAwYB0ct9QnN\nLfwtA8R+WGyh5J1RogA3fY9tThhcuXIFa9euRXJyMtauXYuLFy8iISEBkydbDtG2Vk8RMH8j0BnQ\noaEhNDQ0IDIy0uELIUY5fb4VA0MqXJttOzptLBDo74cF6bH44Rw/0Wi+RFpaGqqqqgBoa5NmZWU5\n3dbBgwexdu1aj6511HVU0mAxVs6brF8cP7oA34k2ndCxIG20ZJrUgUoxjuZOtYWpdqGQgSRQhCmx\nUv29mjsrGvNSnXMKAv399EOnDmsbERcg1i7BsVRRRxelqjOKhrbIUiJvK2fV7+9qdLm7Xu1sGkWR\nSISCggKcPXsWBQUFEInMsyaYYlhPUSgU6uspAsC3336LZ555BkVFRXj88ccBaIdwcnNzsXHjRjz0\n0EMQCqnauit8/2MTpk8KwdS4sRt1asqKuQmoa+5FU7v1CujjnRMnTuDRRx/FT3/6Uzz66KP497//\njVWrVmHVqlUOtaNUKlFcXIwlS5Z4SKkxbl1e5sTBwQaRlbOmWa80kjUzCumJ2hdztxtFE+2G7yO6\nyNYAfz+HDLc9zLdgZI2Hc+27r7r1jFwBUQLDjDZ2tKXbN216BNKTXHOGDDPpuILN4dM9e/bg4MGD\n+PjjjzF9+nS89tprdjVsqZ7i9ddfj+uvv95o25YtW7BlyxZ7NRNWkA0ocLKiBffeksq3FLeyIDUW\n/mIhjp1rmtA1Fp2tb2rK4cOHkZOT45a2rKHvc00Ta49ucLxNB/c37SS50qEZYriA3/RYV4forB2e\nmBCK8BB/s2Uf7sCS17ciOwHfnW20q42ZU8LQ0jWgN6Scw6cOeor64fUI2wnebbblpuFTm0YxODgY\nM2bMQEhICFavXo2GhgYkJye75eSE+/n+bCM0LIvrF0zhW4pbCfD3w+LZcfj29BWsv2nWuJgrdYbK\nykocOHAAvb29+uUZb7zxhsPtXLp0CefPn8eBAwdQW1uLwsJC5OXluV2vpWUGFmylfW2OHBMfFYzG\nNveMHFgK0HGmUr01TL+36QbLjIQCxu2VbOalxthMii4QMNBoWJt/i/hoCeKjJbhwWRvdy5UBRyCw\ntbDEfgID/CzmWOXCXee1K6NNcHAwiouLcccdd+Cll15CQUGBm05PuJsviy9jfmqM1ZpzY5WfLJ6G\n739sQnldJzKTo/iWwwvPPvss/vM//9PlQDTDBBl5eXkeMYiA5dJB+moITrWpPSp5chiSJ4fZ7elY\nY8Vc7vl30+FTV9/F/EVCyAx+93Q5N2mQ2Gwodu6saJwzKMkm1BlFO9scHNYmodd53GYvqLpfrdgz\ngS7q2MoNXWgwD2wXbrKKNucU6+vr8eyzzyIwUPvH02gcWA1KeJX65l5cbOzFTQun8i3FI2QmRyEu\nMghfnGjgWwpvJCQkYOnSpUhOTtb/c5XCwkI3KOMmbXoEpk8KMfPELA2r+lq5Vnd7iik25jO9QajE\n3+h3vcdnp8VPSghFVFggAkbWogabDEc7Ul3EeoYfB4didUs77D6CG5ueolAoRGdnJwCgu7sbfn72\n1+civMsXJxoQEizGwvQ4vqV4BIGAwc2LpuHAl9X4+bpMi/Mk45n169fjjjvuwKxZo0PIL7/8Ms+q\nLBPg74dpHGkGPTn8rUshx0WoxLXvjKuqDYccZ7sYWOIoizPiOO/76HpD+5AGiY20SwJFmJ8Wi75+\n7ZISvmY23JUa2aaF+/Wvf40nn3wStbW1ePLJJ/Ef//Ef7jkz4VYGhpT4+vRl5FyT5HQh2LHATYum\novCfVfiq+DLWrpzBtxyvs2fPHjz55JP64dOxPrfqDvVikRAKpRqzpmq9MIGA4ZyLWpY1CQKTmoFZ\nM6MwMGS5JmVmchROn281EOy++y11sUK8o+iSlgPaIVTddcdHBaPmSo9LlyYJFFkeTrWCe7++Xgi0\n0Wg0OHTokFOp3gjv8lXxZQwrNbh1aSLfUjxKREgArpkTj4+P1WHVNUm282SOMxITE3HjjTfyLcNl\n9HONNvqx2IggtHYNWN3HtIB29qwYY0M2gmEBYR3h0gCEW1nWFxwogjRIDNmAQqvXulyH4LPoS6jE\nXz+MqgugcRf6KUW7shO57ya4qymrRlEgEKCzsxPDw8Pw9/e3tivBIxoNi09/qMfSjEmIDvfsxL0v\nsG7lDHz/43f4d2nzhKuzKJPJsGHDBqSmpurnXDxZJcNTxIQHQT7Qa7NTTJ0eYdMomhIcKEJwoMhm\n1CXfODL3Npbga/TC49Gnp0+fxoIFC1BSUoKbb74ZKSkp+kX1lnKeEvxw+nwrmjv68fj6bL6leIUZ\nU8KQNSMK//evWqyYmzDmhxAdQZeLeKxf85RYKSaPlPaJCgt0OjWZJTyVpccdtz02IgiyAcW4HeWw\n5x5Zqojh2nkdyBpgBYtG8Y033sC+ffug0Wjw/vvvu3YWwmOwLIsPvrqA1GnhRmuexjvrrpuBF/9y\nAmer2zA/1cHQ7THM4sWL0dHRgdbWVq+XkXI3Ou2zkyLR1jWA85e63Na2K4nBTXF3B546fXw/p+6K\nAnX8vO5px6JRTEpKwurVq9Hd3W1WKePIkSM2G3akyLBcLsfWrVvR29uL9evXY+3atc5ez4SjtLYD\n1Ze78V+bF4/pDtJR5qfGIGVqOP5+tArzUmImzLW/+eabKCoqwpUrVzB58mQEBQXhr3/9K9+yXMfN\nf77ZiZFo7xlEXVMv5/a0xAifW/5BuAbDMAgQCzFtknO5X3VY9N9ffPFFfPzxx7jrrrtw5MgRo3+2\nMCwyrFQqUVZWpt9244034m9/+5vR/gcPHkROTg4KCwvx4YcfQqn07bkAX+KDry5g+qQQxxe6jnEY\nhsGGW1JRe6UHpypa+JbjNY4dO4b9+/cjMTER77//PsLD+V/35osE+Pvpy4xxeY0x4UGIdUNqMcI5\n3Jf3xpjFGZNcTohgc1DbmVptXEWGdYSHh5uFRZeUlGDZsmUQCARITU1FXV2dw+eciJTUtKO0tgO5\nN6dMGE/JkOxZ0UhPjMC+z89D7ebEzb5KQECAPsBGJpOhtraWb0luIWRkeYI7MzH5CQWYMSUMKVPd\n9+IwEZ8zZ4mLHJu1Tz0y0yuTyRAcrL0hUqkUfX19NveXSLST7hKJBDKZzOr+hHYuce9nlZgxORTL\nsrhrjY13GIbBfatmo6FFhi9PTowsN/fccw8GBwexadMmbNy4EbfffjvfkgAACdESTI1zfthKV67I\nNDuKqyRESyB2Y4JtMon2sXLeZEznSNqgwxOBNu7CI+lpHC0yrNs/IiICcrncbH/CnBPlLbhwuQcv\nPrR0Qr+9pk6LwMrsyfj70fNYMTfB7Z2qr6ErEXXDDTcgKSkJU6b4RuL3GVPC+JZAEG7BI56io0WG\ndfur1WpUVVUhKSnJE7LGDUqVBu99WoGsGVHInhXNtxze+X+3p2NwWI39X1TxLcXjPPLII2BZFu++\n+y5efPFFPPPMM3xLGvcYdVcT9/1zwuARo+hokWFdME9eXh7uuusuyq9qg8+P16O5ox+bV2dMaC9R\nR3R4IHJvnoVPjtWhtrGHbzkepb+/HwzD4Pz58/jb3/6GtrY2viURFliYHov5EywAbjzgMevjSJFh\niURCCQHspK9fgf1fVOOmhVORlBDKtxyfYe3KGfj2TCPe/rAEux+/lrMA6nhgeHgYBQUFmDRJO4+s\nVqt5VjSxcOQlNChgfA/lu0KoxB89smG+ZXAyPlMqjGP+/vl5aDQs8m9N41uKTyHyE2DL3XNwsbEH\nh78bHxGZXOzevRtSqRSPPPIIhoaGkJ+fz7ckgnAIsUiAjKRILJ7tm9V8aJxyDFHb2IOjJy7h/lWz\nET4Oiwi7SnpiJFatSMLfj1ZhQVospsaNv4CtKVOmGAXX3HrrrTyqmXiMz/EH77AsKx4Aq0/M7qtp\n7nxTFWGGRsPifw6VYnKMBDnXUCCSJfJvTUN0WCBee/8slCoqiG2JkpIS5ObmYsOGDT5dj9HXoCl8\n5xH5CTgrlfgaZBTHCF+euoyqhm78fF2WUaFSwpgAsR9+uWEe6pr7sP+f4z8a1VkSEhKwd+9e7N+/\nH52dnbhw4QLfkgjCJ6DedQzQKx9GwScVuG7eZMyZSUswbJEyLQJ5P03F/35bg5Kadr7l+CRRUVEQ\ni7VZZEQikb4Cji8TFRaIqDDvl0bzFxveG3IVxztkFMcAfz1SAZZlcf/q2XxLGTPcecNMZCRF4XeF\nZ9DdN8S3HJ+lqqoKXV1dSE5O5luKTWYnRWJ2UqTXz5s2zqtaEMaQUfRxSi6045vTV/D/bk9HuJSC\na+xFKGCw9d75YFlgd+GZCZMb1RF6enqwfft27Ny5k28pPo2fUIDwECqyPlEgo+jDDCvVePvDEqRN\nj8BPl0znW86YIyIkAFvz5qPsYgfNL5qgUqnwq1/9Cs888wwiI73vfY01Rtcn0svVeMdjRnHnzp3I\ny8vDjh07jD5vbW3Fxo0bkZubq08Fd+jQIdxyyy3Iz8/H7t27PSVpzLH/aBXaewaw5e45bi2aOpGY\nMysaebek4oOvLuBk+VW+5fgMR48eRXl5OXbt2oX8/HyjSjaEOVNjpRCLhBAKyI8Y73hknaJhPcUX\nXngBZWVlyMzMBAC88847eOqpp5CSkoKf//znWLpUm9B68+bNuPvuuz0hZ0xS1dCFj76rxYZbUsfl\nejtvcvcNs1Dd0I3X3j+LPU+uRHy0hG9JvJOTk4OcnBy+ZYwZQiX+WJo5MavRTDQ88tpjrZ7ihQsX\nkJ2djaCgIAQHB+uraezduxf33nuv3nucyAwr1XjjwI9ISgjFXdfP5FvOmEcgYPDLn82DNFiMnQWn\nMDSs4lsSQRA+itfrKWo0owuqpVIpZDIZbrrpJhw5cgRvvvkmXn31VbMqGhONv35cjtauATyZO89n\nsz6MNSRBYvznpkW42jmAtw6em/DfMYIYT7izZqZHelxr9RQNE+rqaidKpdripBEREZg+fTra2yfu\n2rJTFS347Pgl3JczG9OsFOkkHCcxPhS/uGcuvv+xCUeO1fEthyAIN7B4dhwWuLEaidfrKaakpODc\nuXMYGBiAXC43GkIdGhpCQ0PDhI2Ga+nsx2vvn8WCtFjkXJPIt5xxyXXzJmP1iiS8e6QC5Rc7+JZD\nEISLBPj7QeTnPlPm9XqKDz74IF577TXcf//9eOSRRwAABQUFyM3NxcaNG/HQQw+Niewa7mZIocKO\nv51CcKAIv9wwj+okepD7Vs1G2vQI/Pfe0+jsHeRbDkEQPoTX6ynGxsbivffeM9q2ZcsWbNmyxVNS\nfB61WoPdfz+D5o5+7H58BaRBYr4ljWv8hAI8m78AT772HV5+rxgvP7p8TCQqJgjC81AUB8+wLIs/\nHipFcWULns1fgMR4KhzsDcJDAvAfmxbiYmMv/vi/pRR4QxAEADKKvKLRsPjD/5binyca8Ohdc7HI\nR4tujldSp0Xg4Tuy8OWpy/js3/V8yyEIwgegIsM8MaxU481//Ihj55qw5e65+OmSaXxLmpD8dMk0\n1Df34s+HyzEpSoJ5qTF8SyIIgkfIU+SBls5+PPPWMZwou4pf5S0gg8gzD67JwNxZ0XhlbzHqm3v5\nlkMQBI+QUfQiarUGHx+7iC27v4V8QIH//sUKrMhO4FvWhEc4EngTFxmE5/9chOZ2Od+SCILgCTKK\nXkCt1uDYuSY8tutbvPNROW6YPwVvbb0eMyaH8S2NGCEoQITfPrQMwQF+2PY/x8kwEsQEhYyiB2np\n7MeBL6vx4Mtf4dV9pxEVFoDfPXEtHr1rDoICRHzLI0wIk/rjpZ8vh9hPgGd//wNqG3v4lkQQhJeh\nQBs3olJrUN3QjR+r21Bc2Yq65l6IRUIsz5qEnGuSMGtqON8SCRtEhwfilcdW4IW/FOHZt47h53dk\n4eZFUymZAs+4M2MJQViDjKIL9A8qceFyN6oudaGyvgvnG7owrFAjOMAP81Jjse76GViUHkte4Rgj\nTOqPVx67Bn/+vzK89cE5FJVdxebVszE5Rsq3tAnJwvRYMoqE1/CYUdy5cycqKiqQnp5ulN2mtbUV\nv/rVr6BQKPDEE09g6dKlkMvl2Lp1K3p7e7F+/XqsXbvWU7KcZlipRn1zLy5e6UFNYw8uXO5BY5sM\nLAsEB/ghZXoE1t80C5kzojBzchhVtxjjBIj98Pj6bMxPjcW7R8rx2KvfYHHGJNy8aCqyZkbD341Z\n+fnC0jPqa9BLJeFNfKLI8MGDB5GTk4PbbrsNGzduxO233w6RiL8HoUc2jIarfai/2ou6Ju2/K21y\naDQsBAIG0+KkSE+MwJprk5E6LRxTYqUQCGh4bTyyfE48FqTH4suTDfjseD1+++5JiP0ESJ4chqSE\nUMRFBiM6PBBhEn+ESsSQBokhCRT5/EuRtWeUICYyHjGKXEWGdQ/chQsX9HlQdRUySkpK8Pzzz0Mg\nECA1NRV1dXVISUlx+LwDQ0pcbpEBAIRCBn5Cgf6fUMiAAQOWZaFQqTE0rEbfgALdfUPo6B1Ea+cA\nmjv6caVVhr5+BQDtPMa0OClSpkXg1mWJmDE5FNPjQ8eFl0DYj79IiJxrknD78kQ0tMhwtqoVF670\n4NyFdrR2NUCl1pgdExTgB0mgCJIgMUKCxAgJFiMqWMGDem6sPaMEMZHxiFGUyWSYMmUKAG0h4Zqa\nGv02riLDMpkMEokEgLYWo0wm42xXrVYDAFpaWji3F3xSgR9Kmh3WGxggQlRYAGLCg7A0JQgJ0TFI\niA5GXGSwiQc4gPbWAYfbJ8YPfgAWzQzEopmBACaBZVn0DSjQ169A/6AS/QMq9A8p0D+kQv+gEgND\nCsgH+nG5W4lW9AMY/R7zibVnFLD9rBGEr6P77jr6vHnEKDpSZFgqler3j4iI0Bce5kJXfDgvL88T\nsgnCK7S3t2PaNH6zGFl7RgF61ojxg6PPm0eMYnZ2Ng4cOIBbb70VRUVFuOOOO/TbdEWGZ82aBblc\nDolEoi9KfMstt6CqqgpJSUmc7WZkZKCwsBDR0dETsuYiMbZRq9Vob29HRkYG31KsPqMAPWvE2MfZ\n541hPVQzZ8eOHaisrERaWhq2bduG7du3Y9u2bWhtbcUzzzyD4eFhPP7441i2bJk++rSnpwe5ubk+\nGX1KEOMN02eUIAgPGkWCIAiCGGv4dtw4QRAEQXgRMooEQRAEMcKYMoo7d+5EXl4eduzYwauOkpIS\n5ObmYsOGDXj55Zd51aKjoKAAGzZs4FsGPvroI2zatAkbN25Ea2srr1oUCgUeeeQR5Ofn49FHH4VC\n4d11gm1tbVi3bh2ysrL0S5H+8pe/YMOGDdi6dStUKpVX9TgCX8+avffs448/Rm5uLh5++GF9FK27\n4XrO+dJSU1OD3Nxc5OXl4Te/+Q2vWnQY9jl8aWlsbMSyZcuQn5+PzZs3u0XLmDGKhhk4lEolysrK\neNOSkJCAvXv3Yv/+/ejs7MSFCxd40wJoO/+qqirek1a3traiuLgYBQUF2Lt3L2JjY3nV8/333yMz\nMxP79u1DVlYWjh075tXzh4WF4b333sOcOXMAAJ2dnTh16hT279+PlJQUfPXVV17VYy98Pmv23DOl\nUol//OMf2L9/P1avXo1//OMfHtFi+pwXFxfzpiUxMREHDhxAYWEhFAoFSktLedMCGPc5XV1dvGpZ\nvnw59u3bh3fffdct35cxYxS5MnDwRVRUFMRiMQBAJBLxHrJ+8OBBrF27FnzHTB07dgwajQabNm3C\n9u3bjRI18EF4eLg+EURfXx/Cw71bpUQsFuvX/7Esi/LycixatAgA/99ha/D5rNlzzy5fvoxZs2ZB\nIBB4VJ/pc15TU8ObFj+/0dVzw8PDKCsr400LYNzn8K3l5MmTyMvLQ0FBgVu+L2PGKMpkMgQHBwPQ\nZuDo6+vjWRFQVVWFrq4uJCcn86ZBqVSiuLgYS5Ys4U2Djs7OTiiVShQUFCAgIABff/01r3qys7NR\nUVGBnJwcVFRUIDs7m1c9ppmbfOE7zIUvPWtc96yvr8+r91H3nIeEhPCq5euvv8aqVasgFosRGhrK\nmxbTPofPv1FMTAy++OIL7N27F0VFRSgvL3dZy5gxirYycHibnp4ebN++HTt37uRVx+HDh5GTk8Or\nBh1SqRQLFy4EACxZsgQXL17kVc/hw4dx3XXX4ZNPPsHKlStx+PBh3rQwDAOpVKr/DlvL3MQ3vvKs\nWbpn3ryPhs8531puvPFGHDlyBBKJBIGBgbxpMe1z+LwvYrEYAQEBEAqFuO666zB16lSXtYwZo6jL\neoNVDRsAACAASURBVAMARUVFmDt3Lm9aVCoVfvWrX+GZZ55BZGQkbzoA4NKlS3j//ffxwAMPoLa2\nFoWFhbxpmTdvHqqrqwEAlZWV+tyafGH4AISFhaG/v583LSzLIiMjA8XFxQCA48eP8/odtoavPGuW\n7tn06dNRU1MDjUbj0fto+pzzqcUwSCw4OBgymYw3LaZ9TllZGW9aDJ/ps2fPYtq0aS5rGTNFhtPT\n0+Hv74+8vDykpaXxmtH/6NGjKC8vx65duwAATz/9NG8dx9atW/U/5+Xl8ZqrMjU1Ff7+/sjPz0dE\nRATuv/9+3rQAwOrVq/HUU0/h8OHDEIvFeO2117x6fpVKhQceeADV1dV44IEH8NRTT2HBggXYsGED\n4uPjcd9993lVj73w+azZc8/8/Pxw9913Y8OGDQgLC8Pu3bs9ooXrOedLy7Fjx1BQUACWZTF58mQ8\n/vjjaG9v50WLaZ+zZcsWvPPOO7xoOX36NN544w2IxWIsXLgQWVlZLv+NKKMNQRAEQYwwZoZPCYIg\nCMLTkFEkCIIgiBHIKBIEQRDECGQUCYIgCGIEMooEQRAEMQIZRYIgCIIYgYwiQRAEQYxARpEgCIIg\nRiCjSBAEQRAjkFEkCIIgiBHIKBJobGzE+vXr+ZZBEATBO2QUCYIgCGIEMooEAG1pmscffxy33XYb\nnn/+eVCeeIIgJiJkFAkAQHV1NR599FF89tln6O7uxhdffMG3JIIgCK9DRpEAACQmJiI1NRUAcNtt\nt+HMmTM8KyIIgvA+ZBQJAADDMFZ/JwiCmAiQUSQAAHV1daiurgbLsvj888+xYMECviURBEF4HTKK\nBBiGQUpKCt5++23cdtttCAsLw80338y3LIIgCK/DsBRmSBAEQRAAAD9vnmznzp2oqKhAeno6nnvu\nOf3nw8PDePHFF9HU1ISZM2di27Zt3pRFEBOOxsZG3HPPPUhOToZYLMa7777LtySC8Am8ZhQrKiow\nODiIwsJCvPDCCygrK0NmZiYAYO/evVi1ahWWLl3qLTkEMeFZvnw5du3axbcMgvApvDanWFJSguXL\nlwMAli1bhnPnzum3FRcX45tvvkF+fj6++eYbb0kiiAnNyZMnkZeXh4KCAr6lEITP4DVPUSaTYcqU\nKQAAqVSKmpoa/bbLly9j06ZN+OUvf4n8/HysXLkSQqHQrI2hoSGUl5cjOjqacztB+DJqtRrt7e3I\nyMhAQEAAr1piYmLwxRdfQCQS4dFHH8XSpUuRkpKi307PGjHWcfZ585pRlEgkkMvlALQGMiQkRL9N\nKpVi4cKFEIlEmDZtGjo6OhAbG2vWRnl5OfLy8rwlmSA8QmFhIe9LXsRisf7n6667DjU1NUZGkZ41\nYrzg6PPmNaOYnZ2NAwcO4NZbb0VRURHuuOMOo21VVVVIT09HU1MTIiMjOduIjo4GoL3IuLg4r+gm\nCHfR0tKCvLw8/feYT/r7+xEcHAwAOHv2LPLz842207NGjHWcfd68ZhTT09Ph7++PvLw8pKWlITMz\nE9u3b8e2bdvw4IMP4te//jXkcjnuuece+Plxy9IN48TFxWHy5Mnekk4QbsUXhiNPnz6NN954A2Kx\nGAsXLkRWVpbRdnrWiPGCo8+bV5dkGC7DAKBfehEdHU0h4QThRVauXImVK1fyLYMgfA7KaEMQBEEQ\nI5BRJAjCp/nubCMq6zv5lkFMEMgoEgTh87R3D/ItgZggkFEkCIIgiBHIKBIEQVhBpdagWzbEtwzC\nS5BRJKBSa1DV0IWy2g4olGq+5RCET1F1qQulNR18yyC8hFeXZBC+x79LmvH2hyWQDSgAAIH+Qjx8\nRxZuWDCVZ2UE4RsMKehF0Ze53NKH4EARIkMD3dIeGcUJzP5/VuH9L6qxJCMOd94wEyKhAB99dxGv\nvf8j2roHkXtziu1GCGKCwLIsGIbhWwZhQn1zHwBg5Tz3JJkgozhBOXKsDu9/UY0NP01F7s2z9A/7\nLzfMQ0xEEAqPViE5IRQL0ynFF0EQEweaU5yAVDV04S8flyPnmkQjgwgADMMg76epmJ8ag9feP4te\n+TCPSomJwNWOfly43M23DJtUX+4Gy7J8yyA8DBnFCcbAkBK7/34GyQmh2Lw6g3M4SCBg8ERuNlRq\nFvv/WcWDSmIiceFyN6529Nvcr+RCO0pr272giJvWzgGo1Brezk94B68axZ07dyIvLw87duww+vyt\nt97CmjVrkJ+fTwVPPUzh0Sp0y4ax9d758BNa/vOHSwNwz02zcLToEhpa+rwnkPAqBQUF2LBhA98y\n7KJHPozuPn5HLmhOcfzjNaNYUVGBwcFBFBYWQqlUoqysTL+NYRj8+te/xr59+7Bp0yZvSZpw1Db2\n4JMf6rDhJymIj5LY3H/NtUmIDAvEB19e8II6wtsoFApUVVVRRz8B6egZRH1zL98yfBKvGcWSkhIs\nX74cALBs2TKcO3fOaPuuXbtw3333oaqKhus8Acuy+PP/lWFyrBRrVibbdYzIT4h1K2fgh5ImNHfI\nPayQ8DYHDx7E2rVraZ7MAcbLraqo68TlFhnfMnwSrxlFmUymL2oqlUrR1zc6JJefn49Dhw7hhRde\nwEsvveQtSROK42VXcf5SFzavzrA6bGrKzYunQhosxqFvaz2ojvA2SqUSxcXFWLJkCd9SCMKn8JpR\nlEgkkMu13oZMJkNISIh+W2hoKABg2rRp3pIzoVCpNXjv00pkz4rGvJQYh44NEPvh9uVJ+Pb0Ff0C\nf2Lsc/jwYeTk5LitPZVaAzWPQSiXW/q8NBw4TlxFwiJeM4rZ2dkoKioCABQVFWHu3Ln6bTpj2dXV\nBbWaske4m6+Lr+BqRz825cx26vhblkyDhmXx1anLblZG8MWlS5fw/vvv44EHHkBtbS0KCwtdau/f\nJc0oKr/qJnWOU9/c55XhQHcMn7IsS0PWPozXFu+np6fD398feXl5SEtLQ2ZmJrZv345t27bh1Vdf\nRU1NDViWxdatW70laUKgVGnwwVfVWJo5CUkJoU61ER4SgGWZ8fj8+CWsuTYZAgEFZox1DJ+zvLw8\n5OXludymWk0dvT0UV7ZCqdZgeVY831IIDrya0ea5554z+n3btm0AgN/+9rfelDGh+Ob0ZbR1D2Lb\n/Ytdaue25Yn49ds/4NyFdsxLdWwIlvBtXPUSJxKOmP0rrTJoNCymTQox+nxwWOVeUT7IDyVNSE4I\nw6SoYL6lOAwt3h/HqDUsDn1bi8Wz45AY75yXqCM9MQJTYiX44mSDm9QRhGdhWRbHS5vR3ee+sk+O\nDHvWNfXi0tWJucZXrWbH7PpmMorjmJPlV9Hc0Y+7bpjpclsMw+DmRdNwsuIqpX4jxgRqDQulSkNL\nDyYQ351tRFvXgEttkFEcxxz6Vy3SEyOQOj3CLe1dP38KAOCb01fc0h5BeBO1xg0BLjRtCgAYVqp9\nLlhIo9HqaWx3bU01GcVxSs2VblQ3dGPNtfYt1LeHMKk/Fs2Ow9fFl33ugSAmHhoNC6XKcrS66Vf0\nh3NNqKjr9LCqsQfLsg4VF1epNThRdtXnCi/r+iRXwwDJKI5TPv13PaJCA7B4tntLP924cCoaWmS4\n2Egpogh+OX+pC8dLrS0DMX9x6+x1bX5xPL4KXrrah6Kyq3a/6OqSovfIh62+lHibEUcRrmYtJKM4\nDunrV+DYj024Zdl0CB3IXmMP81JiECb1x9fFtGaR4JcuGwE0Gg9ZsAuXu/Hd2UbPNM4DuhcFuwd/\nbOzH1yiS3lN00SqSURyH/OvMFag1LH6y2P0ZgvyEAlw3bzK++7HRp94SCcIUXSfJutG/Y1nWrjJX\nYwmN/j45g7kB4mtmRaM3iq61Q0ZxHPJ18RUsSItFuDTAI+3fuHAqZANKnKps9Uj7BDelpaXYuHEj\n7rzzTiiVSuzevZtvSTbp61egpIanGohu6JwVSjX6B5WuN+TD6AJU7LVmtvayp5XO3kGcr+/S/+7I\nnKbF8+qHT8lTJAyoa+pFXXMvblw41WPnmD4pBMmTQ/FNMUWhepNXXnkFr7/+OoKCgiASiVBaWsq3\nJJtcbOxBj2x4tOO1gtpN4509Mu2SIXe0Vn5x/Afm6O673aOnRsaT4yg7jGtFXSfaurVLJ5rb5Sgq\nu+ryyBMF2hCcfF18GaESMRamx3r0PDcsmIIzVa36DojwPEKhEBERo8trxkIEsCMKKx2MDOVyCDp7\nB1FS046SC+04VdHiUHtcDCuNs8+485b7yt9PM5Kez145tvZz9Kp65dpCA0qVawnlNeQpEqaoNSyO\nnWvCirkJDpWHcoaV2ZPBMMC/xlHAga+TkZGBV155Bd3d3dizZ49RUn1fx56OkitwxlHDoVCORkZa\no7N3EO3dg+joGTTLOtPVN6SPsBR4sACzpwKBuDh3oQ21V3os6HBMiOHfhOtQe5pjXPbnuM47BucU\nd+7ciby8POzYscNsG8uyWLNmDQ4ePOhNSeOKyrpOdMuGsWJugsfPFSrxx8L0OHxzmqJQvcWzzz6L\npUuXYt26dZg/fz6efvppp9uqqalBbm4u8vLy8Jvf/MaNKi1g0lN29g7ihB1VNSoN5p0sN229F2ZZ\n833KL3aisr4TFXWdaDAximW1Hfr1jIxJ8nvDVpra5WjvHrSpzxJKJ+bReuXDaGxzPENPr1yBJo5F\n7TaHQjloNgg04j6C+9O+fgUarvah1STjjC4QytWXBN0QvasG12tGsaKiAoODgygsLIRSqURZWZnR\n9m+++QaRkZEuu74TmWPnmhAVGoDUae7JYGOLGxdMQX1zH+qaaM2iNzh16hQCAwORmZmJwMBAFBcX\nO91WYmIiDhw4gMLCQigUClRWVrpRqQGs0X966pv7MKywnRWlo8ey0dF1fvZ4Jt//2GR7JwN00wJm\nnqLByWqv9KCy3vk5x5NWhncHhriDe85daHdpjbBSpbYY1GKvw2gr+tZSOz9Wt+HS1T5UXeJ+0bFn\n3tme87pqQrxWJaOkpATLly8HACxbtgznzp1DZmamfvunn36K2267zWfG2ccaarUGx8uacf38KV4r\n7TQ/LRahEjG+Lr6MpIRM2wcQLnH06FEwDAOWZVFVVYWQkBAsXLjQqbb8/EYf/eHhYUilUnfJtAv9\ncgmTx12jYR3+/rqzzzBti4939M7eQZRf7MTcWdEIlfg7fHxzuxwMw3BWqDBNdmB4uc7cRa57b087\nGo4hWGeMouH53bUkw2tGUSaTYcoUbe5MqVSKmpoa/bYffvgBixb9//bOPDyKKt3/3+pOd6fTS/Z9\nIyEkJCRAEFkVxQw+wyM7j4pk4KJwR51xX/D+Rp5RxxC944ji6Ix31BFhQFSuM+BlZERHETWyJySB\nLEDYzb519u50/f7odKe6urq7qnqpTnI+zwNJuqvOebu6znnrPeddZkAul8NkGv1lVXzBmYut6Oga\n8GuNNkvMYjL+ffwK1i2aBEUQ2aL2Jb/97W9tv9M0jUcffdSj9r766iu8/vrryM3NtY1Nb9LS0Wtb\nGuNSfoDjBPpTSzcSo7WC+vHmYzRbTvbKFQ2L9Sh0H04I1tJS/QP2Fp2zPUE2tUPH8SnbZLd4OvSZ\nDD0DUCrkUCnkvPpzaFPktTHTNAYHzThT14rM1HD09pnQ2tkHrVqBmIgQ3v1K4mjz9ttvo6FBWIya\nVqtFV5dlTdtgMECvH64xtmfPHqxYsYJYiR7wY8VPCNOpkJkS7td+F8xIgaFnwCuefgTXtLe32/5V\nV1ejrq7Oo/YKCgrw2WefQaPR4Pvvv/eSlBY6uvpRcb4FXT3WZUD7sW0zClhjXpy1IEJAZ22x/vbH\nogvfGD2uPcHO7gEMDnrgtclhKp6sakRpdSPP83m+xgOzmUZ7Vz9aO/vwU3M3ymqbcKXBgLNOllsB\ne/HNjMtwtdGALpHxpaIsxfj4eDz77LOQy+VYvnw5CgoKoFAoXJ6Tn5+P3bt3Y+HChSgpKcGKFSts\n7128eBG/+tWvbIp2+vTpSEtLEyPamISmaRypqMfMSXF+Wzq1khqvx4TkMBw8eglzp5BK4r7k4Ycf\nBmB5Eg4NDbUV6RbDwMAAlEolAECj0cBo9G6AOltROViKHmVRcejN9huXkSCoD5ag7PFE07AEwnlJ\nEXf1GnHibANyx0ciMlRtJ4LJ7FrZmQbNOFXdiMQYLTKSwkT178zNpm9AfMygkEtjt/xppiGXC1w6\n52iLooDzVzvQ3CRuv1eUUly6dCmWLl2K+vp6bNmyBc899xyWLl2Ke++9F/Hx8Zzn5OTkQKVSobCw\nENnZ2cjLy0NRURE2bdqEf/zjHwCAv//97xgcHCQKUSCX6g1oaO3xevJvviyYkYK3Pz2N5vZeRIWp\nJZFhLLBjxw6vtXX48GFs27YNNE0jKSkJ8+bN81rbAIcyYb3vbE+RiVsHrqEuankuK1pxZlm1Gfqg\nVSvtu2Avn9K0V/cZrw9Zf929RoRqVXaORbWX25EQ5Xwp2WqFe+KgwqwacqKqAZpgi3HDN6SL01AU\nYLozDx1kKEW2R7AQWTxdPhWlFA0GA/bv34/PP/8c8fHxeOutt2x7HB9//LHT85599lm7v9lPusuX\nLxcjzpjnaGU9gpVyTJkQLUn/8/KT8O6+Snx57DJWLciSRIbRzAMPPOD0vbfffltUmwUFBSgoKBAr\nklvYEyP77+GJ3PkEeqWBX+iB0LCI2quOSrS714jTtc1IibN3OOKKU6S8aCpaPTllMgrnr7ajvqUH\niTHu91TNZhp9A5a9R7XK+TTe2T3g4MlKUcPKiJl8Y3CQRme3JZCey2IrKf+J1z6lEJhXUdQ+rZ3D\njne+E1FK8cEHH8TixYvx1ltvQasd/gLvvvturwhFEMbxsw2YMiEaSpEb456iUStw05QEfHHkEu4s\nyITcz0u4ox1ny6T+DF8aHDQLqrjiNuvJ0PuGHvsJ+8K1DsREhLh08rBYa+I/e1+/ozPf8bOWrRu2\ncwub0pomwQH9g2Yal+s7kRKndzo2ZBRly+jCp3Wapm0JBlxximNvUK0KQk+fa4dGLktxwDjoYMF5\nXrSZZqwa0IJT/dkvn1p+SpLm7dVXX8Vdd90FrVYLmqZte4ErV670UByCUAw9A6i+1Iobsn2b1s0d\nP581Dk1tvSit4blBT+BNUlKS7V9wcDA6OzvR0dGB9nZhy4Zi6eoZwHdl19HhJksMEy7LkMuiKz/n\nWKj2Sr1rC9HTedilQmW9xXWoUIumsbUHl+sN+K70mtO0iJZQG/5tmmmLZQcIV0x8Hm6E+Cb0Gwdx\nuPSazWtWiDg043iadr4UfO5qu1uFafN05t89J6KU4saNG203FkVR2Lhxo4diEMRSWt0EMw3cMDFG\nUjkmjgtHSpwOB0ouSirHaOaNN97Aww8/jF/+8pd48cUX8eqrr/ql356hyc66tMYHtuK42tiFM3Ut\n/NpwMx8bB/lbVJzN89eJorFLhcaYpls6uJd6KUqY8xHTUqRheXDhnVDby07+HUMJ3637ocL2FGm7\n6+NMKV5r7EJTW4/D6yIS8rhFlFIcHBx0+TfBfxyvakByrA4x4e7jeHwJRVFYOHscjlbWu8xCQhDP\n4cOHsWvXLqSlpeHDDz9EeLjvw296+ow2C1HI0hZ7XrRaiYNuPCoB54rJumzZ5qa4MBv2ROvKUmS/\nxzdlmNE0iKqLrTZF5exSXW10DKsAhj6bzWJyf53NjKVGmgZOVDWirNbR6ubC0OP+wcTQPcAr2b8X\nVk8ZlqLw5VOmJrQ9iHkokyilmJCQgD/96U84fvw4/vznPyMhgbjiS4HZTONkdaPkVqKV+TckQ6GQ\n48CPF6UWZVQSHBwMiqJAURQMBgPOnTvn8z7Lz7fgepPFGeRKg4H3pMW2FG1WDQ27OnpcyGQUp2II\nCrIoKKETZz8rDtAXO7EdXQNoaO2xOQcxFTEvxcq0FHl8PJpj+ZRd99HT/T7ey+VDH8/qLSwoJAMM\nT2R45kk7rBM9+9yilGJRURH0ej32798PvV6PoqIij4QgiONSfSfaDf2YlhUYSlGjVuDWaUn44sdL\nHpeBIThy9913o7e3F+vWrcPatWtxxx13+LV/s5nGVZ4eoa4mt0aOZTA2lzn2FcWmAzOx7kVXliJb\nmfP1qbE60FgddZgWcc3lNvcNsCwmK87CR2iaRu+A6z08Z1YpX3gt48JR6QvaU6Tp4eNp4UaeXe4B\nAQ8VrhDlfapUKrFs2TJ0dnaCpmk0NzcTa1ECTlU3QhkkQ056pNSi2Lhjbhr+9eMl/HD6Om6ZliS1\nOKOKuLg4qNVq3HbbbbjtttskkYGvk4mzw/hYLxRFcZaRsj5oeZpizZWis1pfgMC9Mds5lp9CFTeN\nYQuHucJ8oqoRMybFOWS9MZrMMAztzzormeRJBQ9mu1yE61Vo6+zn/KKFXLcjFcOZsJhWozsGB81D\n14zR79BPdwnL3SFKKRYXF+PIkSN2gfpi46UI4jlV3YRJ6ZGicxT6grSEUOSOj8Rn310gStHL7Nu3\nD8XFxbj55puxZMkSjB8/3u8y0DRw6ORVZI+LcJmP0tnkxqeSPQXXqc/qm7uRGqcXbRG4Ws5kKjO+\n7ZsGzXby9vabeMdYDvc1bDExlX5vvwnHztQ7hFAwwzGGQxHsPxefvUOxhGqHlCLslys9WbJ1d65p\n0IxDJ69iyoRonL3YigHjIGblDesg9oqAWEQpxdOnT2Pv3r1eEYAgjn7jICrrWrBmYbbUojiw+KZ0\nvPTBMdRcbvN7LtbRzO9+9zsYjUYcPnwYb775Jq5du+YyWYYvsHo4nr3Yit4BE1Lj9A7H9PQZ0SLQ\nGcYOyvUSZ9/AIHr6jJzWGJ852aWlaGYqG34T/JHKetuETINGxflmt3GAbGh6WBmynZG42mJatOZh\nrehVXFm71q7Y+4BmM+3wHRhNZnR28w/ncUZfv+Xea2zrsT2EML8jT5eLrYjaU5w6dSouXbrkFQEI\n4qi80AKjyYypmdJksXHFzElxiAlXY++356UWZdTR0NCA6upqXLt2DRkZGX7v31rZHrC4yXNx7EwD\nWjvEK0XK9p9ruJZRPXWyYDrxmGl+SpZpoTS19QpWiMCQ3AKWXplyWhWkt3M59PabcKmeO92a9aHF\nNGi2+x7MtON3cOZCC68VAi6Fat+p5QdTEfLxkBWKKEvx8OHDOHjwINRqte3ifPbZZ14VjOCaspom\nhOlUGBfv+KQuNXK5DItvHo/3/68S/3FHj+ThIqOFtWvXQqvVYvHixfjb3/5mS+jtT5ienFxeoGwP\nSDFQlHt/TYqiuEs48VBirgLTmc319pt4OQV5g+5eo23S5xG1Yue8Y7UsKVCCl21d0dLRh5aOPqTE\n6hxDVYb+PF3bjIzk4WTkZtrRW6bbScFkNjTg8BSiCJI5ZPphHlJ9iYcTk0BEKcX9+/d7Ww6CQEpr\nmjB1QrRfU30J4faZKfjwiyp8dvgC1i/JlVqcUcHWrVv9EpvoCvZSGTv9mzVdmqe4u69pmoYmRGFz\nNrG9zqtty8+gIJnDPhTz8wnJ4OMp15u6bTlM+cRyWgmSy4YfTihLPUpv81NzN/qNg5DLKYZVOvz9\ndDH2Ls1mR1udt2MUDdCUw0vDv3PsufoCUcunp0+fxtq1a7Fy5UoYjUbemTWKi4tRWFiIzZs3273+\nl7/8BWvWrMGdd96JQ4cOiRFpTNHR1Y8L1zskSwDOh5BgBX4+axz+9eNFu0FDEI83FWJZWRlWrVqF\n1atX46WXXhLdzoXrHfjh9HWvyQVYlJa7HKSe4GpOtV8+9e3ky8aaJk1IHKZMJjxuUyi1V9pxud5g\nd92Yuqu+ZdiaHjAO2j6HFeb+pyusS8jOLHkhcZyeIEopvvzyy3j99dcREhIChUKBsrIyt+dUVlai\nt7cXO3fuhNFoRHl5ue29++67Dzt27MAHH3xAvFh5cHooc0UgK0UAWDIvHUYTjX/+cFFqUQgsEhMT\nsX37duzatQstLS2oqakR1U5ze5/XY1Iv1RvcJrum2f74ttfdz5g2l32OQ5mK0M860QafRN9W5PJh\na5cCvJ7CzSlODPnSmiacGyrlZVVufBezrNfbTikyPs+wUgxAS1EulyMiIsL2Nx8hy8rKMHfuXADA\nnDlzUFpaansvKMiybNDX1we9PvD2yAKNUzWNSIzWIjo8sGsXRoaqcdv0ZHx2+IJDVhGCOOrq6lBS\nUgKz2YzWVteZYVwRFRVl25NUKBSQy/mF9bDHOt+q8ULg41pPw4mjjYD5kkv5MD9fY6t/9hPZ8LWs\nAEvSAKtlxkf5CK3wwYS5tMy3nb5+k6AtHhq007YbhixSX+t9UUoxNzcXL7/8Mtra2rBlyxZMnTrV\n7TkGgwEajaUWl06nQ2envVfT888/jyVLlmDdunViRBoz0DSN0tom5Aeg1ykXK+ZnoLO7H18eId7K\nnvLmm2/itddew+9//3tQFIWnnnrK4zarqqrQ2toqScyjJ/jKWmBO/OxlQH/CV+nYl6LiTo9nh49c\nEOIiHZ3pevtMOFJZL8BStHifMj8Tlzexr78XUUrxmWeewezZs7F8+XLccMMNePLJJ92eo9Vq0dVl\nceE2GAwOFuHzzz+PAwcOYMuWLWJEGjP81NyNprbegAzF4CIxWoubpiRiz9fnSOo3DykpKcEbb7wB\nrVYLiqJgMnk2ObS3t6OoqAjFxcW8z+nz4V4fH8L1KgDWRNK0QzFca/5NsUi1ZMqG+bmsn5nzONnw\nFC7UUvTER49t/THlEIv10jOb5vo+ekWEvAhB1Cc5evQo1Go18vLyoFarcezYMbfn5Ofno6SkBIBl\ncDOty4EBiyOGUqmEWYDn1VjkVE0TZDIKeRlRUovCmzt/lonm9l78+/gVqUUZ0VAUhb4+S/zfwMCA\nR9aSyWTC008/jY0bNyIyMnDSBPKFpmmYzfSoLWhtLfKbEqdDZrJzByvm/luQXOZ2adFbzursdtgP\nJ0xoF1O6XTsce4pSONeLCsk4cODAUFFMGlVVVdDr9bjxxhtdnpOTkwOVSoXCwkJkZ2cjLy8PY18k\nNAAAIABJREFURUVF2LRpEzZv3owLFy7AaDRi/fr1oj7IWKG0phFZKeEICVZILQpvxsXrMXNSHPb8\nuwYFNyZzVvUmuOfXv/41fvGLX+DKlStYu3YtHnvsMdFtHThwABUVFXjllVcAAE8++SSvbRAmWanh\nPokTcwUzgtFM05ZwECP3rJscq0NCtMaWX3NCchhqr/inMLOnDDupUKBcKH6m5aeQy9w66bizwtIT\nQ3lZ2+xIUldj2pUXr0w2HObR1WtEd68RiqDhtiL1ar/FiloRpRR/+9vf2n6naRqPPvoor/OeffZZ\nu783bdoEAHjhhRfEiDHmGBw0o/xcM5bOG1n7PwCw6vYsPP7aIXxz4ip+NiNFanFGJLNnz8aePXvQ\n2tpq5+gmhkWLFmHRokW8jo0MDUZyrA6lNU12rzMnLy44g+s9ZWgubmzrgdkMqJTOZZDJKLvJWkg1\nealhyupM7MkZUWhgOAPRcJMRBu7jP/UafgkhhFiKrmA6FVkTPzC3WSakhI0MpdjePvy0VV9fj7q6\nOq8JRHBO9eU2dPeZMDUzMEpFCSEjKQwzcuLw8Zc1mH9Dkl3AN8E1L774IufrFEXZHix9SbAqCKFa\n5/taTqHA6SrIFTQvFGuNxyA3kzHzXU88L71JbGSIzZPSGXK7vT9uuUPU9qtFfJ4/vHUN2M1489pS\n1PBnkWJVSZRSfPjhhwFYvqzQ0FC/DEwCcLKqEVq1ApkpYe4PDkDuuT0Lj79+CN+cvIqCG4m1yJfb\nb7/dtl0hRQYjZxOeO1lkFAUzh1b05idw5+BB8VAu/iY6TO1WKcqGlD0F53IzLcgguWxIkbjWjL6O\n8RsNiFKKO3bs8LYcBB6cqG7E1MzoEWtlZSRbrMWPDtbg1mnEWuTLzJkzbb+fOXMGFy9exLhx45CT\nk+OX/p3pEgqu9xWdnjf0RmK0FteauhAfpeFdA4/dpDtL0W4ZknG7RYWp0dzOv97gjElxOFpZ7/a4\niNBgt8nQ+SzjMh9EnB1ur/D5JUN3l/yG74MD+zhnD04atQJ6jZLz+xX6HfgLUUrxgQcecPoeyUjj\nG9oN/Th3pR13zBkntSgeYbUWvyZ7i4J56aWXcPXqVeTl5eGf//wn4uPjHfbpfYHTiZIC4iI1UCrk\nKD/XzHGes/YsP6PD1bjW1CUogwsbV5aiUmH/HvNzuNsPZcO3ZmlqnN6mFJnLgEz4LDXavGpdlNGy\nWxqWUUNhKu5adn0AX2Pa4Tgn58lkFDJTwjmV4qT0SBw6edVRQiciakMU6Oqx7DumxOlwud4++bm3\nHL9EKcXY2Fjk5+cjLy8P5eXlqKiowL333ktMcx9SWtMIAMjPGnn7iUys1iLZWxROeXk5du3aZfv7\nnnvu8Uu/zuZJqweiO4uQjXWa0IVYnDqiQtVIjrVMckIthyAO5ZadFgFFkAxhrH1QpjR8yjPZnctT\nWTCtQLmM2xuUHUaiVgU5BKSzrUmrVW0vE2X7UBalOGwrxoSHIC4qxJYS0oq30qSyvU+d1TXhu2Ad\nplO5LQM1LSsGx882oKfPhHBdMNISQu2UalykxitKUdSMdOXKFSxbtgzjx4/HsmXLcP78eSQmJiIp\niVRa9xXHzjZgXLwekaGBndqND/fcnoWfWrrxDcdTIsE52dnZqKqqAmDJRDN58mT/dOzG4nO65+im\nWZmMwi3TkhATEQJdiBKT0oXHS3LFKcaEhyBcF2xTyrZsK4xDE2O0bttmfiy+y4pMcZwtk7JfnzEp\nzu0xXN0zX5NRFHr6TDYHJpls+KHDDh4Jb1LidK4PciLPrLx4zM6Ld3scF3wcaihq2JvYWbvTJnpu\nNIiyFBUKBbZt24bJkyfj9OnTUChGTszcSMQ0aMaJsw1YdFO61KJ4BbK3KI4ff/wRX3/9NRQKBYxG\nI0JCQrB48WIAvq1nap1/mLXtAPeKQqWUO8mA495cUSnliI0IcVgic8ikwiMUwHoO05rRhSgxcVwE\nqi46zx9LgbLbp5uUHonKC66L5TIfEORyCuAoJShk+dR6JNe1Ztad5Btu4tZCpiikJYSiqa3Xznpl\nh9dwyWNdYo4KU0MRJOO9TzzUrVPUwUEOWWyc3Xu6ECUvq9MVopTili1b8Mknn2Dfvn0YN24cXnvt\nNdECENxzpq4F3X0mzifKkYp1b/HQqau4bTrZW+SDVHVMrRNQTlokymqbGK9bflon5IRoDZJjdVDI\nZbjS2IVwncohthEAtCFKt84os3Lj0dUz4KAU2XgSCuDuVEoGRGqDbeEoUWHuV2mYy7nOsu1wKTC2\n0wkfS5EJuy8a3JY6V9xoSpwOXT1GtHb2MQr52h+nDg6yKyDtSp5J6ZGob+nGT83dvNPmuSorPS0r\nxlYeiysVnLcRpRQ1Gg0yMjKg1+uxZMkSXLp0acQlFB5JHK1sQLhOhYykkRmKwUVGchimZ8fio4M1\nuCWfWIt8OHPmDHbv3o2Ojg5beMbWrVt93q/VKYU9EVGsnzQNBCstU8q4eD0GzbSdc4SVnHER6OWR\nQ5WP9WN1tOGyJtgIja3Ta5TIHc8vnWJcpGUJWG63p8hfKUaH2ytFa8FhtUoxJLtrWR36osFbczD3\nJq2nsHWZg5Lm0yajHXeJHFyJGiSXIYjl58Q+PCN5eG70NGZSdEYbjUaDY8eOYcWKFXjxxRexbds2\njwQhcEPTNI5W1mN6duyIysjBh3tuz8KTW7/Ft6XXMP+GZKnFCXieeeYZ/OY3v0FMjH+drYaVIlsr\nUnavsyc9uYzCtKwYfHvqmuXvocrtcrkMWrX7hyCu+z0yNNhOeViXT/UhSuSmRwpKOu9q7szPioEm\nmP/0GBWmdtjvdzZeOZdCWdN8hD4YN+bE2tI5Mk8J1SrR0WVfuJvdF01zK66EaI0t8YFSIYdeo0RC\nlAbVlwcczmciZ8nsTklzZbwxm/grxazUcJf7jMz+o8PVSIzWMt5zKZpbRCnFuro67NixA2vWrAEA\nksTbh1y41oGfWrrxy+V5UovidTJTwjFtYgw+/rIG8/KTRm1yZ2+RmJiI2bNn+71f6+TE/nqsf6pV\nQQjTqZAS6+igwZy8pmfHClJa7PshPkrj4GHIPEZoPmBXD5katULQ/chlnQjxyGRHlshllN3nsZ4T\nH6VBemKow14tl6xcioZ5noyCU+emcJ3KLoWc0OVc22dnZKYxmsxOwybYSjYuUuO6/aHDb5qa6Hhf\nSmEpyuVytLRYNpzb2tpsRYL5UFxcjMrKSuTk5NjFWL355pv47rvvAACPPvqoJIM/EPn+9HVo1ApM\nmTAySkUJZdXPsrDxzcP44fR13Dw1UWpxApq7774bK1asQGZmpm3gv/TSS6LaamxsxP3334/z58+j\ntLQUMifxflFhapsXI3uyYe4p8rk/g5VBCOaXWtPSrpP+mKiUlnW1cH2w03as5wkpdyT0+YzPRDxl\nQrRD7CTf9mzOQpRFwVgtbevrTKWlCJIhNX74AUVGUcifGAOtWoG668PJvpl2G9uhJzMlHAnRWpyq\nbnRonw/WS2t1VLI+WEWHqe2UYlqCHnK5DD19HB5JLrDKyfUw4OnyqaiNnP/6r//CY489hnPnzuGx\nxx7Dxo0beZ1XWVmJ3t5e7Ny5E0ajEeXl5bb3li1bht27d+Odd97BW2+9JUasUQdN0/iu9Dpm5cYJ\nDjYeKWSnRWByRhQ+/rJGcOzYWGPLli349a9/jcLCQqxevRqFhYWi2woLC8MHH3yAKVOmuDxufGIo\no2KD6O5EwWciVinkuHlqImIjHIvccqELUdqW2lxZgu6UHDtsgXm4bSmP1USYToWQYIWT8Aphy5Gu\nzp+cETXUz/Br2qE8qYOMMcYVV870ZrU+cABcDyj8bgZrF5GhwbbzZkyKw+Sh0ncpcXokRmtdOtpw\n4ap7vy+fms1mfPrpp6JSvZWVlWHu3LkAgDlz5qC0tBR5eZZlQWuMo0Kh8Nj8HS2M5qVTJncvyMSz\nf/4Bx87UY2ZuvPsTxihpaWkoKCjwSltKpRJKpQCzDc6tF1/Bp32Kongv5dE0bRfH5skefXKsDvUt\nPVAEydDda7RrKy5K4xBoz5bZ8TXX/VmVEi/lwWqMGVbCVIRMncglE/PyOHOyshKssveEYSvRlDhL\nGS+ZjIJaFWRzJHLWvjtc3Rue+l4IVooymQwtLS3o7++HSiUsc77BYEByssWhQqfToba21uGYP/7x\nj1i1apVQsUYl/z5xBXqNctQunVrJGx+F7HER+PirGsyYFEceipxgMBiwevVqTJw4cUgZ+KdKhhWp\nvxWh1oQ7PJk8g+QyzM6Lt4RL9RrtJGN65fLNmep2yU+AqK4+FlMRcq7LUNx/OFyroT81agVy0yMR\nzFJybHkpioKC7ULKel8IvnQ/EKQUjx8/junTp6OsrAwLFixAVlYW5HLLB+WT81Sr1aKry/IEZTAY\noNfr7d4/ePAgOjs7cccddwgRa1RiNJnxzYmruHVa0qhdOrVCURTu+lkmXnj3R5yubcaUzNH9ECAW\na85hqR4a2MVuR3paR284dlkvAVe1eIqyWEUatcIuxs8VMeEhyEoNd3jdW6WZmB6d7r8/y/tyOQWl\nwrkl6KAQGe/zvUd4fzxbcy4sRX862mzduhU7duyA2WzGhx9+KLiz/Px87N69GwsXLkRJSQlWrFhh\ne6+qqgq7du3C//zP/whudzRyoqoBnd0DY6bE0g0TY5CeEIqPv6ohStEJM2fORHNzMxoaGrxaRorv\nxMXWIf4IEcodH4nBQRpnXWSeEYu/6ivmZ0bD5Ga/nOlI4+q6Oq2E4WYp1EpqvB66ECXO1LVwB9Yz\nXrNen5RYnUPOVL6Xju9jk9DvwtWt59c9xfT0dCxZsgRtbW0OlTL4pJnKycmBSqVCYWEhsrOzkZeX\nh6KiImzatAmvvPIKWlpasH79euh0OvzpT38S9klGGQePXEZagh7piaFSi+IXKIrCnT+bgP/efhxV\nl1oxMdWzyvKjkTfeeAMlJSW4cuUKkpKSEBISgr/+9a+i2jKZTNiwYQOqq6uxfv16PPHEE25zqcpl\nMug1SqQlhCJITtkC9X1JZKgaHV3cKbtyx/PMlepkkvSGUrc+UDAndcdUdDLI3RTZsIri7Plk2PJy\nL5OrTyWXUYgOVwN17nOcyuUyzMqLhzJIxpFZyLXzle3a8tWKQr8KHnuKXCFCfBB0V7/wwgsAgM2b\nN4suWcM+z7on8t5774lqbzRS39KNY2fr8eAKPyV8DhBm5yUgMVqDPV/VYtN9M92fMMY4fPgwPv74\nY6xduxbbt2/HU089JbqtoKAgwQk3ZDIqoKq0CE2O706hpCXoUXe9U5Qs7KVldyTH6nClYVjRDGeA\n4RbSmfWXFKNFZ/cAQtSMqZyHKLdMsy/e4CyTjbOSWcOVrbg7E6zjvHi89VqpVfzKfbERtVnljxpu\nY5n939chRBWEW8dYlhe5jMLK+RNwpLIeF38SNzmNZoKDg20ONgaDAefOnZNapBGBqwk0e5xlRUIR\nJENKnN7FkdzYcnFy9StgpncfcjHUH0uzhwQrMD07FhGMOE0xy+rW8/lUq2AK5KzaCCV4T5GfzNoQ\nS2iJKys/ZGiPM8iFY48rRrcHxwikt9+Eg0cv42czUh3clscCt96QjKjQYHzyVY3UogQcd911F3p7\ne7Fu3TqsXbt27DmkebjayWWFhetVQ++JbhSAvVLjowhs5azYzTk5dVgpcr8frAyypbwTsyocF6nB\nTVMTnTv1cbR5y7Qkp/GhzixPZ/BVnhlJYbgxJ9blMTERIbghO9YWmymUsTfrBjgHSi6it9+ERTel\nSS2KJCiCZFh+awbe21eBX/w8G/FRrtM9jSWsZaJuu+02pKen28KbRjvs+XJCchi6BWZAcY6w2Zud\n4DwyLBitnX2cGYFchZCwU9K5czQRsqfI1mB8nYSFeOO6O9JXHtIyVvo7Z2jVCrSL7UPkeQQf0G8c\nxN+/OYdbpyW5zf03mrl9Viq0IUr879eOcaxjmQcffBA0TeO9997DCy+8wDuTlNQEK+VeDStKiNZi\nQrJj2IIzXE3QwxYNP80xNTMGN01JGJYlSot5+Ymeh3e4C94fat9VpQlbU6y2NCItJrs2hR7vxrJl\nE0jBPUQpBhBf/HgJ7V39uLNggtSiSEqwMghL543HV8euoKWj1/0JY4Tu7m5QFIWzZ8/i/fffR2Nj\no9Qi8WLGpDiHiuxCUA9Vq4h0kd/UFaFaS+YeLm9ZSpAFZrGm2GXO2ErXGtMXE8HfEcjdHpwgpcj4\nfdrEGEyZwK/8lRD4p50beVqRKMUAoafPiI++rMat05KQFCPOlXg0ccfcNKgUMnz6NXEmsdLf349t\n27YhPt6iYAYH3dckDASszkFiUSnkuGVaksuk366IDFXjpikJnHv0Nqm8OCkHyWW4ZVqSYO9YV1gt\nUV75gRnXWheidJlJRizuvk93ISaBDFGKAcKn35xDd68Jv/h5ttSiBAQatQKLbk7HgZKLaOt0XaV9\nrPCHP/wBOp0ODz74IPr6+myl2wjucVbE2mqB8V0+9RXu7CrrnqIrpWjLruOD7TzhDzXW68qPQNKd\nRCkGAI1tPfj7N+ex6KY0xPDM9j8WWDpvPORyCp9+Q6xFAEhOTsbKlSsREhKC4OBgLFy4UGqRRg1S\nWzRWpeM0LlDGf5k3EHIHC1XMgZQykCjFAOC9fRUICQ7CqgVZUosSUOhClFh0Uzr++cNFtBmItUgY\nXUSHDy+vKoJkyMuIwngnGaz47CkGgC4cRmhMRgBBlKLEnKxqxA+nf8K9i3K84iU22lh2SwbkMgp7\n/k08UQmji5y0SLvMMhH6YOfLvAKWT32B0JR+w1nehAmlUsptCRWkgihFCenrN+Gt/y1D7vhIzB9j\n2Wv4otcosWReOj7/4SKa2ognKmFsIsT71BdEh6txw8QY3qE1Qr16dSEWD+HJGVGSbyERpSghO/9V\nhbbOPjx059SA2AcIVJbfkoFgZRB2/atKalEIBElhl3DyJ9oQYUWphRAVpsacyQm8AvN9jd+VYnFx\nMQoLC7F582a71/fs2YOCggI8/fTT/hZJEs7WtWLvt+exakEWEqO58wcSLGjUCqxakImvjl8mOVG9\niLOxOJYJksts6dICjckZUcjjWxnERwi2UwWcECh1Y/0qRWVlJXp7e7Fz504YjUaUl5fb3isoKMD7\n77/vT3Eko2/AhK0fncT4pDCsnJ8htTgjgoVzxiE2IgTv/KM8oDzVRiquxuJYZlZePGbnJbg/UALC\n9cEuYw6tSQoCCalDXcTgV6VYVlaGuXPnAgDmzJmD0tJS23vh4eGc+QNHI9v+7wwa23rx+Kp8pxvr\nBHsUQXL857I8nD7XjO/KrkstzojH1Vgca1AUbKs1chnleco2iZiUFokZk+J82keETlgChZH4/OrX\nGdlgMECjseT01Ol06Owce0thx882YP/3dVi3KEdUqZqxzIycOEzPjsW7e8vR1TMgtTgjmkAdi5PS\nIzFlQrRf+5yXn4SM5DC/9ukL5HKZzyvrZKWGe5SybyTgV6Wo1WrR1dUFwDIo9Xp7pTDanU1aOnrx\n2ocnMS0rBovmpkstzojkwZWT0ds/iL/8gyz3eYK7sSgVUWFqhOlUUotBcIJMRgly9kmJG3kpK/2q\nFPPz81FSUgIAKCkpwdSpU+3eH817RaZBM1752wnIZRQev2eayyKZBOfEhIdgw9JcfH3iKg6fuia1\nOCMWd2ORQPCUW6YlIS2BOxlBIONXpZiTkwOVSoXCwkLI5XLk5eWhqKgIAPD1119j48aNKCkpwSOP\nPOJPsfzC+/9XibMXW/H0L6aTJ2EPWTAjBXOnJOCNj0/hcn1gLPuNNLjGIoFAkKDI8LPPPmv396ZN\nmwAA8+fPx/z58/0tjl84eOQS9n17ARuW5iIvw/tlXMYaFEXhkbum4qk3vsUL7x3B7x+6yasVCcYK\n7LFIIBBI8L7POX62AW/uKcPtM1Ox5Gayj+gtQoIVeG7DbJhMZjz3lxKSG5VAIHgFohR9yImqBhRv\nO4ppWTH41crJo96RyN/ERoTgd/fPRkf3AJ7543e43twltUgEAmGEQ5Sij/j38cso+utRTJkQjf/3\nHzeSeEQfkRqnx+8fuhmggCdeO4SSchLDSCAQxENmai/T22/Cn/+3DK99eArz8hPxm3U3SpqvcCwQ\nH6XBlsduQe74KBRvO4ZXd51AR1e/1GIRCIQRiN8dbUYrg2Ya3566ir99fhbthn78clkeFt2URpZM\n/YRWrcCz987Al0cv4719FTh2pgGrb8/CwjnjXKbGIhAIBCZEKXpIU1svvjl5BQd+vITG1h7MyInD\nffdPIkm+JYCiKCyYmYrpObHYvv8s3t1XgX2HL2DVgizMvyGJLGETCAS3EKUogo6ufnxXdh2HS6/h\nTF0LguQyzMlLwDNrpiMzJVxq8cY84bpgPLoqH0tvGY+/fX4WWz86hd0Hq7FyfgbmT08WXDCVQCCM\nHcjswBOaplF+vhn7v6/DkYp60ACmZETh4TunYvbkBGjV0tcBI9gzLl6PTffNxLmr7fj4yxr8+dPT\n2PF5FRbMSMHts1KJNU8gEBwgStENNE3jSGU9PjpYjXNXO5AUo8W6RZNwy7REhAvMGE+QhoykMPxm\n3Qxcb+7CZ4cv4F8/XsSn35zDhOQwzM6Lx/TsWKTG6UnqPQKBQJSiK643d+HVnSdQc7kdOWkReP4/\nZ2FaVgxxnhmhJERpcf/yyfiPO3JwtLIe3566ht1fVGP7P89CF6JAVmoEMpPDkJ4YirSEUESHq8l3\nTSCMMYhSdEHdtU4EK4Pwu1/OxtTMaDJBjhKClUGYl5+EeflJ6Bsw4WxdKyovtKDqUiv2Hr6A7l4j\nAECjViAtQY/xiWHISA7DxNRwxEaEkPuAQBjF+FUpFhcXo7KyEjk5OXZ5FxsaGvD0009jYGAAjz76\nKGbPnu1PsZwyd0oC5k4JzCrcBO8QrAxCflYM8rNiAFiWy5vaelF3vQMXrnei7noHfii/jr3fngcA\nhGlVyE6LQE5aJHLTI5GWoB+RXq2HDh3Cyy+/jPDwcOzatUtqcQiEgMFvSrGyshK9vb3YuXMnnn/+\neZSXl9sy87/zzjt4/PHHkZWVhfvvvz9glCJh7EFRFGIiQhATEYKZucPFVNsN/ai+1IqqS204U9eC\nD/afgWnQDLVKjompEchJj8St05IQF6mRUHr+5OfnY+/evVi3bp3UohAIAYXflGJZWRnmzp0LAJgz\nZw5KS0ttSrGmpsZWLUOj0aCrqwtaLfEMJAQOYToVZubG2xTlgHEQNZfbUHmhBWfqWvH3b86hub0X\nD905MuoSBkpRYQIh0PCbUjQYDEhOTgYA6HQ61NbW2t4zm82233U6HQwGA6dSHBwcBADU19f7WFoC\nwT1hKmButgZzszWg6SQAwNWrV50eb71vrfdxIEPGGmGkI3a8+U0parVadHVZqhgYDAa7J1Wm40JX\nV5fTp9impiYAQGFhoQ8lJRB8S1NTE1JTU/3SV3NzMx5//HG716Kjo7FlyxaX55GxRhgtCB1vflOK\n+fn52L17NxYuXIiSkhKsWLHC9l5WVhZKS0uRmZmJrq4uaDTc+zK5ubnYuXMnoqOjIZeTfJaEkcXg\n4CCampqQm5vrtz6joqKwY8cOweeRsUYY6YgdbxRN07SPZHJg8+bNOHPmDLKzs7Fp0yYUFRVh06ZN\naGhowMaNG9Hf349HHnkEc+bM8ZdIBMKYpKKiAq+++ioqKiqQl5eHt99+G0qlUmqxCATJ8atSJBAI\nBAIhkBl5AVYEAoFAIPgIohQJBAKBQBhixCnFQ4cOYeHChVi9erVf+isuLkZhYSE2b97sl/4AoLGx\nEcuXL8fkyZPtwlV8SVlZGVatWoXVq1fjpZde8kuftbW1WLVqFQoLC/Hcc8/5pU8r27Zt89s9BFhC\nNebMmYM1a9Zg/fr1futXLFLc9wD3vf/uu+9i9erVeOqpp2AymQAA+/btw6pVq/DAAw/YvNq9DdeY\nkEoWrrEilSxWmGNIKlm4xpWnsow4pWjNxOEPmFl4jEYjysvL/dJvWFgYPvjgA0yZMsUv/QFAYmIi\ntm/fjl27dqGlpQU1NTU+7zMtLQ27d+/Gzp07MTAwgDNnzvi8TwAYGBhAVVWV33OYzp07Fzt27MB7\n773n136FItV9Dzje+y0tLTh69Ch27dqFrKwsfPnllzAajfjoo4+wa9cuLFmyBB999JFPZGGPiWPH\njkkmC3usnD59WjJZAPsx1NraKqkszHHljftlxClFvV7vNy85riw8/kCpVPo940hUVJTtuioUCr+4\n4QcFDUcE9ff3Q6fT+bxPAPjkk0+wbNky+NvH7MiRIygsLMS2bdv82q9QpLrvAft7n6ZpVFRUYMaM\nGXayXL58GZmZmZDJZD6Vjz0mamtrJZOFPVbKy8slkwWwH0NSy8IcV964X0acUvQnBoPBFjOp0+nQ\n2dkpsUS+p6qqCq2trRg/frxf+vvqq6+wePFiqFQqW8YjX2I0GnHs2DHMmjXL530xiYmJwRdffIHt\n27ejpKQE1dXVfu1fCIF03zOzW2m1WnR2dqKzs9PhNV9iHRN6vV5SWaxjRalUIjQ0VDJZ2GNIyu+I\nPa4qKio8liVglWJzczPWrFlj9++JJ57wqwyusvCMRtrb21FUVITi4mK/9VlQUIDPPvsMGo0G33//\nvc/727t3LxYtWuTzftgolUoEBwdDLpfj1ltvtUtzGGgEyn1PURR0Op1NFmu2K67XfAVzTEgti3Ws\naLVaqNVqyWRhjyEprwt7XKWkpHgsS8AqRWsmDuY/d6mpvE1+fj5KSkoAACUlJZg61f/Jnv21xGcy\nmfD0009j48aNiIyM9EufAwMDtt81Gg2MRqPP+7x48SI+/PBDbNiwAefOncPOnTt93icAdHd3234/\nefIkUlJS/NKvGALhvgcs935ubi6OHTsGAPjhhx8wdepUjBs3DrW1tTCbzbbXfAF7TEiZGs9aAAAB\nSUlEQVQpC3usGAwGyWRhj6Hy8nLJZGGPq9TUVI9lGXFFhq2ZOGpra3Hffff5NBNHTk4OVCoVCgsL\nkZ2dbavq4WtMJhM2bNiA6upqrF+/Hk888QQmT57s0z4PHDiAiooKvPLKKwCAJ5980ueT4eHDh7Ft\n2zbQNI2kpCTMmzfPp/0BwFNPPWX7vbCw0G+5PY8fP46tW7dCqVTixhtv9Pn36QlS3feA/b2/YcMG\nPP7445g+fTpWr16NhIQE3HvvvQgKCsKdd96J1atXIywsDH/4wx98IgvXmJBKFvZYeeSRR9DU1CSJ\nLOwx9NBDD+Gdd96RRBauceXpd0Qy2hAIBAKBMETALp8SCAQCgeBviFIkEAgEAmEIohQJBAKBQBiC\nKEUCgUAgEIYgSpFAIBAIhCGIUiQQCAQCYQiiFAkEAoFAGIIoRQKBQCAQhvj/KxeNsgX4/+gAAAAA\nSUVORK5CYII=\n", 171 | "text/plain": [ 172 | "" 173 | ] 174 | }, 175 | "metadata": {}, 176 | "output_type": "display_data" 177 | } 178 | ], 179 | "source": [ 180 | "fit.plot(['a', 'b']);\n", 181 | "plt.tight_layout()" 182 | ] 183 | } 184 | ], 185 | "metadata": { 186 | "kernelspec": { 187 | "display_name": "Python 3", 188 | "language": "python", 189 | "name": "python3" 190 | }, 191 | "language_info": { 192 | "codemirror_mode": { 193 | "name": "ipython", 194 | "version": 3 195 | }, 196 | "file_extension": ".py", 197 | "mimetype": "text/x-python", 198 | "name": "python", 199 | "nbconvert_exporter": "python", 200 | "pygments_lexer": "ipython3", 201 | "version": "3.4.3" 202 | } 203 | }, 204 | "nbformat": 4, 205 | "nbformat_minor": 0 206 | } 207 | -------------------------------------------------------------------------------- /probprog2.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "slide" 8 | } 9 | }, 10 | "source": [ 11 | "# 第2部 モンテカルロ法と推定\n", 12 | "\n", 13 | "- 2.1 確率論的プログラミングとは\n", 14 | "- 2.2 点推定,区間推定\n", 15 | " - EAP\n", 16 | " - MAP\n", 17 | " - MED\n", 18 | " - 区間推定\n", 19 | "- 2.2 モンテカルロサンプリングとパラメータ推定\n", 20 | "- 2.4 マルコフ鎖モンテカルロ(MCMC)のさわり\n", 21 | "- 2.5 計算機実装(コイン投げ coin: pymc3, pystan)\n", 22 | " - pymc3\n", 23 | " - pystan" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "## 2.1 確率論的プログラミングとは\n", 31 | "\n", 32 | "![alt text](fig/infer.png \"infer\")\n", 33 | "\n", 34 | "- 確率分布としてパラメータを決める\n", 35 | "- パラメータを含んだ事前分布と尤度を用いて数式をたてる.これをモデリングという.\n", 36 | "- ベイズの定理に観測データを適用して,ベイズ更新し事後分布を求める\n", 37 | "- 事後分布から直接,点推定,区間推定はできない.\n", 38 | "- マルコフチェーン・モンテカルロでパラメータを推定する" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "## 2.2 点推定,区間推定\n", 46 | "\n", 47 | "### 2.2.1 点推定\n", 48 | "\n", 49 | "#### 事後期待値(expected a posteriori, EAP): \n", 50 | "\n", 51 | "事後分布の期待値を推定値とする\n", 52 | "\n", 53 | "$$\n", 54 | "\\hat{\\theta_{eap}} = E[\\theta|D]\\\\\n", 55 | " = \\int d\\theta \\cdot \\theta \\cdot p(\\theta|D) \\\\\n", 56 | " = \\int d\\theta \\cdot \\theta \\cdot \\frac{p(D|\\theta) p(\\theta)}{p(D)}\n", 57 | "$$\n", 58 | "\n", 59 | "#### 事後確率最大値(maximum a posteriori, MAP): \n", 60 | "\n", 61 | "事後分布の最大値を期待値の推定値とする\n", 62 | "\n", 63 | "$$\n", 64 | "\\hat{\\theta_{map}} = max_\\theta p(\\theta|D)\n", 65 | "$$\n", 66 | "\n", 67 | "#### 事後中央値 (posterior median, MED): \n", 68 | "\n", 69 | "事後分布の中央値を期待値の推定値とする -> 分布関数 $F$が0.5になるメディアン値を推定値とする.\n", 70 | "\n", 71 | "$$\n", 72 | "F(\\hat{\\theta_{med}} | D) = \\int^{\\theta_{med}} d\\theta \\cdot f(\\theta | D ) = \\frac{1}{2}\n", 73 | "$$\n", 74 | "\n", 75 | "### 2.2.2 区間推定\n", 76 | "\n", 77 | "幅をもたせてパラメータの推定をおこなう方法で,確率分布の極端な両端の$\\alpha$%をのぞいた$(1 - \\alpha)$%の部分を推定幅として用いる.伝統的な統計学では,$\\alpha = 5$%を使うことが多い." 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": { 83 | "slideshow": { 84 | "slide_type": "slide" 85 | } 86 | }, 87 | "source": [ 88 | "## 2.3 モンテカルロサンプリングとパラメータ推定\n", 89 | "\n", 90 | "なぜモンテカルロサンプリングが必要なのか.それは,事後分布のランダムサンプリングが可能ならば,簡単にモデルのパラメータを推定できるから,である.\n", 91 | "\n", 92 | "次の事後期待値を考える.\n", 93 | "\n", 94 | "$$\n", 95 | "\\int d\\theta \\cdot f(\\theta) p(\\theta)\n", 96 | "$$\n", 97 | "\n", 98 | "![alt text](fig/monte1.png \"monte1\")\n", 99 | "\n", 100 | "結局,以下のように,事後分布のランダムサンプリングが可能ならば,簡単にモデルのパラメータを推定できることがわかった.\n", 101 | "\n", 102 | "$$\n", 103 | "\\int d\\theta \\cdot f(\\theta) p(\\theta) = \\frac{1}{N} \\sum_{\\theta_j \\sim p(\\theta_j)} f(\\theta_j)\n", 104 | "$$\n", 105 | "\n", 106 | "\n" 107 | ] 108 | }, 109 | { 110 | "cell_type": "markdown", 111 | "metadata": {}, 112 | "source": [ 113 | "## 2.4 マルコフチェーンモンテカルロのさわり\n", 114 | "\n", 115 | "MCMCとは,マルコフチェーンを利用して,欲しい確率分布(目標分布)の乱数を生成するアルゴリズムのことをさす.\n", 116 | "\n", 117 | "マルコフチェーンとは,以下のような,一期前の変数にだけ依存するような条件付き確率で表現できる確率過程をいいます.\n", 118 | "\n", 119 | "$$\n", 120 | "p(X^{(t)}|X^{(t-1)}, X^{(t-2)}, \\dots, X^{(1)}) = p(X^{(t)}|X^{(t-1)})\n", 121 | "$$\n", 122 | "\n", 123 | "マルコフチェーンを規定する条件付き確率事態を遷移確率の行列を遷移核といいいます.\n", 124 | "\n", 125 | "マルコフチェーンを利用する理由は,目標分布である定常状態に収束することが確率論的に保証されているからです.収束するまえの状態にあるチェーンは「バーン・イン, burn-in」といって,通常バーン・インにあるチェーンは取り除いて利用する.\n", 126 | "\n", 127 | "MCMC法のアルゴリズムには以下のものがある.\n", 128 | "\n", 129 | "\t- メトロポリス・ヘイスティング法\n", 130 | " - ランダムメトロポリス・ヘイスティング法\n", 131 | " - ギブスサンプリング法\n", 132 | " - スライスサンプリング\n", 133 | "\t- ハミルトニアンモンテカルロ法\n", 134 | " - NUTS(No-U-Turn Sampler)\n" 135 | ] 136 | }, 137 | { 138 | "cell_type": "markdown", 139 | "metadata": {}, 140 | "source": [ 141 | "### 2.4.1 メトロポリス・ヘイスティング法\n", 142 | "\n", 143 | "- マルコフチェーンを利用して,事後分布に従う乱数を生成する.\n", 144 | "- 一番簡単なMCMC方のアルゴリズム\n", 145 | "\n", 146 | "$$\\newcommand{\\var}{{\\rm var}}\n", 147 | "\\newcommand{\\cov}{{\\rm cov}}\n", 148 | "\\newcommand{\\corr}{{\\rm corr}}\n", 149 | "\\newcommand{\\xss}{x^{(i+1)}}\n", 150 | "\\newcommand{\\xs}{x^{\\star}}\n", 151 | "\\newcommand{\\xt}{x^{(i)}}\n", 152 | "\\newcommand{\\xa}{x_a}\n", 153 | "\\newcommand{\\xb}{x_b}$$\n", 154 | "\n", 155 | "------\n", 156 | "\n", 157 | "- 初期値として$x^{(1)}$を適当に定める\n", 158 | "- 現在値を$\\xt$として,提案分布$q(\\xs|\\xt)$を使って候補として$\\xs$をサンプリングする.\n", 159 | "- 以下の受け入れ確率で,$\\xs$だけ動くか,それとも$\\xt$にそのままでいるかを決める.\n", 160 | "\n", 161 | "$$\n", 162 | "A(\\xt,\\xs) = \\min\\left[1, \\frac{p(\\xs) \\, q(\\xt|\\xs)}{p(\\xt) q(\\xs|\\xt) } \\right] \n", 163 | "$$\n", 164 | "\n", 165 | "------\n", 166 | "* Initialize $x^{(1)}$ \n", 167 | "* For i=2 to N \n", 168 | " * Sample $u\\sim U(0,1)$ \n", 169 | " * Sample $\\xs \\sim q(\\xs|x^{(i)})$ \n", 170 | " * if $u" 208 | ] 209 | }, 210 | "execution_count": 4, 211 | "metadata": {}, 212 | "output_type": "execute_result" 213 | }, 214 | { 215 | "data": { 216 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAFXCAYAAABOYlxEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlUVPX/x/HnnWGGZWYAkc0lc8E1IzUrd1ITNaIktyxN\nMbWsNJPUSEtMybQyWw0zzbIs/Zpb2g9cSrM0cwkzV1IxlVVlm2Gdmd8fFGWaCgKXgffjHM+RO3d5\n3avc99zPvffzUex2ux0hhBBCVCsatQMIIYQQovxJgRdCCCGqISnwQgghRDUkBV4IIYSohqTACyGE\nENWQFHghhBCiGrpqgY+MjKRTp06EhoZeMv3TTz+lb9++3Hfffbz22msl02NiYggODqZPnz7s2LGj\nZPrBgwcJDQ0lODiYWbNmlUwvKChgwoQJBAcHM2jQIM6ePVte+yWEEELUaFct8P3792fRokWXTNu1\naxdbt25l3bp1fP311zz22GMAJCQksHHjRjZs2MCiRYuYMWMGf71iHxUVRXR0NHFxcSQmJrJ9+3YA\nVq5ciaenJ3FxcYwYMYLXX3+9IvZRCCGEqHGuWuDbt2+Pu7v7JdOWL1/OmDFj0Ol0AHh5eQGwZcsW\nQkJC0Ol01K9fnwYNGhAfH09qaipms5nAwEAA+vXrx+bNmwHYunUrYWFhAAQHB7Nz587y3TshhBCi\nhir1PfjExET27NnDoEGDGDZsGL/++isAqamp+Pv7l8zn7+9PSkrKZdP9/PxITU29bBknJydMJhMZ\nGRk3tENCCCGEAKfSLmC1WsnMzGTFihUcOHCACRMmsGXLlorIJoQQQogyKvUVvJ+fH8HBwQAEBgai\n0Wi4cOECfn5+JCcnl8yXnJyMv7//Faf7+fkB4OvrS1JSEgBFRUVkZ2fj6el51e1L1/lCCCHEtZX6\nCv6ee+5h165d3HnnnZw8eZLCwkK8vLzo0aMHERERjBgxgpSUFBITEwkMDERRFIxGI/Hx8QQGBrJ2\n7VqGDRsGQI8ePVi9ejVt2rQhNjaWjh07XnP7iqKQlpZd+j0V183HxyTHuBLIca54cowrnhzjyuHj\nYyr1Mlct8BMnTmT37t1kZGQQFBTE+PHj6d+/Py+88AKhoaHodDrmzJkDQEBAAH379iUkJAStVsv0\n6dNRFAWA6dOnExkZSV5eHkFBQXTr1g2AgQMHMmnSJIKDg/H09GTevHml3gEhhBBCXE5xxOFi5dti\nxZJv5JVDjnPFk2Nc8eQYV46yXMFLT3ZCCCFENSQFXgghhKiGpMALIYQQ1ZAUeCGEEKIakgIvhBBC\nVENS4IUQQlwmMzOD8PCHCQ9/mAce6E1Y2L2Ehz/MyJGPUFRUVO7b27dvD5MnP/ufn6enpzFt2hQA\njh8/xs6dP/znvEeOHGb+/OLByz76KIbly5eVKsuKFZ+Tn59X8vOkSc9gNueUah1VQak7uhFCCFH9\neXh4smTJ5wAsXrwQNzc3HnpoaMnnVqsVrVZbaXm8vX2YNau435Xjx49y9OhhOnbsfNl8RUVFtGjR\nkhYtWgKU9MdSGitXfkHv3vfi7OwCwGuvvXUDydUjBV6Ims5uRzl/Hm3SWTTJSShZWSjZ2cV/zNko\nefmXL+Lqit3kjt1kwm40YvOsha1OXWx16mB394AynFRF1Wa3Q3R0FHq9nuPHj3HrrbdhMBjw8alF\naOhAAIYNG8Rrr72Nv78/sbEb+d//vqSoqJBWrVoTEfE8Gs2ljca7dv3IO+/Mw9nZhcDANiXT9+/f\ny9tvvwEUF+j33ltERsZFpkx5lsWLP2PRog8oKCjgwIFfGDo0nFOnTnDu3BnOnTuHn58/DzzwIMuX\nL2Pu3DcBSEg4xhNPjCQjI4NHHnmU0NB+7Nu3hy+++Kxknnnz5tCy5S2YzTmkp6cxfvwTeHrW4q23\nFjBgQCiLFy/D3d2DL75YxsaN6wG4775+DBo0hKSkczz33HgCA9ty8GA8Pj6+zJ79Bs7OzhX+73I1\nUuCFqCGU1FScjh5Ge/wYTsePoj12DG3iKTTJ51AKCsptO3Y3A9a6dbE2aoy1aXOszZpT1LQZ1uYt\niou/KDVD1DSc168p13Xmh/bDHDWrVMsoikJ6ehoxMUtQFIXFixde9jnAqVMn2bp1Ex98sBitVsvr\nr79KXNw39OkT8vf28/OZOzead96JoV69+rz0UmTJ98IvvlhGRMTztG4dSF5eXsnw5FA88ujo0WM5\nevQwEyZMAoqb4RMTE3n//UXo9Xr27dtTMr/dbuf33xNYuPBjcnMthIc/QseOXa64bwADBjzEl19+\nzjvvxOD+5//Xvz47cuQw33zzNR9+uBSbzc6YMcNp27YdRqOJM2f+YMaM2UyZMpWXXopk27atBAf3\nLdXxLW9S4IVQgc1mIzMzk6ysiukBTMnNxfnXeFzif8H5l/24xO/HKTnpsvmKfH3Jb9mKIj9/rH7+\nFPn5Y/PwwGY0YjOasBkM2J2dQVFwdTWg0SjFV/wWC0pODkp28dW+5uIFNElJaJLOoklKQnvuDE4J\nx2FT7KXba9qMora3U9iuPUW3t6follvBSU5DjqR793uu0extZ+/e3Rw9eoRRo4rHHcnPz6d27dqX\nzHX69Cnq1q1HvXr1AQgO7su6dasBuPXW23j77XkEB/chKKgHPj6+l27Bbr9k4DFFUejSpRt6vf6y\nNIqi0LVrEHq9Hr1eT7t27Tl8+CBGY+l6hrPb7Rw48AvdunUvaboPCupBfPx+unQJok6degQENAWg\nefMWJCWdK9X6K4L8ZgmhgpycbOJ2/YHNXj6/gorVSu3fj1DnwG7qxO/G98gBtEWFJZ/neniR1L4L\nF28OILN+IzJuakhW3ZspcnW7rvXnWsz0CgwouaK5rkwXzqM99ldrwVGcDh3Eaf8+XI4vx2XFcgBs\nJncKO3elIOhuCrt1xxrQVJr3r8AcNavUV9sVxcXFpeTvWq0Wm81W8nPBP1qC+va9j8cff+oqa/r3\nv/PfBXvo0BF06tSVnTt3MHbsY8yb9w463eXF+5/+KrrXQ1E0aLVa7Pa/s+fnX34r6vLlLs1st9tL\npun1f7cyaDRarNZrr6+iSYEXQiVubgZsXP2kdTXavFz89v5AvR82U/en79BnZ5Z8djGgJWmBd3K+\n5W1caBGIxbfuZYVT/+ef62Gz2cjOzipdQCcnaNWq+M9frFZ0J37HJX4/Lvv34brzB5z/bwPO/7cB\ngMI6dTEH98Ec3Ie89nfCDT7EVbu24YaWF1dXp05d9u7dxQMPwNGjR/68alW4/fY7ef75CAYNepha\ntWqRlZWJxZKLv79/ybINGtxMUtI5zp49Q7169dn0j9aes2fP0LhxExo3bsLhw4c4fTqRJk2alnxu\nMBiwWCzXldFut7NjxzaGDQsnN9fC/v17GTt2HEVFRZw6VTwial5eHnv37uG229oC4ObmhtlsvuQL\nraIo3HZbG6KjZzB06HBsNjvff/8dL744s8oOYy4FXggHoinIp+7Ordy07f/w//l7nPJzAbB4+3Om\nSzAp7TqSettdFHh6let283ItbNt3EU+v2tee+ZpM0Lxb8Z+HJmBMOUudAz9TJ343dX/5Cc+li/Fc\nuphc91r8cWc3TnYNJrn17aAp3Vu9uRYzQ7xNyNvA5eufV7FBQT3YujWWYcMG0apVa2666WYAGjZs\nxOjRY5k48SlsNjtOTk5EREy5pMA7OzszefJUJk+egLOzC7fd1pZz584AsHLlcvbt24OiaGjcuAkd\nOnQmLS21ZNtt27Zn2bKPCQ9/mKFDw//MdWnGv35WFIUmTZoyfvwTZGRkEB4+itq1vYHi2w3Dhg2m\nbt26NG/evGT5++8PIyJiHD4+vrz11oKS6c2ateDee+9j9OjhAISGhtG0aTOSks5ddnVflqf3y5uM\nJicuI6NDVbysrEx+OXHh+q7g7Xa8jsTTcNMabvruG/Q5xVfS2fUbcqZzL8526cXFZq0rtGk7PTUJ\njUaLl7fvtWe+AUpRIT7xu6n/wybq/bAFl4vpAJh965DY834Sg/uRU6/hda3LYs6mX/dmFBRIga9I\ncr6oHGUZTU4KvLiM/MJWvOsp8E7mHBrGrabJ11/g/scJAHJr+5LYM5TEnveT1bDy7ldXVoG/hNWK\n92/7uHnzWm7a/n/oLGYA0lrfzu+hQzjTNRi7k+4/F5cCXznkfFE5ylLgpYleiCrGdPoEAes+4+ZN\na9DlWrDq9Jy++15OBYeR0rbjDd+XdhhaLemBd5AeeAe/PDmVej9spmHcavz278Tn4F5yY3z4/b7B\nnLh3EPlePmqnFaLKkQIvRBVR++BeWi6Poc7P3wPF99WPPPQ4J/oOKPd76o7G6uLK6Z6hnO4ZivHs\nKZqs+5xGsatp/cm7tPo8hsSeoRwZPIqc+o3UjipElSFN9OIy0uRW8Uqa6O06/Pb+SMvlH+Dza3Hn\nHGmtb+d4v2Gc69wTu7ZqfAdXpYn+GpwsZm7evJamaz7FdOYUdo2GP7r25siQx8ls3Fya6CuJnC8q\nhzTRC+Eo7Hb89vxAq6UL8Dr6KwBJd3Tl8JDHOd/6dpXDOYYiNwO/3/8wv4cMpt4Pm2m5PIYG276h\nwbZvONuxB3sHPQY0UzumEKqRK3hxGflGXrGc9v6MS9Q0XH/aiV1RONMlmCNDxpAR0OraC6ukKl7B\nX8Zux//n7bT8PAbvQ/uxKwqFAweSPWkatpsbqp2u2pLzReUoyxW8tF0JUUm0x4/hPuIRavXtietP\nO0m6syub3v+KXS/Or9LF3WEoCsl3BvHtm5+xPXohF28OQL9iBV6dbsfwwiSUtDS1E5aZzWYjKyuz\nXP/8swe6/9K16x3MnPliyc9FRUXcd989lwzrum3bNkaNepShQwcxcuQjvPvufKC4f/iuXe/g7Nkz\nJfOuWPE5XbvewdGjRwCwWCzMnRvN4MH9eOyxYYwb9ziHDh28aqaNG9fz5ptzAVizZhX/92cnSVey\nf/9eDh488J+f79ixnWXLPgaKB9L57rstV932v33yyeJLfh47dmSplq9o0kQvRAVTsjJxe+1VXD+K\nQSkqovCOu0h99jl2eTe7oZ7sxH9QFFLu6MrJFoEMvHgQ55mzcFsUg8uKL7BMjiQ3fDTo/vv1uqoo\nJyebTT8l4OpWPj3z5VrM9Lrr2l0Pu7i4cvLkCfLz83F2dubnn3/Cx8e35O3MEycSmDVrFq+++iYN\nGtyMzWYr6U8eoHHjADZvjmX48McA+PbbzTRu3KTk8zlzZlK3bn2+/LJ4IJ2kpHOcOnXiuvejX7/+\nV/183749uLkZaN068LLPrFYrXbp0o0uXbkDZOqb59NOPefTRv4v6ggWLrzJ35ZMCL0RFsdlw/vJz\njDOno0lPw3pzQ3JmvEJB3xDysrPgxAW1E1ZvGg2FAwZg7tMPl08WY5jzCsZpz+OybCk5s+ZQ2O1u\ntROWiqubATdD6Ztpb1SHDp3ZuXMHd9/dk82bY7nnnt7Ex/8CwGeffcLYsWNp0KC4BzuNRlNSdBVF\noVu3u9mxYxvDhz/G2bNnMBpNOP3Zd8HZs2c4dOgQUVGvlGyrTp261KlT97IMGzasY9myjzEaTQQE\nNCvp9/2jj2JwczMwZMhQVq78grVrv0Kr1dKoUWOeeOJp1q37Co1Gy6ZN3/DMM5P4+us1lwx3GxDQ\nlCNHDvHss5MB2LNnN8uWLcVszmHcuIl06tSFjRvXc/To4ZJ5Jk+ewJAhw9i160cKCvIJD3+Yxo2b\n8OKLM+nVqyubNn2P3W7n/fff5qeffkRRFB599DF69uzFvn17WLx4IZ6etTh58neaN2/JSy/NrKB/\nOSnwQlQIp1/jMU6agG7fXuxubphfeAnLE0+Dy/UPiCHKiV5P3qgnyO83AMPsmbgs+xjPAfeTf98D\n5ETPwXaFgiL+1rNnMEuWfEinTl05cSKB++57oKTAnzx5gqeeeuI/l3VzM+Dn58+JE7+zY8c2evTo\nxcaN67Hb7Zw8+TtNmza75pVzeno6ixcvZPHiZRgMRsaNe5zmzVsAl3ZJ+9lnS/nf/9bj5OSE2ZyD\nwWDkgQf64+bmxkMPDQVgw4a1lwx3+803X5dsx263k5ycxKJFn3DmzB+MH/8EX3yx+gr5FBRFYezY\ncXz11UqWLPn8ks8Atm3bSkLCMZYu/YKMjIuMGvUobdoU93OfkHCMZctWUru2N2PHPsaBA78QGNjm\nWv8MZSL34IUoTxYLhpdfwjP4bnT79pLX70Eu/LAHy4TnpLirzO7tTc4bb5GxaRuFd9yF89drqdXl\nTlw+/giu4350TdWkSQDJyUls3hx7xXHUr6VHj2A2b47l+++/Iyio+z8+ub4m8UOHDtKuXXs8PDxx\ncnKiZ89eVxzcpUmTpkRFTSUu7hs0mr87g/r3rP813K2iKPTo0QuA+vVvom7deiQmnrqujP924MAv\n9OrVB0VRqFXLizZt2nH48CEURaFly1vw9vZBURQCApqRfIVhnMuLFHghyonu+2143d0Rt3fnY6t3\nExkr1pC98GNsf453LaqGosA2ZKyPJfuNt0FRME1+Fs8H+qI9fkztaFVWly7deO+9+dxzT+9Limuj\nRo05ePC/H4pTFOjcuQtxcd/g51cHtz+fIVAUhUaNGpOQcOyaD/spCpds898F+6+fX3ttPg8+OJCj\nR48wevSjWK3WK67PpRRftDUazZ9D4v690YKC6xtW9t9fQv76UvHPYW+1Ws1/5iwPUuCFuEFKdhbG\niePw7B+K5nQilrHjuLBtJ4V391A7mvgvGg15w0Zwccdu8kPuR/fTTmp174TrW29ABZ5wHVVIyP2M\nHDnmkgfkAB5++FFiYmL444/TQPHT/mvWrAKKi7LdXjxO+9ix4xg+/NInzOvVq0+LFq346KOYkmlJ\nSefYuXPHJfO1bNmaX37ZR1ZWJkVFRXz77eaSYvlXEbXb7aSkJNOuXXvGjh1HTk4Oubm5uLm5Yflz\nDIMrufSLg51vv92M3W7n7NkznDt3lgYNbsbfvw4JCUdLtnH48G8lyzg5OVFUVHTZegMD27JlyyZs\nNhsXL14kPn4/rVrdUunDyso9eCFugG7Xj5iefhzt6USKbrmV7DffoahNO7Vjietk869D1pJl6Des\nx/h8BMboGTjH/R9Z78Zga9RY7XiXyL1Koaqodf1VSH18fOnff3DJtL9auJs0CeCFF14gKmoq+fl5\ngELnzl0vm69nz+Arrv/556fxzjvzGTy4H87Oznh4ePLUUxMumcfb25uRI8fw+OPhGI0mmjX7e1jX\nv7ZhtVqZOfMlzOYc7HY7Awc+hNFopHPnbkybNoUfftjOM89MumSf/l5eKfm7n58/o0cPx2zOYdKk\nSHQ6HYGBbahTpx5Dhw7k5psb0bx5y5Ll778/jBEjhtC8eQtefHFmybqCgrrz228HGDFiCIqi8OST\nz1CrlhenTp2srPGhivdJOroR/yYdV1yH/HwMc6Jxfe8tUBQs4ydiee550F/fa2+lGi62CnCIjm7+\npbRd1SoXzmOcPBGXdauxuxnImTmbvKHDK23Evqux2Wzk5JTv76TRaEKjufFGXDlfVA7pqlaISqA9\negT3x0fidOgg1psbkvXehxTdeZfascQNsnvVJvvDjynocy/G55/DFDEefexGsue/j93bW9VsGo3m\nmu+sC/FvVy3wkZGRbNu2jdq1a7N+/fpLPlu8eDFz585l165deHp6AhATE8OqVavQaDRMmzaNLl2K\nn7g8ePAgkZGR5Ofn061bN6ZNmwZAQUEBkydP5tChQ3h6evLmm29Sr169ithPUY1VxNXNfzGtWoHn\n9Klo8vLIfOgRzke+iN1ggKzMUq0nOzur+H6c+heH4p8UhfwBgyns2BnT+Cdxjvs/nHp0JnvhEgo7\ndFI7nRClctUC379/f4YNG8aUKVMumZ6UlMQPP/xA3bp/vz+akJDAxo0b2bBhAykpKYSHhxMXF4ei\nKERFRREdHU1gYCCjR49m+/btdOvWjZUrV+Lp6UlcXBwbN27k9ddf580336yYPRXVVnn38nUlTrkW\n7lo4F9/vNlLgZuSHyXM43bE7nMgCskq9vgvpKfj4+uLs6lz+YcUNs9WrT+bKNbi+Ox/D7Jl49LsX\ny5SpWJ6JgHJo1haiMly1wLdv354zZ85cNn327NlMmjSJJ598smTali1bCAkJQafTUb9+fRo0aEB8\nfDx169bFbDYTGFjcVWC/fv3YvHkz3bp1Y+vWrYwfPx6A4OBgXn755fLcN1GDVGQvX+4nj9Fx1rO4\n/3GCC81vZecL87DUqY/bDazTYs4pt3yigmg05I6fSOGdHXF/PBzD7JnoftxB1vuLsPv4qJ1OiGsq\n9VfRzZs34+/vT4sWLS6Znpqair+/f8nP/v7+pKSkXDbdz8+P1NTUy5ZxcnLCZDKRkZFRph0RoiLU\n/24jPcc/hPsfJzgW9ihb5y3DUkfea69Jijp05OLWH8i/Jxj9tm+p1asbTvv3qh1LiGsq1UN2ubm5\nxMTEsGTJkpJpajyEX5anCUXpONIx1uttGA0XMBjLsac4q5VmH8yl8WcLKXIzsP+VBaTc3QdjOa0+\n11z89LypPDNXoFyzHo1G5zB5ATQUAOX0f9nHBLHfwJw5aKdOpdb9feCDD2DEiBtfdzXgSOeLmqRU\nBf706dOcPXuW+++/H4CUlBT69+/PihUr8PPzIzk5uWTe5ORk/P39rzjdz88PAF9fX5KSkvDz86Oo\nqIjs7OySB/auRl7JqFiO9tpLVlY2OeZ8bOSVy/p0WRl0eCUC/30/kl2/IT9EvUt2gyaQUz7rBzCb\nCzCZdGSX4zorktlcgEZjxdnVMfICWMzFPY6V6//lUU+ja9wc98cfQxMeTu6OneS8PNvhRqcrT452\nvnBUFT4efPPmzfnxxx/ZunUrW7duxc/Pj6+++gpvb2969OjBhg0bKCgo4I8//iAxMZHAwEB8fHww\nGo3Ex8djt9tZu3YtPXv2BKBHjx6sXl08tGBsbCwdO3Ys9Q4IUZ7cTx7jnqcH4r/vR87ddTeb31lR\nXNyF+FNhj15cjPuOopatcP1oIR79Q1HS09WOJcRlrlrgJ06cyEMPPcTJkycJCgpi1apVl3z+zx6B\nAgIC6Nu3LyEhIYwePZrp06eXfD59+nSmTZtGcHAwN998M926FY+/O3DgQDIyMggODmbp0qVERESU\n9/4Jcd389uygx7MPY0w+w29Dn+SHGe9RpMLwnKLqszVqzMUNm8m7Pwz9rh+p1beH9GUvqhzpyU5c\nxtGa3LKyMtnxa9INPUXfeP1y2r4XjV2rZfek2Zy5+95yTHi59NQkTCYDzq7uFbqd8lITerIrE7sd\nt7mvYHhjDjYPT7IWf0ph16CK214V5GjnC0dV4U30QlQ7Viu3ffAqt7/zMgUmD7577eMKL+6iGlEU\nLFOmkvVuDIrFjMfgMFw+/1TtVEIA0lWtqMG0ebncNXsS9XZuIatBE76f+YG8AleN2Gw2MjMzKSys\nhOuYPveS7fU5/k+OxjThKYqOHOJCxJRS92NfXv3DCwFS4EUNpcvOpMtLT+L92z5S2nZg54tvUWh0\njOZycX3yci3E7vwdvXN5vdx4Da43Y4pexD2znqXWB++Rfvw0O8dGYtde32k212Km110B0ue8KDdS\n4EWN45qWTNcXRuORmMDpu+9l96TZ2HWOMaqbKB1XVwPOrpX3oKS16S18N385XaY9TtMt6zGYc9j1\nwhtYXVwrLYMQf5G2IFGjmE7/To8JD+ORmMCxsGH89PxrUtxFucqvVZttry0luV0n6u76lm6Ro9Bl\nSQ+dovJJgRc1Rq2jv9L92UdwS0viwMiJxD8RKQOHiApR5GZgx8wFnO4egvdv++geMQyX86lqxxI1\njJzdRI3g/esegqaEozdn83NENEcfGl3qB6CEKA27Ts9PU+ZyLGwYHokJdI8YhlvKWbVjiRpECryo\n9nz3/UjXF0ajzc9n5wvzONX7QbUjiZpCoyH+iUgOPTIW47nTdJ84DMPZRLVTiRpCCryo1urs+pYu\nL45Fsdn4IeodznbrrXYkUdMoCr8NH8+BkRNxS0uie8QwTIkJaqcSNYAUeFFt1dseS6cZ47FrNOyY\nuYDku+5WO5KowY4+NJr9Y1/A9UIa3Z97FI/fD6sdSVRzUuBFtVR/+//R4ZUIrM7OfP/Kh6S266R2\nJCFICBvGngkz0GdlEDQ5HI/fj6gdSVRjUuBFtVNvRxx3vfIcVhcXtr/yIem3tlc7khAlTt47iJ8j\notHnZBE0JRz3kzJIjagYUuBFtVL3xy10iP7zyj36Qy60aqt2JCEukxgcxp4JL+P855W8+6njakcS\n1ZAUeFFt1Nn5LR1nPYtNp+f76IWcv0WKu6i6TvUdwJ5nZuCSeaG4uf6PE2pHEtWMFHhRLdTdv5OO\ns57BpnXi+1kLON/6drUjCXFNJ0MGsXfcS7hknKf3S0+iOylFXpQfKfDC4bns2U33VyeDUvy0fHrg\nnWpHEuK6nQgdwv4np+KacYE6wx9Gc/aM2pFENSEFXjg0pwO/4D9qBBprET++OJ+0NnepHUmIUkvo\nN5R9j4xFd+4sHgMfQElLUzuSqAakwAuHpT1+DI/BYWjMOXw/4WV5z104tF/7j+DimLE4JRzHY3AY\nSqYMUCNujBR44ZA0pxPxGHA/mvPnSZv5Kqe69FI7khA3RlG4MCmS3GHh6A4ewOORQWCxqJ1KODAp\n8MLhKOnpeAzqhzbpHDnTZ5H90MNqRxKifCgKOXPnkRfWH93uXbg/NgwKC9VOJRyUFHjhWMxmPB4Z\ngNOJ37GMn0juU+PVTiRE+dJqyX53Ifk9e+G8ZROmiPFgt6udSjggKfDCcRQV4T56OLr9+8gb/DDm\nqdPVTiRExdDpyFr0CYVt2+HyxWe4vTpT7UTCAUmBF47Bbsf43DM4b46joHtPsue9I+O5i+rNYCBz\n2UqKGjXG8ObruCxZpHYi4WCkwAuH4Db3FVw//5TC29qS+dGnoNOpHUmICmf38SHzi6+weftgfD4C\n/Yb1akcSDkQKvKjyXJYtxfDGHKw3NyTzs5VgNKodSYhKY2vUmMzPV4KrG+5jH8Pp55/UjiQchBR4\nUaXptn0hK2CBAAAgAElEQVSLcfKz2Ly8yPzyK+y+vmpHEqLSFbVpR+biT6CwEI/hQ9AknlI7knAA\nUuBFlaU9dhT3xx4FjYbMj5djbRygdiQhVFPYoxc5r7yGJj0dj0cGSkc44pqkwIsqSUlPx+PhgWiy\nMsme/x5FHTqqHUkI1eWFj8Ly+FM4HTuK+6jh8o68uCop8KLqycvDY/gQtKdPYX7uefIHDFY7kRBV\nhjlqFvm9+6Lf9i3G55+Td+TFf7pqgY+MjKRTp06EhoaWTJszZw59+/bl/vvv5+mnnyY7O7vks5iY\nGIKDg+nTpw87duwomX7w4EFCQ0MJDg5m1qxZJdMLCgqYMGECwcHBDBo0iLNnz5bnvglHZLdjmvAk\nup9/Iu/BAVgmRaqdSIiqRasla8FHFLYOxPXTJbgueFftRKKKumqB79+/P4sWXfruZZcuXdiwYQPr\n1q2jYcOGxMTEAJCQkMDGjRvZsGEDixYtYsaMGdj//GYZFRVFdHQ0cXFxJCYmsn37dgBWrlyJp6cn\ncXFxjBgxgtdff70i9lE4ENe35+Hy1f8ovOMusue/L++6C3ElRiNZy77E6l8Hw8svotu6Se1Eogq6\naoFv37497u7ul0zr3LkzGk3xYrfddhvJyckAbNmyhZCQEHQ6HfXr16dBgwbEx8eTmpqK2WwmMDAQ\ngH79+rF582YAtm7dSlhYGADBwcHs3LmzfPdOOBR97DcYXnkZa736ZC75DFxc1I4kRJVlq1uPrKWf\ng06H+5iRaBOOqx1JVDE3dA9+1apVBAUFAZCamoq/v3/JZ/7+/qSkpFw23c/Pj9TU1MuWcXJywmQy\nkZEhT4bWRNpjRzGNHQUuLmQt/VxehxPiOhS1vZ3see+gycrE/dGHULIy1Y4kqpAyF/gFCxag0+ku\nuT8vRFkoGRdxHzYYTU528RPzgW3UjiSEw8gf+BCWJ8fjlHAc0xOPgdWqdiRRRTiVZaGvvvqKbdu2\nsXTp0pJpfn5+Jc31AMnJyfj7+19xup+fHwC+vr4kJSXh5+dHUVER2dnZeHp6XnP7Pj6mssQWpVBp\nx7ioCIYOgJMn4PnncR8TXupV6PU2jIYLGIyO06Sfa9YDYHKQzLlmPRqNzmHyguMdYw0FeHub8PAo\nw+/e2/Pg96M4x8biM/9VePXV8g94FXJOrppKXeC3b9/ORx99xKeffoqzs3PJ9B49ehAREcGIESNI\nSUkhMTGRwMBAFEXBaDQSHx9PYGAga9euZdiwYSXLrF69mjZt2hAbG0vHjtf3rnNaWva1ZxJl5uNj\nqrRjbHj5Jdzi4sjv1ZusZ6ZAGbablZVNjjkfG3kVkLBimM0FmEw6snMcI7PZXIBGY8XZ1THyguMd\nY4s5n/T0bAoKytawqryzEM8+PXCaM4esgJbkP/BgOSe8sso8X9RkZfkSddUCP3HiRHbv3k1GRgZB\nQUGMGzeOhQsXUlhYyMiRIwFo06YNUVFRBAQE0LdvX0JCQtBqtUyfPh3lzyegp0+fTmRkJHl5eQQF\nBdGtWzcABg4cyKRJkwgODsbT05N58+aVegeE49KvX4vbu/MpahJA9oJFoNWqHUkIh2X3rEXWJ1/g\n2bs7pmeeoqhFK6zNW6gdS6hIsdsdr5cE+bZYsSrjG7n2+DE8e3dHsVm5+H/fYm3RsszrysrKZMev\nSbgZHKeZMD01CZPJgLOr+7VnrgLSU5PQaLR4eTvOw4+Odowt5my63FoHd3ePG1qPfv0aPB57lKKA\npmTEfovdVLH7L1fwlaMsV/DSk52ofDk5uIc/UvxQ3Zvv3lBxF0JcqiC0398P3Y1/Unq6q8GkwIvK\nZbdjmlDcl7bl8SfJDxugdiIhqh3ztCgKOnfFecM6XN99S+04QiVS4EWlcv3gPVzWrabwro6YX5qp\ndhwhqicnJ7JilhT3dBcdhe77bWonEiqQAi8qjdPunzC8/CJWXz+yFi0FnU7tSEJUW3ZfX7I++gS0\nWtwfH4kmJfnaC4lqRQq8qBTKhfO4jxkBdjvZC5dg8/O/5jJCiBtTdMddmKfPRJOeJp3g1EBS4EXF\ns9kwjXsC7bmzWKZMpbBTF7UTCVFj5I4eS37f+9D/8D1ur1duBzhCXWXqyU6I0nB9/x2cN8VScHcP\nLM9EqB1HiCrJZrORnZ1VIevOmTWb+r/G4zZvLpmBt5HbuWu5rbt2bUO5rUuULynwokI57f4JQ3QU\nVv86ZL33IWik0UiIK8nLtbBt30U8vWpXyPq9x71Mn6mjqTX+aXbMW0aul/cNrzPXYmaItwlpDK6a\npMCLCnPJffeYxdh9fNSOJESV5uLqVmEdNlnaduDA6Em0XTCbu9+OYvurH2HXSgmozuRrl6gYdjum\nZ578+757x85qJxKixkvoN4wzne/BN343LZbHqB1HVDD5+iYuY7PZyLrBcaXdP/0Y59hvsHTsTHL4\nKKjAcaqzs7Ow26S3LiGuSVHYM3EWXsd+45Zl75PatiPnb2mndipRQaTAi8tkZ2ez6acEXN3K9vCM\nZ+Lv3PfKTPJMHnw96gVyf0sp54SXupCegpvBHUMF97ktRHVQaPLgp+fncvek4dz16iQ2LVhNoVF+\nd6ojKfDiilzdDGW6F6jJz+PuN19EW1jAzmnzUW5qjFsF5PsnizmngrcgRPWSfmt7Dg95nFafLaDd\nW1H89MIb8Ofon6L6kHvwolzdtnAuHokJJNz/MEkdu6sdRwjxHw4NfZL0Vm1psO0bGsatVjuOqABS\n4EW5qfvjFgLWLyezYVPiR09SO44Q4irsWid+ev41Cgwm2r4XjfHMSbUjiXImBV6UC5fzqbSfNw2r\n3pldka9jc3ZRO5IQ4hos/vXY+0wUTnkW7po9CaWoUO1IohxJgRc3zm6n/bxpOGdlcGDUc2Q1aqZ2\nIiHEdTpz972c6tUPr+O/0eqzBWrHEeVICry4YY03fEmdn78n+fbOJNz/sNpxhBCltP/JFzD71aXl\n8hi8Dv+idhxRTqTAixtiPHOS22LmUmDy4OeIaOmKVggHVGQwsXvSbLDbuXPOFLS5FrUjiXIgZ2NR\nZoq1iDvnPI9Tfi57x08nz9tP7UhCiDJKD7yTY/3DMZ07zW0fzlU7jigHUuBFmbVYHkPtowdI7BHK\nmaC+ascRQtyggyOeIaNRM5p8/SX+u7epHUfcICnwokxqHTtIq2ULsHj7s//paWrHEUKUA5tez+4p\nc7HqdNzxxjT0mRfVjiRugBR4UWqagnzueO15NDYrP096Rbq5FKIayWzcnN+Gj8flYjpt35uldhxx\nA6TAi1K75dN38Uj8nYT7Hya1bUe14wghytnR/uGcb3kbDb7bSL3tsWrHEWUkBV6UitfheJqvXEyO\nf30OPDZR7ThCiIqg1bL7udlY9c60e+dl9BkX1E4kykAKvLhumoJ87nj9BRSbjZ+fi8bqWrbR5oQQ\nVV/OTY34dcQEXDIv0O7dmWrHEWUgBV5ct1uWvo37Hyc4/sBQ0gPvVDuOEKKCHQ8bRvot7bhp+/9R\nf9s3ascRpSQFXlwXr0P7af6/JeTUbcCvI59VO44QojJotfz8XDRFzi60e+dlnC+mq51IlIIUeHFN\nxU3zUwH4OSIaq2tFj/AuhKgqcuo15NeRz+KclUG7d15WO44ohasW+MjISDp16kRoaGjJtIyMDMLD\nw+nduzcjR44kKyur5LOYmBiCg4Pp06cPO3bsKJl+8OBBQkNDCQ4OZtasv1+7KCgoYMKECQQHBzNo\n0CDOnj1bnvsmykmrZe/jfuYkCQ8MJf3W9mrHEUJUsoQHhpLW+nbq79hEve/j1I4jrtNVC3z//v1Z\ntGjRJdMWLlxIp06diI2NpUOHDixcuBCAhIQENm7cyIYNG1i0aBEzZszAbrcDEBUVRXR0NHFxcSQm\nJrJ9+3YAVq5ciaenJ3FxcYwYMYLXX3+9IvZR3ADPhEM0X/ERZr96/Br+jNpxhBBq0GjY8+xMrDo9\nbd+biS47U+1E4jpctcC3b98ed/dLOzHZunUrYWFhAISFhbF582YAtmzZQkhICDqdjvr169OgQQPi\n4+NJTU3FbDYTGBgIQL9+/UqW+ee6goOD2blzZ/nunbghirWI9vOmobFZ2fvMDHlqXogaLOemRhwa\n+hSuF9K5baH0Ve8ISn0P/vz583h7ewPg7e3N+fPnAUhNTcXf379kPn9/f1JSUi6b7ufnR2pq6mXL\nODk5YTKZyMjIKPveiHLV7H9LqJVwmJPBYaS076x2HCGEyo4ODOdik5Y0iv0K330/qh1HXMMNPWSn\nKAqKopRXFlGFuJ9N5JZP3yOvljfxYyarHUcIUQXYnXTsmTgTm0bL7fOn45SXq3YkcRVOpV2gdu3a\npKWl4ePjQ2pqKl5eXkDxlXlycnLJfMnJyfj7+19xup9f8bCivr6+JCUl4efnR1FREdnZ2Xh6el4z\ng4+PqbSxRSlkXrxIl5hX0Rbkc+ClebjU9cdF7VBXkWvWo9HoMBmrcspL5Zr1AA6TWY5xxXOUY2xt\nezunHh5N42UfcOfKD6Hvu3JOrqJKXeB79OjB6tWrGTNmDGvWrOGee+4pmR4REcGIESNISUkhMTGR\nwMBAFEXBaDQSHx9PYGAga9euZdiwYZesq02bNsTGxtKx4/X1a56Wll3a2KIUDJ9/gseveznT+R4S\n7ugOOXlqR7oqs7kAjcaKs2vVzvlPZnMBJpOO7Cp+bP8ix7jiOdIx3j/4cXy+/YYmaz7H8lQ4abfe\noXakaq8sX6IU+1+Pul/BxIkT2b17NxkZGdSuXZvx48fTs2dPJkyYQFJSEvXq1WP+/PklD+J98MEH\nrFq1Cq1Wy9SpU+natStQ/JpcZGQkeXl5BAUFMW1a8fCiBQUFTJo0icOHD+Pp6cm8efOoX7/+NUNL\nga84SkoKtTvfTmGRldiPNpJX21ftSNeUnpqERqPFy7vqZ/1LemoSJpMBZ1fHGIlPjnHFc7Rj7H1g\nN92fG461dWsuxG0Hp1JfL4pSKPcCX1VJga84psfDcVm9il2PT+aP/uFqx7kujnZiBCk+lUGOccVr\nM2cyTbesJycqmtwnx6kdp1orS4GXnuxECd3WTbisXkVR+/YcDX5Q7ThCiCpu76PjsNWujWFuNJo/\nTqsdR/yLFHhRzGLBNDkCu1ZL7vz5oJH/GkKIq8t39yQvOhrFYsH4fAQ4XoNwtSZncQGAYd5ctKdP\nkTt2HLbWrdWOI4RwEIWDB1PQNQjnTbHov16ndhzxD1LgBdpDv+H6/ttYG9yMOWKK2nGEEI5EUciZ\nOw+7szPGFyahZEk3tlWFFPiazmbD9NwzKEVF5Mx5AwzSHa0QonSsTZpimfAc2pRkDLNnqh1H/EkK\nfA3nsnwZuj27ybs/jIKewWrHEUI4KMvTEyhq2gyXJYtwOvCL2nEEUuBrNOXCeQwzX8JmMGKeOVvt\nOEIIR+bsTM6rb6DYbBinTASbTe1ENZ4U+BrMEP0ymgsXsEyKxFanrtpxhBAOrrBrEHlh/dHt3YPL\nZ5+oHafGkwJfQznt24PLso8patGS3NFPqB1HCFFNmGe8gs1gxDBrOsqfo40KdUiBr4msVoyTJ6LY\n7eS8+gbodGonEkJUEzb/Olgmv4Dm4kUM0VFqx6nRpMDXQC5LF6M78At5AwZT2KmL2nGEENVM7qjH\nKWrZCtdlS3Has1vtODWWFPgaRklLwzB7JjaTOznTZ6kdRwhRHel05MyZB4BxSgRYrSoHqpmkwNcw\nhlnT0WRmYI6cht3PT+04QohqqrBDJ/IGDUH3azwuSxerHadGkgJfgzjt24Pr8mUUtWpN3ohRascR\nQlRzOS8VtxYaXp2JckEeuKtsUuBrCpsN4wuTAMh5Za6M3SyEqHB2X18szz2PJiMDw6tyS7CySYGv\nIZxXLEe3by95/R6UB+uEEJUm97ExxT3cfbIE7a8H1I5To0iBrwGUrEyMM6djd3XFLA/WCSEqk15P\nzqw5xT3cTZ0sQ8pWIinwNYDbG3PRpKVieSYCW736ascRQtQwhd17kt8nBP2uH3Fes0rtODWGFPhq\nTnv8GK4fLsDaoCGWJ8erHUcIUUPlvPwKdmdnDFHTwGxWO06NIAW+OrPbMU6bUjwU7MzZ4OKidiIh\nRA1la9gIy1Pj0Sadw+2tN9SOUyNIga/G9Jtj0X+7hYKg7hT0uVftOEKIGs4ybiLWuvVwW/AOmtOJ\nasep9qTAV1eFhRimT8Wu0ZAz81VQFLUTCSFqOoMB87QolPx8DDOnq52m2pMCX025frwIp4Tj5A0f\nibVFS7XjCCEEAPkPDqTw9va4rP0Kp592qR2nWpMCXw0pFy/g9tpsbO4emCdPVTuOEEL8TaMh5+XZ\nABhfnAI2m8qBqi8p8NWQ2+uvosnIwBIxBXvt2mrHEUKISxTdcRd5Dw5A98t+nP/3pdpxqi0p8NWM\n9thRXBd/SFGjxuQ+NkbtOEIIcUXmaTOwu7hgmBUlr81VECnw1YwhaiqK1Yo5Khr0erXjCCHEFdnq\n34TlyXFok5Nwe3e+2nGqJSnw1Yju2y04b46joEs3eS1OCFHlWZ5+FqufP27vv43m7Bm141Q7UuCr\nC6sVY9RU7IpCzoxX5LU4IUTVZzRifuEllNxcDLNnqp2m2pECX024fPk5TocPkT/4Yay3BqodRwgh\nrkv+oCEUtWqN88ovZLS5clbmAh8TE0NISAihoaFERERQUFBARkYG4eHh9O7dm5EjR5KVlXXJ/MHB\nwfTp04cdO3aUTD948CChoaEEBwcza5aMdFYmZjNur84qHi3u+WlqpxFCiOun1ZITNQvFbsc440UZ\nba4clanAnzlzhhUrVrB69WrWr1+P1Wplw4YNLFy4kE6dOhEbG0uHDh1YuHAhAAkJCWzcuJENGzaw\naNEiZsyYgf3Pf8SoqCiio6OJi4sjMTGR7du3l9/e1RBuMe+hTU7C8sRT2OrWUzuOEEKUSuHdPSjo\n3hP99m/RfbtZ7TjVRpkKvNFoxMnJidzcXIqKisjLy8PX15etW7cSFhYGQFhYGJs3F/9DbdmyhZCQ\nEHQ6HfXr16dBgwbEx8eTmpqK2WwmMLC4Sblfv34ly4jro6Sm4vrOfGze3uQ+PUHtOEIIUSY5L83E\nrijFV/FWq9pxqoUyFXhPT09GjhzJ3XffTdeuXTGZTHTu3Jnz58/j7e0NgLe3N+fPnwcgNTUVf3//\nkuX9/f1JSUm5bLqfnx+pqak3sj81juG12WjMOZifi8Ruclc7jhBClIn1ltbkPfQITocP4fLl52rH\nqRacyrLQ6dOnWbp0KVu3bsVkMvHMM8+wdu3aS+ZRFAWlgp7k9vExVch6Hc7hw7DsY2jWDNPEcZh0\nunJZbWZmJkaDMwajYwwvm2vWo9HoMDlIXijODDhMZjnGFc8Rj7GGAqAcz8mvvQprVmGaG41p1HAw\nGMpnvTVUmQr8wYMHadu2LbVq1QKgV69e/PLLL3h7e5OWloaPjw+pqal4eXkBxVfmycnJJcsnJyfj\n7+9/xem+vr7X3H5aWnZZYlc77s9G4Gy1kjl1BgUZeUBeuaxXr4cccz62clpfRTObC9BorDi7OkZe\nKM5sMunIznGMzHKMK54jHmOLOR8ox3Oy3h23sU9jmPca5pmzsURMKZ/1VgNl+RJVpib6xo0bEx8f\nT15eHna7nZ07dxIQEED37t1ZvXo1AGvWrOGee+4BoEePHmzYsIGCggL++OMPEhMTCQwMxMfHB6PR\nSHx8PHa7nbVr15YsI65Ot+tHnGO/oaBDJ+nURghRbeQ+PQGbtw+u776FkpamdhyHVqYr+BYtWvDA\nAw/Qv39/NBoNrVq1YtCgQZjNZiZMmMCqVauoV68e8+cXdz8YEBBA3759CQkJQavVMn369JLm++nT\npxMZGUleXh5BQUF069at/PauurLbMbz8EgDml16WTm2EENWG3WjCHDEZU+Qk3Oa/hjl6rtqRHJZi\ntzveS4c1vYle/80GPIYPIb/vfWQtLf+HUfR6G2u+PYabwTGedUhPTUKj0eLlfe3bO1VFemoSJpMB\nZ1fHeDBSjnHFc8RjbDFn0697MwoKyrnPtIICvDq3R3PuLBd+3Ivt5oblu34HVGlN9EJFViuGV2Zg\n12gwT52udhohhCh/ej3myBdRCgsxzIlWO43DkgLvYJxXLMfp6BHyhgzF2qy52nGEEKJC5PfrT+Gt\nt+G8agXag7+qHcchSYF3JHl5GOa+gt3FBcukSLXTCCFExfmzlVKx2zFER6mdxiFJgXcgros/RHv2\nDLmPPS5d0gohqr3C7j0p6NIN5y2b0P2449oLiEtIgXcQSmYGbvNfw+bhiWX8s2rHEUKIiqcomKdF\nAWCY+ZIMRFNKUuAdhOt7b6PJyMAybgL2Wl5qxxFCiEpR1K49+fc9gG7vHvQbv1Y7jkMp03vw4vrZ\nbDZycm7stT5tehq1F75PkY8vqYMfxp6VWU7prkyns2G3yTdlIUTVYH7hJfQb12OYM6u4Yy+tVu1I\nDkEKfAXLyclm008JuLqVvU/lOz6ah8ZiYffQpzmakAFklF/AK8izZIDijEEGrxFCXIXNZiMzM5PC\nwgpuDPb1xenBAbj/bwW2zz4hp9+DZV6V0WhCo6kZjddS4CuBq5uhzJ3GuKaeo3nsKsx+9TjzwCO4\n6fTlnO5yCgXk5spwjUKIq8vLtRC783f0zsYK35ah18OErfkKt9fmEnvzHdidSl++ci1met0VgLu7\nRwUkrHqkwFdxrT5bgLawkN+GPY29Eoq7EEKUhqurAWfXiu/10t6oOSdCBtN07Wfc8n0cJ+4bXOHb\ndHQ1o53CQRnPnqJh7GqybmpMYs9QteMIIYSqDg95nCJnF1p+vgBNvuOMuqcWKfBV2C2fvIvGZuW3\n4ePkoRIhRI2X7+VDwgOP4JaeQpP1X6gdp8qTAl9FuZ88xk3fbeRiQEvOdAlWO44QQlQJRwc9RqGb\nkZZfLsTJYlY7TpUmBb6Kav3x2yh2OwdHPAM15IlPIYS4lgL3WhwdMALnzIs0Xf2J2nGqNKkcVVCt\no79Sb+cW0lu1JfmObmrHEUKIKuX4gyPId/ek2f+WoMuu2H5BHJkU+Crolk/eASi+elcUldMIIUTV\nUuRm4MigUejN2TT7aqnacaosKfBVjNfhX6jz8/ek3nYnaW3uUjuOEEJUSb+HDiHPszZNV3+CLqti\nO/9yVFLgq5hbPnkXgN+GPa1yEiGEqLqsrm4cGTQKncVM81Ufqx2nSpICX4XUPrgX/70/kNK2A+mB\nd6gdRwghqrQT9w0m18ubpqs/RZ95Ue04VY4U+Cqk5Or90XEqJxFCiKrP6uLKkcFjcMqz0HzlR2rH\nqXKkwFcR3gd24/fLLpLbd+H8Le3UjiOEEA7hRMggcmv7ErD2c5wvnlc7TpUiBb4qsNtpvbT4yXm5\n9y6EENfPpnfm8JAxOOXnylX8v0iBrwJ8fvkJn1/3cO6uIC60vE3tOEII4VBO9hmIxdufgHWf43I+\nVe04VYYUeLXZ7dzyafG990Ny9S6EEKVm0+s5/PATaAvyab5ysdpxqgwp8CrzOfAzPgf3cu6uu7nY\nrLXacYQQwiGdCg7D4lOHxhu+xPliutpxqgQp8Cprtew9AA4NfVLlJEII4bhsej1HBo/CKT+PZv9b\nonacKkEKvIq8D/yMb/xuku7oysXmt6odRwghHNrJPgOwePsRsG45+owLasdRnRR4FbX67H0ADj0y\nVuUkQgjh+Gx6PUcHjcIpP5dm0rudFHi11P5tH377d5HcrhMXWrVVO44QQlQLJ+4dSK6XDwHrPkOf\nVbN7tytzgc/KymL8+PH07duXe++9l/j4eDIyMggPD6d3796MHDmSrKyskvljYmIIDg6mT58+7Nix\no2T6wYMHCQ0NJTg4mFmzZt3Y3jiQVsv+vHof9pTKSYQQovqw6Z05OugxdLkWmq6q2SPNlbnAR0dH\n061bN7755hvWrVtH48aNWbhwIZ06dSI2NpYOHTqwcOFCABISEti4cSMbNmxg0aJFzJgxA7vdDkBU\nVBTR0dHExcWRmJjI9u3by2fPqjCvw78U9znfpoP0WieEEOXsxL2DyKvlTdO1y2r0ePFlKvDZ2dns\n2bOHAQMGAODk5ITJZGLr1q2EhYUBEBYWxubNmwHYsmULISEh6HQ66tevT4MGDYiPjyc1NRWz2Uxg\nYCAA/fr1K1mmOiu5eh8q996FEKK8WV1cOTpwJDqLmaarP1E7jmrKVODPnDmDl5cXkZGRhIWFMW3a\nNCwWC+fPn8fb2xsAb29vzp8v7hc4NTUVf3//kuX9/f1JSUm5bLqfnx+pqdW7FyLPY79R5+fvSbu1\nPemBd6odRwghqqXfQwaT5+FF09Wf4mTOVjuOKspU4IuKijh06BBDhgxh9erVuLq6ljTH/0VRFBRF\nKZeQ1UnL5R8AcOjhJ1ROIoQQ1ZfV1Y3jDw5Hb84mYN1yteOowqksC/n7++Pn51fStN67d28WLlyI\nt7c3aWlp+Pj4kJqaipeXF1B8ZZ6cnFyyfHJycsk6/j3d19f3mtv38TGVJbYq9HobRsMFDEYXjCeO\nUf+HzWS0DCS3Ww9MVfQLUK4ZDAYXTEYXtaNcl1yzHo1G5zB5oTgz4DCZ5RhXPDnG5S9lyAharFxE\ns9WfkDRsNBqDM97eJjw8HKeG3IgyFXgfHx/q1KnDyZMnadSoETt37iQgIICAgABWr17NmDFjWLNm\nDffccw8APXr0ICIighEjRpCSkkJiYiKBgYEoioLRaCQ+Pp7AwEDWrl3LsGHDrrn9tDTHaW7Jysom\nx5yPjTxaLv5zvPfBY8g256uc7OrM5jycXfPUjnFdzOYCNBqrw+SF4swmk47sHMfILMe44skxrgh6\njt//CK0+/wCflZ+SFBxGeno2BQWO94Z4WS5sy1TgAV588UWee+45CgsLadCgAbNnz8ZqtTJhwgRW\nrVpFvXr1mD9/PgABAQH07duXkJAQtFot06dPL2m+nz59OpGRkeTl5REUFES3bt3KGqlKM5w7TYPv\nNqTOiawAABszSURBVJDRqBnnOnRXO44QQtQIx8MepdlXn9BixUcc7B6idpxKVeYC36JFC1atWnXZ\n9I8//viK8z/xxBM88cTl951bt27N+vXryxrDYbT4chGKzcaRh8aAxvG+PQohhCMq8KjF7/cNpvn/\nltDk2w3QruaM+yGVphK4pafQcNMasuvdzB/d+qgdRwghapRj/Udg1em59atPoKhI7TiVRgp8Jbhl\nzTI0RYUcGTwatFq14wghRI2SV9uXk70fxJRyFuPX69SOU2mkwFcw7fl0mm1ag8WnDok9Q9WOI4QQ\nNdLRQaOwabTUWvAu2Gxqx6kUUuArmMeSRTgV5HNk0GPYdf/f3r2HRVUnfAD/nrkPV+MiuBAisFu6\nirXrWnlj8wIoiOBt7aJJBtH25ltu9axmr+6zufs82z7v9rS1KVmZbmUlecWUhII1b60hZkVvJpIX\nYATkNswww8x5/xhlu3iZGWb4McP38x/DnHO+/jK/c86c8/tpRMchIhqQOqNjcColHZpvvoam2P/v\n+wJY8F4ltbUi5J8bYQoNQ036HNFxiIgGtM9m3wdZkhDwwt+AS+uh+DMWvBfpXn8Nyo52fDFzAeza\n/jkRBBHRQNEWGw9jajrUlZ9Cvd//FzZjwXuL2Qz9uhdhDwzCVzx7JyLqF1ryHYt8BTz/v4KTeB8L\n3kt077wFpaEBrfcshDVwYEyLSETU33WNvhWWiSnQlH8IVVWl6DhexYL3BpsNAS88B1mjQeviJaLT\nEBHRd3Q+8hgAQP/35wQn8S4WvBdod22H8nQNzL+5B7bBUaLjEBHRd1hT7oQ1+RZod26D8tRJ0XG8\nhgXvabIM/fN/g6xQoPPhpaLTEBHRD0kSOpc+BkmWoX/xedFpvIYF72Hqj8qg/qwKXVnZsCckio5D\nRERXYMnIQvewBOjefhOK+jrRcbyCBe9hAX//GwDAdOk7HiIi6oeUSpj+61FIFgv06/4hOo1XsOA9\nSFV5FJr9FbD8ejK6R40WHYeIiK7BPP8u2KKiodvwCqTWFtFxPI4F70GXv8vp5Nk7EVH/p9XClPcQ\nFMYO6DZuEJ3G41jwHqKoOQXtru2wJt8C64RJouMQEZETzPflwh4YBH3hP4CuLtFxPIoF7yEBa1+A\nZLfD9PBSQJJExyEiIifIoYNgXrgYyoZ6aN97V3Qcj2LBe4DU1ATd5jdgixuKrpnZouMQEZELTA/+\nFrJKhYB/PO9XS8my4D1A/2ohJJMJpgd/C6hUouMQEZEL7DGx6MqeA9VX1dCUloiO4zEs+N7q7IT+\n1ULYBw2C6a6FotMQEZEbOh/+bwDwq4lvWPC9pHv7TSiammDKfQAIChIdh4iI3GD7+UhY7pwCzYH9\nUFUeFR3HI1jwvWGzIeClv0PWamFaUiA6DRER9YK/ncWz4HtBs3uXY1GZ+XdBHjxYdBwiIuoF68QU\nWEeNhnbXdihqTomO02ss+F4I+IfjU57poUcEJyEiol6TJJgeXgrJbkdAoe9PX8uCd5Pqk8NQH/0E\nXWnTYUv6qeg4RETkAV0zs2GLiYXurX9CarkoOk6vsODdFLD2RQA8eyci8itqNUx5D0Hq7PT56WtZ\n8G5Q1J6GpniHY1raO8aLjkNERB5kvneRY/ra9WsBi0V0HLex4N2gf/klx7S0BQ9zWloiIj8jh4TC\nfO8iKOvroN3+nug4bmPBu0hqbYHujU2wDfkJumbNFh2HiIi8wPRAAWSFAvq1LwKyLDqOW3pV8Dab\nDdnZ2SgocDwD3tLSgtzcXKSlpeH+++9HW1tbz3vXrVuH1NRUpKenY//+/T2vnzhxAjNnzkRqaiqe\neeaZ3sTpE7pNr0Nh7IDpgQJArRYdh4iIvMA+NB5dmbOg/qwK6o//JTqOW3pV8Bs3bkRiYmLPz4WF\nhRg3bhz27t2L22+/HYWFhQCAkydPYvfu3SguLsb69evxhz/8AfKlT0SrV6/GmjVrUFJSgtraWlRU\nVPQmkndZrdCvXws5IBDmRYtFpyEiIi8yFTwMANCvfUFwEve4XfD19fUoLy/HvHnzel4rKytDTk4O\nACAnJwf79u0DAJSWliIjIwNqtRqxsbGIi4tDVVUVDAYDjEYjkpOTAQDZ2dk92/RH2p3boDx/DqZ7\nFkIOHSQ6DhEReVH3mLGwjhkLbckeKE9+LTqOy9wu+D/96U948sknoVD8ZxdNTU2IiIgAAERERKCp\nqQkAYDAYEB0d3fO+6OhoNDQ0/Oj1qKgoGAwGdyN5lyxD/9ILkBUKmPIeEp2GiIj6QOelR6H1lx6N\n9iVuFfyHH36I8PBwjBgxoudS+w9JkgTJj+4wVx8+CHVVJSzTM2GPHyY6DhER9QHLjEzY4uKhe+dN\nSM1NouO4xK3FyysrK1FWVoby8nJYLBZ0dHTgiSeeQHh4OC5cuIDIyEgYDAaEhYUBcJyZ19fX92xf\nX1+P6OjoK74+2Ik53SMjg92J3TuvvwwA0P7+CZeOr9HYERTYjMAgnbeSeZzJCAQG6hDsI5lNRg0U\nCrXP5AUcmQH4TGaOsfdxjL1PAQsiIoIRGupihzy6FFi2DBFbNwO//713wnmBWwW/bNkyLFu2DABw\n5MgRvPrqq3j22Wfxl7/8BVu3bkV+fj62bduGqVOnAgAmT56M3/3ud1i8eDEaGhpQW1uL5ORkSJKE\noKAgVFVVITk5Gdu3b8fChddfU/3ChXZ3YrtN8W0twrZuRffoW9Hys2TAheO3tbWjw9gFO8xeTOh5\nRqMZWr1vZDYaLVAobD6TF3BkDg5Wo73DNzJzjL2PY+x9ncYuNDa2w2Jx7eK1lDUPYU//D+Tn/47m\nRflCnqBy58TWo8/B5+fn48CBA0hLS8OhQ4eQn58PAEhKSsL06dORkZGBvLw8rFq1qufy/apVq7By\n5UqkpqZi6NChmDRpkicjeYT+lULHxDZ5BZzYhohogJFDQmG+6x4o685Du2u76DhOk+SrfYnej/Xp\nGXxHB8JvGQ5Zp0Pz0ROAVuvS5m1trdj/WR0CAgV8reAmk7EJJpMNYRG+sQRuo6EOCoXSZ/ICjszB\nwYHQ6kNER3EKx9j7OMbe12lsx4RRQxASEurytspTJ3HDHb9E9y/GoOX9Ui+kuzbhZ/D+SPf2m1C0\ntcK8eInL5U5ERP7BlpAES2o61Ec/gerfR0THcQoL/lrsduhffgmyRgPTfUtEpyEiIoFM+b8F4FiP\nxBew4K9BU1oC1alvYJ4zH3JkpOg4REQkkHXCJHQPHwHtzu1QnD8nOs51seCvQb/O8SmNE9sQEREk\nCab830Lq7ob+tfWi01wXC/4qlF9+AU3Fh7CMnwjbyFGi4xARUT9gnj0P9vBw6Da+CnR2io5zTSz4\nq9CvXwuAZ+9ERPQdej1Mi3KhuHgRuqJ3RKe5Jhb8FUgXm6Hb8jZscUNhSZsuOg4REfUj5tw8yCoV\n9OvX9eu14lnwV6B7YxMkkwmm3DxAqRQdh4iI+hF79BB0ZWZB9eXnUB/YLzrOVbHgf8hmg37Desh6\nPcx33ys6DRER9UOmJQUA4DiL76dY8D+gKdkD5be1MM/9DeQbwkTHISKifqh77G2wjhoNzfu7oDh7\nRnScK2LB/8DlT2OmJQ8KTkJERP2WJMGUVwDJbod+wyui01wRC/47lF9VQ/OvjxyPxo34ueg4RETU\nj3Vlz3E8MvfPDYDJJDrOj7Dgv0P/Cs/eiYjISTodzPcuhqK5GdptRaLT/AgL/hKptQW6dzbDFhML\nS/oM0XGIiMgHmBYvgaxU9stH5ljwl+je+iekTiNMuQ8AKpXoOERE5APsMbGwTM+E+rMqqA4fEh3n\ne1jwgGPVuFdfhqzTwXzPfaLTEBGRDzHlXXpk7pX+9cgcCx6ApuwDKE/XwJwzF3J4uOg4RETkQ6y3\nj0P3iJHQFu+Aor5OdJweLHgAukurApmX5AtOQkREPkeSYLo/D1J3N3SbNohO02PAF7yi9jQ0+0pg\n/eWv0J18i+g4RETkg8xz5sMeHALdxtcAq1V0HAAseOg3vAJJlh031xEREbkjMBDmBXdD2VAPzfu7\nRKcBMNAL3mSC7s2NsIeHoysrR3QaIiLyYebcPACA/tLXvqIN6ILXbn8PiosXHXfO63Si4xARkQ+z\nJf0Ulkl3QvPxv6Cs/lJ0nIFd8PrXXoYsSTAtyhUdhYiI/MDlr3v1r70sOMkALnhV5VGoKz+FJTUd\n9rihouMQEZEfsKRNh+0nMdC+sxlSR7vQLAO24C9/R8Kb64iIyGNUKpgX5UJh7ID2nc1CowzIgpea\nm6DdVoTuYQmw/nqK6DhERORHTPcuhqxWOy7TC5yffkAWvO6tNyCZzTAvfgBQDMghICIiL5EHD0bX\nzFlQfVUN9YH9wnIMvHaz26F//RXHvPML7hadhoiI/JBpseOROd3rrwjLMOAKXl3+IZSna9CVPQfy\nDWGi4xARkR/qvu12dA8fAW3xTkgGg5AMA25dVP3rrwIATPfdLzgJERH1Jbvdjvb2tr474Py7EPmH\npyG99jJaH/ovt3cTFBTs1nZuFXxdXR2efPJJNDc3Q5IkzJ8/H4sWLUJLSwsee+wxnD9/HjExMXju\nuecQEhICAFi3bh2KioqgUCiwcuVKTJgwAQBw4sQJLF++HF1dXZg0aRJWrlx5zWO3trbh439/DqVC\n6XJuXaMBU/bsRmviTdiPQOBT709EYDR24EJzN4YGuvcfiIiIPMNs6kT5pxcxKKxvVg1V/2w85un0\n0G7ciI/vyIasdL23TJ1GTLstCVFRoS5v61bBq1QqrFixAsOHD4fRaMTs2bMxfvx4FBUVYdy4ccjL\ny0NhYSEKCwvx+OOP4+TJk9i9ezeKi4vR0NCA3NxclJSUQJIkrF69GmvWrEFycjLy8vJQUVGBSZMm\nXf0Pazaj3aqFTh/gcu6EvZugsNvwdebdMCtdHyx3dCkkmMwNfXIsIiK6Np0+AAF9dcIVGIwzd2Yi\n4f13May6CvVjU/rmuJe49R18ZGQkhg8fDgAIDAxEYmIiGhoaUFZWhpwcx5zuOTk52LdvHwCgtLQU\nGRkZUKvViI2NRVxcHKqqqmAwGGA0GpGcnAwAyM7O7tnG0yRbN4a9/y6sAYH4dnKGV45BRET0Xd/M\nXAAASNz1dp8fu9c32Z09exZffvklkpOT0dTUhIiICABAREQEmpqaAAAGgwHR0dE920RHR6OhoeFH\nr0dFRcHgpZsRhhz6CAGNDaidkgWbPtArxyAiIvqulqQRaLopGUOOlENvON+nx+7VTXZGoxFLly7F\nU089haCgoO/9TpIkSJLUq3BXExykg07v2uIwP9vzLgCgfv4iBAf13cIyClig12v69Ji9ZTICgYE6\nn8lsMmqgUKh9Ji/gyAzAZzJzjL2PY+x9osb4/Jx7Ef6nJ3Hzvq04mf87l7ZVwIKIiD68yQ4ArFYr\nli5diqysLEydOhUAEB4ejgsXLiAyMhIGgwFhYY7H0KKiolBfX9+zbX19PaKjo6/4+uDBg6977PYO\nM6w25y8+BNadQeThCjT+/Beoi4oHOsxOb9tbncYumEwWtPfhMT3BaDRDq/eNzEajBQqFzWfyAo7M\nwcFqn/l7wTH2Po6x94ka469vn4qbgkIQs2Mzjs3Ph6xSO71tp7ELjY3tCA11/b4xty7Ry7KMp556\nComJiVi8eHHP65MnT8bWrVsBANu2besp/smTJ6O4uBgWiwVnzpxBbW0tkpOTERkZiaCgIFRVVUGW\nZWzfvr1nG09KKHZ89/FNxm88vm8iIqJrsen0OD1tFvTNjfjJgbI+O65bZ/BHjx7Fjh07cNNNNyE7\nOxsAsGzZMuTn5+PRRx9FUVFRz2NyAJCUlITp06cjIyMDSqUSq1at6rl8v2rVKixfvhxmsxkpKSnX\nvIPeHQqLBcP2voeukEE4OynNo/smIiJyxqmMBfjZ1k1I3LUZ5/qoi9wq+DFjxqC6uvqKv9uwYcMV\nXy8oKEBBQcGPXh85ciR27tzpTgynxHz8AbStF/HV3FzYNVqvHYeIiOhq2uMSYBg9FlHHDiHo3Gl0\nxMR7/Zh+P1Vtwm7HzXWnZswTnISIiAayUzPmAwCGvb+lT47n1wUfdLYGg6sOwzD6NnTEDhMdh4iI\nBrBz46ehK2QQ4vduhWS1eP14fl3wlz8l8eydiIhEs2s0OJ2aA11rM2IOlHr9eH5b8AqLBcNKtqIr\nZBDOjZ8mOg4RERFOTXeccCbsfsfrx/Lbgv/JgX3Qtl7E6dQc2DUa0XGIiIjQceMwGJJ/hajKQwg8\nV+vVY/ltwffcXDedl+eJiKj/uHyzXcIe795s55cFH3TuNKKOHYJh9Fh03Mib64iIqP84N6Fvbrbz\ny4L/z8118wUnISIi+j67RovT07Kha2lCzEHvzWzndwUvWS2I33v55jrPT3tLRETUWzWXb7Yr9t7N\ndn5X8DEHy6BrbcbpadmcuY6IiPql9rgEXBg1BlGVBxF4/luvHMPvCv7yp6Ea3lxHRET9mLdntvOr\ngg+oO4uoyoO4MPKXaI9LEB2HiIjoqs5OTIUlOBTxH2yF1G31+P79quCH7S0CANRMnys4CRER0bXZ\nNVrUTp4JfXMjhhyp8Pj+/abgJVs34ku2whoQhLMTuSwsERH1f5dPSL1xmd5vCj7q3/sR0NiA2smZ\nsOn0ouMQERFdV2vCTWi+aRSGfFIBXWODR/ftNwWfcOnTDy/PExGRLzmVPheS3Y74kq0e3a9fFLy2\n+QKGHPoIF5OGo+WnPxcdh4iIyGlnfj0D3Vo9hu0pAux2j+3XLwo+/oNtUNhtnHeeiIh8TndgEM78\nejqC6s9icNVhj+3X9wteljHs/S3o1upw5s4M0WmIiIhcVpPu+ZvtfL7gIz77BMHnv8XZiWmwBoWI\njkNEROSyphG3oC0uETEffwBN20WP7NPnC5431xERkc+TJJxKnwul1Yq40p0e2aVPF7y6ow2x/ypB\ne2w8Gkf+UnQcIiIit9VOzYJdpXacuMpyr/fn0wV/44fFUFq6UJM+B5Ak0XGIiIjcZhkUhnN3TEbo\n6a9xw/+d6PX+fLrgh+19D3aFEqenzhIdhYiIqNdq0ucA+M/U673hswUfeuorhP3fCdTdloKusEjR\ncYiIiHqt4Rfj0BkRhbiyYijNpl7ty2cLPn7vewCA02mzBSchIiLyEKUSp6dlQ93ZgZiP9/VqVz5Z\n8AqrFUNLd8A8KBx1YyeJjkNEROQxp1NzAPznRNZdPlnwsUfKoW1rQe3UWZBVatFxiIiIPMYYMxSG\n5F8h6tghBDWcc3s/PlnwSaU7AAA1aTmCkxAREXne5a+fE8uK3d5Hvyj4iooKpKenIzU1FYWFhdd8\nr+L8eQypPIim4aPRPjSpjxISERH1nbMTUmENCERS2U7AZnNrH8IL3maz4Y9//CPWr1+P4uJiFBcX\n45tvvrnq+/XvvgOF3Y4a3lxHRER+yqYPwJmUGQhqbID+4Mdu7UN4wR8/fhxxcXGIjY2FWq1GRkYG\nSktLr/p+/ebN6NZocSZlRh+mJCIi6ls16Y4T2eAtb7u1vfCCb2howJAhQ3p+joqKQkNDw1Xfr6qp\nQe34qegODOqLeEREREI03zwaLbHDELR3j1vbqzycx2WSG1PMVo+7E52tBi+k8bxOYwe6zEZ0GttF\nR3GaubMTZrPNZzKbTUYoFCqfyQs4MqtUgM3uG1Msc4y9j2Psfb44xl9OSsMdb651a1vhBR8VFYW6\nurqen+vr6xEVFXX1DWQZXPWdiIgGhOxfAW+85Namwi/Rjxw5ErW1tTh79iwsFgt2796NKVOmiI5F\nRETk04SfwatUKjz99NNYsmQJ7HY75s6di8TERNGxiIiIfJokyx5YdJaIiIj6FeGX6ImIiMjzWPBE\nRER+iAVPRETkh/ptwTszP/0zzzyD1NRUZGVl4YsvvujjhL7vemO8Y8cOZGVlYebMmViwYAGqq6sF\npPRtzq6zcPz4cYwYMQIlJSV9mM5/ODPOhw8fRnZ2NjIzM7Fw4cI+Tuj7rjfGzc3NWLJkCWbNmoXM\nzEy8917vljodiJYvX45x48Zh5syZV32PS70n90Pd3d3y1KlT5TNnzsgWi0XOysqST548+b33fPTR\nR/IDDzwgy7IsHzt2TJ43b56IqD7LmTH+9NNP5ba2NlmWZbm8vJxj7CJnxvjy+xYuXCjn5+fLe/bs\nEZDUtzkzzq2trfKMGTPkuro6WZZluampSURUn+XMGD///PPyX//6V1mWHeM7duxY2Wq1iojrsz75\n5BP5888/lzMzM6/4e1d7r1+ewTszP31paSlychzLxY4ePRptbW1obGwUEdcnOTPGt956K4KDgwE4\nxri+vl5EVJ/l7DoLmzZtQlpaGsLCwgSk9H3OjPPOnTuRmpqK6OhoAOBYu8iZMY6MjERHRwcAwGg0\nYtCgQVCphD+J7VPGjBmDkJCQq/7e1d7rlwXvzPz0BoOh539WAIiOjmYBucDVNQC2bNmClJSUvojm\nN5wZ44aGBpSWluLuu+8G4N7UzQOdM+NcW1uL1tZWLFy4ELNnz8a2bdv6OqZPc2aM58+fj5MnT2LC\nhAnIysrCihUr+jqm33O19/rlxytn/5GTf/AIP/9xdJ4rY3Xo0CEUFRXhrbfe8mIi/+PMGK9ZswaP\nP/44JEmCLMs/+jtN1+fMOHd3d+OLL77Ahg0bYDKZsGDBAtxyyy2Ij4/3fkA/4MwYr127FjfffDM2\nbdqEb7/9Frm5udi+fTuCgrgwmCe50nv9suCdmZ9+8ODB3/vkct057Ol7nF0DoLq6Gk8//TTWr1+P\n0NDQvozo85wZ488//xyPPfYYAODixYuoqKiASqXidM0ucGaco6OjccMNN0Cn00Gn02HMmDGorq5m\nwTvJmTGurKxEQUEBAPRczq+pqcGoUaP6NKs/c7X3+uUlemfmp58yZUrPZbZjx44hJCQEERERIuL6\nJGfG+Pz583jkkUfw7LPPYujQoYKS+i5nxri0tBRlZWUoKytDeno6Vq9ezXJ3kbP/Xhw9ehQ2mw0m\nkwnHjx9HUlKSoMS+x5kxTkhIwMGDBwEAjY2NqKmpwY033igirt9ytff65Rn81ean37x5MwBgwYIF\nSElJQXl5OaZNmwa9Xo8///nPglP7FmfG+MUXX0RbWxtWr17ds82WLVsEpvYtzowx9Z4z45yYmIiJ\nEyciKysLCoUC8+bNY8G7wJkxfvDBB7FixQpkZWVBlmU88cQTGDRokODkvmXZsmU4cuQIWlpakJKS\ngkceeQTd3d0A3Os9zkVPRETkh/rlJXoiIiLqHRY8ERGRH2LBExER+SEWPBERkR9iwRMREfkhFjwR\nEZEfYsETERH5IRY8ERGRH/p/XxYhATgyPV0AAAAASUVORK5CYII=\n", 217 | "text/plain": [ 218 | "" 219 | ] 220 | }, 221 | "metadata": {}, 222 | "output_type": "display_data" 223 | } 224 | ], 225 | "source": [ 226 | "%matplotlib inline \n", 227 | "import numpy as np\n", 228 | "import matplotlib.pylab as plt\n", 229 | "import pandas as pd\n", 230 | "\n", 231 | "pd.set_option('display.width', 500)\n", 232 | "pd.set_option('display.max_columns', 100)\n", 233 | "import seaborn as sns\n", 234 | "\n", 235 | "## FUNCTIONS \n", 236 | "# target distribution p(x) \n", 237 | "p = lambda x: 6*x*(1-x)\n", 238 | "\n", 239 | "# number of samples\n", 240 | "n = 100000\n", 241 | "\n", 242 | "sig =0.10\n", 243 | "\n", 244 | "#intitialize the sampling. Start somewhere from 0..1\n", 245 | "x0 = np.random.uniform()\n", 246 | "\n", 247 | "x_prev = x0\n", 248 | "\n", 249 | "x=[]\n", 250 | "k=1\n", 251 | "i=0\n", 252 | "while i 1): # MAKE SURE WE STAY WITHIN BOUNDS\n", 256 | " x_star = np.random.normal(x_prev, sig)\n", 257 | "\n", 258 | " P_star = 6*x_star*(1-x_star) #p(x_star);\n", 259 | " P_prev = 6*x_prev*(1-x_prev) #p(x_prev);\n", 260 | " U = np.random.uniform()\n", 261 | " \n", 262 | " A = P_star/P_prev\n", 263 | " if U < A:\n", 264 | " x.append(x_star)\n", 265 | " i = i + 1\n", 266 | " x_prev = x_star\n", 267 | " else :\n", 268 | " x.append(x_prev)\n", 269 | " x_prev = x[i] \n", 270 | " i = i + 1\n", 271 | " \n", 272 | " k=k+1\n", 273 | "\n", 274 | "e,q,h=plt.hist(x,10, alpha=0.4, label=u'MCMC distribution') \n", 275 | "\n", 276 | "xx= np.linspace(0,1,100)\n", 277 | "plt.plot(xx, 0.67*np.max(e)*p(xx), 'r', label=u'True dsitribution') \n", 278 | "plt.legend()" 279 | ] 280 | }, 281 | { 282 | "cell_type": "code", 283 | "execution_count": 1, 284 | "metadata": { 285 | "collapsed": false, 286 | "scrolled": true 287 | }, 288 | "outputs": [ 289 | { 290 | "data": { 291 | "text/html": [ 292 | "\n", 293 | " \n", 300 | " " 301 | ], 302 | "text/plain": [ 303 | "" 304 | ] 305 | }, 306 | "execution_count": 1, 307 | "metadata": {}, 308 | "output_type": "execute_result" 309 | } 310 | ], 311 | "source": [ 312 | "from IPython.display import YouTubeVideo\n", 313 | "\n", 314 | "# Bayesian Inference and MCMC (Bob Carpenter) 2:03:10 (t=7390)\n", 315 | "YouTubeVideo('qQFF4tPgeWI')" 316 | ] 317 | }, 318 | { 319 | "cell_type": "markdown", 320 | "metadata": {}, 321 | "source": [ 322 | "### 2.4.2 ハミルトニアンモンテカルロ法" 323 | ] 324 | }, 325 | { 326 | "cell_type": "markdown", 327 | "metadata": {}, 328 | "source": [ 329 | "- ハミルトン力学(解析力学)のアナロジーで,サンプリングの遷移を力学的に決めることで,事後分布に従う乱数を生成する.\n", 330 | " - パラメータ空間 -> 位相空間\n", 331 | " - ある特徴的なパラメータ -> 運動量\n", 332 | " - ポテンシャル -> マイナスの事後分布\n", 333 | " - 位相空間と運動量の連立微分方程式であるハミルトン方程式をたて,リープフロッグ法で解く\n", 334 | " \n", 335 | "$$\n", 336 | "\\frac{d p(\\tau)}{d\\tau} = - h(\\theta(\\tau)) \\\\\n", 337 | "\\frac{d \\theta(\\tau)}{d\\tau} = - p(\\tau)\n", 338 | "$$\n", 339 | "- HMCの計算機実装:PyMC3, Stanの二つが現在の所まともなHMCの実装(LaplacesDeamonはおそらく死亡…)\n", 340 | "- 日本語の文献:豊田秀樹編著, 基礎からのベイズ統計学 - ハミルトニアンモンテカルロ法による実践的入門" 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "execution_count": 17, 346 | "metadata": { 347 | "collapsed": false, 348 | "scrolled": true 349 | }, 350 | "outputs": [ 351 | { 352 | "data": { 353 | "text/html": [ 354 | "\n", 355 | " \n", 362 | " " 363 | ], 364 | "text/plain": [ 365 | "" 366 | ] 367 | }, 368 | "execution_count": 17, 369 | "metadata": {}, 370 | "output_type": "execute_result" 371 | } 372 | ], 373 | "source": [ 374 | "# Hamiltonian Monte Carlo and Stan (Michael Betancourt) 58:25 (t=3507)\n", 375 | "YouTubeVideo('pHsuIaPbNbY')" 376 | ] 377 | }, 378 | { 379 | "cell_type": "markdown", 380 | "metadata": {}, 381 | "source": [ 382 | "###2.4.3 MH, Gibbs, HMCのサンプリングの比較デモ" 383 | ] 384 | }, 385 | { 386 | "cell_type": "code", 387 | "execution_count": 30, 388 | "metadata": { 389 | "collapsed": false 390 | }, 391 | "outputs": [ 392 | { 393 | "data": { 394 | "text/html": [ 395 | "\n", 396 | " \n", 403 | " " 404 | ], 405 | "text/plain": [ 406 | "" 407 | ] 408 | }, 409 | "execution_count": 30, 410 | "metadata": {}, 411 | "output_type": "execute_result" 412 | } 413 | ], 414 | "source": [ 415 | "# HT: Thomas Wiecki\n", 416 | "from IPython.display import IFrame\n", 417 | "IFrame('http://twiecki.github.io/blog/2014/01/02/visualizing-mcmc/', width='100%', height=1000)" 418 | ] 419 | }, 420 | { 421 | "cell_type": "markdown", 422 | "metadata": {}, 423 | "source": [ 424 | "## 2.5 計算機実装" 425 | ] 426 | }, 427 | { 428 | "cell_type": "markdown", 429 | "metadata": {}, 430 | "source": [ 431 | "### 2.5.1 pymc3\n", 432 | "\n", 433 | "- pythonのMCMC実装の老舗プロジェクト\n", 434 | "- pymc3はpymc2とは別に,完全に新しく始めたプロジェクト.\n", 435 | "- シンタックスが簡単\n", 436 | "- いけてるサンプリングアルゴリズム: NUTS\n", 437 | " - NUTS, Metropolis, Slice, HamiltonianMC, BinaryMetropolis\n", 438 | "- Theano\n", 439 | " - Theanoの自動微分機能を用いて,解析的にモデルのグラジェントを計算\n", 440 | " - CUDAを利用したGPU計算でパフォーマンスが期待できる\n", 441 | " - JITコンパイル: python/Numpy - theano -> C -> GPU/CPU\n", 442 | "- 非常に期待したいが….\n", 443 | " - コアの開発者が三人しかいない: John Salvatier, Thomas Wiecki, Chris Fonnesbeck.\n", 444 | " - ドキュメントがプアである….ただし,Thomas Wieckiのブログが孤軍奮闘\n", 445 | " - Theanoからのもらいバグが多い…\n", 446 | " - 最近開発が止まりガチ…" 447 | ] 448 | }, 449 | { 450 | "cell_type": "code", 451 | "execution_count": 21, 452 | "metadata": { 453 | "collapsed": false 454 | }, 455 | "outputs": [ 456 | { 457 | "data": { 458 | "text/html": [ 459 | "\n", 460 | " \n", 467 | " " 468 | ], 469 | "text/plain": [ 470 | "" 471 | ] 472 | }, 473 | "execution_count": 21, 474 | "metadata": {}, 475 | "output_type": "execute_result" 476 | } 477 | ], 478 | "source": [ 479 | "# John Salvatier: \"Bayesian inference with PyMC 3\" in PyData Seattle 2015\n", 480 | "YouTubeVideo('VVbJ4jEoOfU')" 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": 20, 486 | "metadata": { 487 | "collapsed": false, 488 | "scrolled": true 489 | }, 490 | "outputs": [ 491 | { 492 | "data": { 493 | "text/html": [ 494 | "\n", 495 | " \n", 502 | " " 503 | ], 504 | "text/plain": [ 505 | "" 506 | ] 507 | }, 508 | "execution_count": 20, 509 | "metadata": {}, 510 | "output_type": "execute_result" 511 | } 512 | ], 513 | "source": [ 514 | "# Thomas Wiecki: \"Probabilistic Programming in Python\" in EuroPython 2014 \n", 515 | "YouTubeVideo('KqTUNJ1smYM')" 516 | ] 517 | }, 518 | { 519 | "cell_type": "code", 520 | "execution_count": 24, 521 | "metadata": { 522 | "collapsed": false, 523 | "scrolled": true 524 | }, 525 | "outputs": [ 526 | { 527 | "data": { 528 | "text/html": [ 529 | "\n", 530 | " \n", 537 | " " 538 | ], 539 | "text/plain": [ 540 | "" 541 | ] 542 | }, 543 | "execution_count": 24, 544 | "metadata": {}, 545 | "output_type": "execute_result" 546 | } 547 | ], 548 | "source": [ 549 | "# Thomas Wiecki: \"Bayesian Data Analysis with PyMC3\" in PyData NYC 2013 \n", 550 | "IFrame('http://twiecki.github.io/blog/2013/12/12/bayesian-data-analysis-pymc3/', width='100%', height=400)" 551 | ] 552 | }, 553 | { 554 | "cell_type": "markdown", 555 | "metadata": {}, 556 | "source": [ 557 | "### 2.5.2 stan/pystan\n", 558 | "\n", 559 | "- ハミルトン・モンテカルロ法のスター研究者達が自らC++でコーディングしている実装\n", 560 | " - Andrew Gelmanをリーダに,NUTS法や変分ベイズのMatthew Hoffmanやリーマン多様体HMCのMichael Betancourtなど.\n", 561 | "- HMC法を実装する実装(stan, pymc3)のなかで,一番最新の機能実装が進んでいる.\n", 562 | " - 変分ベイズも実装済み.リーマン多様体HMCも実装中.\n", 563 | "- ドキュメントが充実している.勝手にStan入門が充実している.\n", 564 | " - \"Modeling Language User’s Guide and Reference Manual\" [stan-reference-2.8.0.pdf](https://github.com/stan-dev/stan/releases/download/v2.8.0/stan-reference-2.8.0.pdf)\n", 565 | "- Pythonより圧倒的にRから使われることが多い." 566 | ] 567 | }, 568 | { 569 | "cell_type": "code", 570 | "execution_count": 3, 571 | "metadata": { 572 | "collapsed": false 573 | }, 574 | "outputs": [ 575 | { 576 | "data": { 577 | "text/html": [ 578 | "\n", 579 | " \n", 586 | " " 587 | ], 588 | "text/plain": [ 589 | "" 590 | ] 591 | }, 592 | "execution_count": 3, 593 | "metadata": {}, 594 | "output_type": "execute_result" 595 | } 596 | ], 597 | "source": [ 598 | "# Ehsan Karim: \"Stan for the beginners [Bayesian inference] in 6 mins \"\n", 599 | "YouTubeVideo('tLprFqSWS1w')" 600 | ] 601 | }, 602 | { 603 | "cell_type": "code", 604 | "execution_count": 18, 605 | "metadata": { 606 | "collapsed": false, 607 | "scrolled": true 608 | }, 609 | "outputs": [ 610 | { 611 | "data": { 612 | "text/html": [ 613 | "\n", 614 | " \n", 621 | " " 622 | ], 623 | "text/plain": [ 624 | "" 625 | ] 626 | }, 627 | "execution_count": 18, 628 | "metadata": {}, 629 | "output_type": "execute_result" 630 | } 631 | ], 632 | "source": [ 633 | "# Bob Carpenter: \"Bayesian Inference and MCMC\" in MLSS Sydney 2015\n", 634 | "YouTubeVideo('6NXRCtWQNMg')" 635 | ] 636 | }, 637 | { 638 | "cell_type": "code", 639 | "execution_count": 19, 640 | "metadata": { 641 | "collapsed": false, 642 | "scrolled": true 643 | }, 644 | "outputs": [ 645 | { 646 | "data": { 647 | "text/html": [ 648 | "\n", 649 | " \n", 656 | " " 657 | ], 658 | "text/plain": [ 659 | "" 660 | ] 661 | }, 662 | "execution_count": 19, 663 | "metadata": {}, 664 | "output_type": "execute_result" 665 | } 666 | ], 667 | "source": [ 668 | "# Michael Betancourt: \"Hamiltonian Monte Carlo and Stan\" in MLSS Iceland 2014\n", 669 | "YouTubeVideo('xWQpEAyI5s8')" 670 | ] 671 | } 672 | ], 673 | "metadata": { 674 | "kernelspec": { 675 | "display_name": "Python 3", 676 | "language": "python", 677 | "name": "python3" 678 | }, 679 | "language_info": { 680 | "codemirror_mode": { 681 | "name": "ipython", 682 | "version": 3 683 | }, 684 | "file_extension": ".py", 685 | "mimetype": "text/x-python", 686 | "name": "python", 687 | "nbconvert_exporter": "python", 688 | "pygments_lexer": "ipython3", 689 | "version": "3.4.3" 690 | } 691 | }, 692 | "nbformat": 4, 693 | "nbformat_minor": 0 694 | } 695 | --------------------------------------------------------------------------------