From e6a941b61912f94df714449892cc4e7d43bf0d3a Mon Sep 17 00:00:00 2001 From: Datpmt Date: Fri, 17 Jan 2025 14:13:37 +0700 Subject: [PATCH 1/8] Upgrade gem typo_checker v0.1.8 --- .github/typocop/setting.yml | 11 +++++++++++ lib/typocop.rb | 16 ++++++++++------ lib/typocop/settings.rb | 10 ++++------ 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/.github/typocop/setting.yml b/.github/typocop/setting.yml index adcd61a6..2c87f13f 100644 --- a/.github/typocop/setting.yml +++ b/.github/typocop/setting.yml @@ -1,5 +1,16 @@ # Configuration for Typocop - a GitHub Action for checking typos in pull requests +# 'paths' section allows you to specify which files or directories to scan. +# Only the specified paths will be checked for typos. You can use glob patterns to include directories. + +paths: # Files and directories to scan + # Example: Scan only the 'src' folder + - src/* + # Example: Scan a specific file (e.g., 'README.md') + - README.md + # Example: Scan all Ruby files in the 'lib' directory + - lib/**/*.rb + # 'excludes' section allows you to specify files and folders to exclude # from the typo-checking process. You can list specific files or use glob # patterns to exclude entire directories. diff --git a/lib/typocop.rb b/lib/typocop.rb index 91870dbf..c3855f60 100644 --- a/lib/typocop.rb +++ b/lib/typocop.rb @@ -11,23 +11,27 @@ require 'typocop/repo' require 'typo_checker' -GITHUB_TOKEN = ENV['GITHUB_TOKEN'] || '' -PULL_ID = ENV['PULL_REQUEST_ID'] -GITHUB_BASE_REF = ENV['GITHUB_BASE_REF'] || 'main' +GITHUB_TOKEN = ENV.fetch('GITHUB_TOKEN') { raise 'GITHUB_TOKEN is required' } +PULL_ID = ENV.fetch('PULL_REQUEST_ID') { raise 'PULL_REQUEST_ID is required' } +GITHUB_BASE_REF = ENV.fetch('GITHUB_BASE_REF') { raise 'GITHUB_BASE_REF is required' } BASE_BRANCH = GITHUB_BASE_REF.start_with?('origin/') ? GITHUB_BASE_REF : "origin/#{GITHUB_BASE_REF}" module Typocop def self.execute(settings) + repo = Repo.new + paths = repo.patch_additions.map(&:path) + + return unless paths.any? + excludes = settings.excludes skips = settings.skips - typo_checker = TypoChecker::Checker.new(excludes, skips, stdoutput = false) + typo_checker = TypoChecker::Checker.new(paths: paths, excludes: excludes, skips: skips, stdoutput: false) found_typos = typo_checker.scan_repo('.') if found_typos.empty? - puts 'No typos.' + puts 'No typos found' else cops = Cops.new(found_typos) - repo = Repo.new client = Client.new(repo) client.execute(cops.cops) end diff --git a/lib/typocop/settings.rb b/lib/typocop/settings.rb index f700c20b..e51f13b0 100644 --- a/lib/typocop/settings.rb +++ b/lib/typocop/settings.rb @@ -13,12 +13,10 @@ def initialize(setting_path) private def load_settings(setting_path) - begin - YAML.load_file(setting_path) - rescue StandardError => e - puts "Error loading YAML file: #{e.message}" - return {} - end + YAML.load_file(setting_path) + rescue StandardError => e + puts "Error loading YAML file: #{e.message}" + {} end end end From 13cd400b220d39326f578cd8ebc5a96f7af0bcb8 Mon Sep 17 00:00:00 2001 From: Datpmt Date: Fri, 17 Jan 2025 14:18:22 +0700 Subject: [PATCH 2/8] revert settings.yml --- .github/typocop/setting.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/typocop/setting.yml b/.github/typocop/setting.yml index 2c87f13f..adcd61a6 100644 --- a/.github/typocop/setting.yml +++ b/.github/typocop/setting.yml @@ -1,16 +1,5 @@ # Configuration for Typocop - a GitHub Action for checking typos in pull requests -# 'paths' section allows you to specify which files or directories to scan. -# Only the specified paths will be checked for typos. You can use glob patterns to include directories. - -paths: # Files and directories to scan - # Example: Scan only the 'src' folder - - src/* - # Example: Scan a specific file (e.g., 'README.md') - - README.md - # Example: Scan all Ruby files in the 'lib' directory - - lib/**/*.rb - # 'excludes' section allows you to specify files and folders to exclude # from the typo-checking process. You can list specific files or use glob # patterns to exclude entire directories. From de22a9eb1c175f27eae6b52cbff4f0074a5cb8d8 Mon Sep 17 00:00:00 2001 From: Datpmt Date: Fri, 17 Jan 2025 15:55:27 +0700 Subject: [PATCH 3/8] fix rubocop --- lib/typocop/client.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/typocop/client.rb b/lib/typocop/client.rb index 0a5d1f76..6e4a9c0b 100644 --- a/lib/typocop/client.rb +++ b/lib/typocop/client.rb @@ -99,7 +99,7 @@ def suggestion_comment(typos) end def line_content(cop) - patch = @repo.patch_additions.find { |patch| patch.path == cop.path } + patch = @repo.patch_additions.find { |p| p.path == cop.path } patch.added_lines.find { |line| line.new_lineno == cop.line }.content end From 527e4f4190ebbb128b29c96ba1a8c3baab3e8bc1 Mon Sep 17 00:00:00 2001 From: Datpmt Date: Thu, 20 Feb 2025 09:53:24 +0700 Subject: [PATCH 4/8] Update Typocop gem to version `0.1.4` --- lib/typocop/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/typocop/version.rb b/lib/typocop/version.rb index 583ada2d..fdca804b 100644 --- a/lib/typocop/version.rb +++ b/lib/typocop/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Typocop - VERSION = '0.1.3' + VERSION = '0.1.4' end From ec2812b65f34f9b0c28d7b3998aaf144c0735706 Mon Sep 17 00:00:00 2001 From: Datpmt Date: Thu, 20 Feb 2025 11:20:27 +0700 Subject: [PATCH 5/8] Ensure `client.execute` is run even when `found_typos` is empty to remove outdated comments and approve the PR --- lib/typocop.rb | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/typocop.rb b/lib/typocop.rb index c3855f60..9aa67802 100644 --- a/lib/typocop.rb +++ b/lib/typocop.rb @@ -28,12 +28,10 @@ def self.execute(settings) typo_checker = TypoChecker::Checker.new(paths: paths, excludes: excludes, skips: skips, stdoutput: false) found_typos = typo_checker.scan_repo('.') - if found_typos.empty? - puts 'No typos found' - else - cops = Cops.new(found_typos) - client = Client.new(repo) - client.execute(cops.cops) - end + puts 'No typos found' if found_typos.empty? + + cops = Cops.new(found_typos) + client = Client.new(repo) + client.execute(cops.cops) end end From 604421ea2782972dc7516117d313bc73e0e0d210 Mon Sep 17 00:00:00 2001 From: Datpmt Date: Thu, 20 Feb 2025 11:22:48 +0700 Subject: [PATCH 6/8] Upgrade gem `typo_checker` dependency to the latest version --- typocop.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typocop.gemspec b/typocop.gemspec index 2e11b548..057df003 100644 --- a/typocop.gemspec +++ b/typocop.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.add_dependency 'octokit', '9.2.0' s.add_dependency 'rugged', '~> 1.6.3' s.add_dependency 'thor', '~> 1.3.2' - s.add_dependency 'typo_checker', '0.1.7' + s.add_dependency 'typo_checker' s.executables = %w[typocop] s.files.each do |file| next unless file.start_with?('bin/') From 61c6146b6a11b947a73733a490ad25416406a8fa Mon Sep 17 00:00:00 2001 From: Datpmt Date: Thu, 20 Feb 2025 15:19:54 +0700 Subject: [PATCH 7/8] Update README.md --- README.md | 5 +++++ test/example.js | 3 --- test/example.py | 26 -------------------------- test/example.rb | 9 --------- typocop-approval.png | Bin 0 -> 34171 bytes 5 files changed, 5 insertions(+), 38 deletions(-) delete mode 100644 test/example.js delete mode 100644 test/example.py delete mode 100644 test/example.rb create mode 100644 typocop-approval.png diff --git a/README.md b/README.md index 7106dffe..65104a38 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,11 @@ This GitHub Action automatically checks for typos in the files changed in a pull ## Usage +> [!NOTE] +> If you want GitHub Actions to approve PRs, you must grant permission to it at: project settings -> Actions -> General -> Allow GitHub Actions to create and approve pull requests. + +![Typocop Logo](typocop-approval.png) + 1. **Using Typocop GitHub Action:** 1. Copy the `.github/workflows/typocop.yml` file into your project repository. diff --git a/test/example.js b/test/example.js deleted file mode 100644 index b8ee69be..00000000 --- a/test/example.js +++ /dev/null @@ -1,3 +0,0 @@ -var languege = 'en' // typo -console.log(languege) // typo -console.log('welcom') // typo diff --git a/test/example.py b/test/example.py deleted file mode 100644 index a994b620..00000000 --- a/test/example.py +++ /dev/null @@ -1,26 +0,0 @@ -def greet(name): - print(f"Hello, {name}! Welcome to Python programming.") - -def factorial(n): - if n == 0 or n == 1: - return 1 - else: - result = 1 - for i in range(2, n + 1): - result *= i - return result - -numbers = [5, 3, 8, 10] - -for number in numbers: - print(f"Factorial of {number} is: {factorial(number)}") - -user_name = input("Enter your name: ") - -greet(user_name) - -age = int(input("Enter your age: ")) -if age >= 18: - print("You are elligible for an adult privilege.") # typo -else: - print("You are underage, so no adult privileges for you.") diff --git a/test/example.rb b/test/example.rb deleted file mode 100644 index d192aa55..00000000 --- a/test/example.rb +++ /dev/null @@ -1,9 +0,0 @@ -def greeting(name) - puts "Hello, #{name}! Welocome to the Ruby typos test." - puts 'languege' # typo - puts 'knowlege' # typo - puts 'knowlege: languege' # typo - puts 'welcom' -end - -greeting('Alice') diff --git a/typocop-approval.png b/typocop-approval.png new file mode 100644 index 0000000000000000000000000000000000000000..106505cd9420f8ff942cb1659ff533a4a8c43f28 GIT binary patch literal 34171 zcmZTv1z21;*T&u5-AZwH*W&K(?(S~IX>o6X;_mJgZE<%7XK;sqc7NOMH&5j({UC41Or1Tvk@0pmK7H#Q+9Q- zw6V7U1CxpQk`Ak$I)*a>c>XOeCU?kqLnA{QoHiqVF)1Yj0Z$z+0#-*E_p!AoIy#u* zusk}{4&0nEnhpo2FV;g82iyW1k&EF162-)8)8``B%k5yz=&j8SFqM<(<_JbMULW4C zu8kASA^MeWVk8#_lTdmf9vm(S9J~zN4u@ZD6b>F9EPC>>XZ5*5hQqXFqQvd>`Qm+k zk7rGu3rrcVA3jIklc1kA`7(zQ%K|)jCGN1DSEt|RTq1*B3_+qbC@a;{$3F|x5)awZ zl%ih%tpp;Nwobc<3QUGWqST@xHA#SqJDd@Us2j|Lyr0R&=7=afk=#Cfkc_~FPgro9 z*(c@gE4ye)>d>bY;HjY{(#6;`R!P0)Oa91Z4Raa(;fX+lT?}4Rn#B?2c?wu^j~f{lZgmfyAx^7?~iz>F-#ayvc~`f|24qk?blO5 z#%t#1eRgWM25@rg`E`Ou7RWWf#Jb0_d+l)Z%4Qly)P8CM)HLWh*V*L zFX<Mz|-< zDYh&5%F(1Ek2>!0xZ?OAw&nRJzl6W2WKlRUO{N{l)O@K>zTYl|ghtWI_BZb%#{*r@O{e!DU(A*qrbBwfb3WmTd#BTKiJ_E>|#DhF3(7 z5RU;@xcgCbbg@iBVf`ic1*fI@MM!FO>f-dNS@Mh}B;W6pX|eXO?XilmT(Qfsrs$FA zim;HeGGl+lQpb*9U(g3?{#G`nbNRycfs=k+{i&d`UkH=@~l(>y(*cr))hz(?R5!3`GD_FLbr~$vd9X^q{xNC zO!099yIHYWj#*<_7Fhs}kw!XQCSCt3wyJC0X&VF%7{)J}q9@-JtSjuEZR48kn*16| z-H|*fJgz*l+(}L_JdWC9+AZ3N+cAB0eM5XJZU}Bj4l!?zo&;WVpA4Qzk&uv!khusN z@jesK6S5&+BM~Bz;wQ)J$FqGt{_IF-7JoGSVYnmSPr(>d4>M2p%NVlS(%e*u# zhQ)@&mYU`s>C)fghuKG3L@X%hD0akCJpQhYZWFEo=MO)}CO!-u)y^JL3`nj?KI0MCzL0dCun$Om~8mPP^r_SGqsbjlh)rpK=Y~b+0_3vpyhGH%$8+&!uKFNziZRB zM=>ZRs5R*O`z%;0n2LxV8POqbs~}J%DKLqwj2aJ$J*)**7=;yS4DOK=i;w_A7yF4} zg3Vq-TZ@O<-{)Z)c#nRLPK}OA8BZ~kOsvADB3E==EF|G4l`e%k$naT**iBHA^DF5p zK~!8^EI%4|+mhX7!q9-6eL5CXTgRNU&H3+&arN}?O#B`Cmb`Y4G2Zh2?l0R9%$3HP z#CB{Unaa5=eRswe<~>`jEbXv7~{3^`;9mKMQe%>;0OHpSd$u% zYL_DX4XTt#{xOdrcO@-SDNc!>F$wn@9N#SGtlR8!cuBw5wn(JeaKdN!yY#;W{?_tXc7iWEB% zQ`zo{S0uCxlz1O~ud_JZ*ziB29nYr^eCnolkyDB>7|W|# zstT?0YH4%iSEtv?(&B3rboO(@uc|CNT~FBOul~B4ws=Z)j&(s)23Kai{=LQSq?-9l z=TCl(a}9<09llpMhpjLX1MGPSgCqA!Vq1BYFugQ`8f5KKZ$ zqToCATYAUHYob?9LB6%XkD&S|tbKJA_PNd?pQ4CGwi$xe6|a>Gcj;`k)gMNaL4w{= z&+_v+5e?LUXaK@gfN;K7V7#P_u4hNthp z##3w73_X+v<&k=Dy58O_ul2sPz-}&go@5|p`dYT~l8pkFmJR|^YAH)|(%i&Xey zkf;S4b!~TT1$jO*CkG}Ib0<>^CT|DlzgWNoy!k*`2Mc!-GH(ZaM>jriL5jaA_(1u; zZZlJm{Y~O-CrF{KpiCz2XfZMmHZvcN1?$M>op<7V^JxBrM#_Ty31)ZJZp* z{*r5A>g3@rNI~(JqW}B+_j6i!+x)*KN4Ni}7N~;Ef0Zz^GO;lKpKK7Tz+ZRylx@5% z>~$n;96;s)=@4RL;Sl(n{y$3oU*kVGwf~=!hnMZ2oc}2KH>ZZ1g{!!e14yO2(Eqp0 z|1kfv@P8NunE$HzKP>UzX8!vw$j(9t0?hx{WaW(VuEUZ#Mi;1w+tMF7jk) z>`7`$z+KN1NBo?;JT32fI+)$=Hrfc&_=A$E3Zdl-{D&_;LcR&oE* zL6yV^MfXq-%}z-EAC;s{8qiARb=^xUE2E2<_#)?efHc1&+RZh#cPooQ8lJMXPE=u#});`M0 zNqb0$>1F=V-@M0E>z&@gd3|rJBaion|1Ht^0~(O-f$Z+;V2n|Zt2$MUc9#hb$7CBF z!=SL9NYFE<=pvMd;uPu+!zcAd$oD$P(Dw6eFY7h9E<;n^fuZ+fLNwam>S9!o=Pl!J zWMUD2kllBUON&nW_QESkA(oP8w}ubThs9j~Q8AQ@G`)b4mT7NyvOD=td+Uoqt@%D6 z;4sk9DiNgy_<5EfLie+n+^siZ5aQTw8Z16P8Gh52g-@KIgheH}(cl<3Nj*MDAAEwA zKqwo%9x>ga_Ez}}#VE9=Wb^eu?9V{CwJ;C`#pvhdh}^0IClEdK`@3AWRw|9cH`Ae5 z)iPyrH7$Ah&-QDrDhJc~%z7=3U(Qxr#zP=ssaRQA3z}K-YmK*ybm$*aVk6{KJ4{p5 z*(eISMe%4n>1agfi>MB31Th)`=EkcH9Df=N4Bi|Ayd@NMnJ2km$OsVyg{$biZiFOt zp-N9~EQOldsM|kuA1!2I7B-Q@5Y2nEwaspkDU;nQ0f~@H{_b>nw*@G^nZh3Vv^voH zlUif)V~l~EB^~*Pa8uPDSB#fyMR?r-D)ta!@UJv~_PJ3c2uEnrv;^VpuV}8`=HjJ_ zx#ov6g{p;O(D3lGnX3mSUYZYuNS%S+^JOaHd|u}a%$>kc`5Yb<6k@(TwFl~ZMmrKz zlR-mnY`;vCl_7~LL{$E7hvP^Em0^Dl2r@K?qd*|vpkABn{@$un&zEVTXL)+9>QjwV zpJS}fV2ht=$@iNx~SHOhDCOIeCS@aa74onV%fbz6Hey&S8CUV?#Kxfe+RgS8E+27D4T#E;NRn zsV62bKAUs$c8=m0og);WYpQg3O_NCUH3RbbbvY?3j#d&tfoX<@<3aPCn{2SHdGomK}Cnbbr(` z@c44N*2W$$J@Y+Q{@IqKE6Jv*tp?5^9O#04zOBC}M}8Cgg^t>#j&=`Nh_~EimYuU; z*MBs5=Y{K%8&N*O&*nukmfjQm!)v;l7%T7%!kqUXFUJsd2=EB^{tmC_vzAi$HUZDm zj5QxX?(aG?=~RE{>qo^r0UH4~G@!~|G;}&oE^mxC z4Dj)~1A{Hw1ivuV!IGfGERoz62+hSk{X&WVqvJu4qa|(G%@l+P+{}p6s84daJ^)RY z8*NfAuO_p(mCn1L9otT-JNC|6How|cw++L!fQGtkGKJ)4ty<6kzdEj{`AL~5Kp`H9 zlnfeiSyorukN%@GHpnDBdX8;F(V`s;6&tBP_ovdz^Sk{E7>Hil7Teh>7*}OdOB5{5 zo^G#tv<&OwrhKBfJ?Ao5uVw~N^Bbl%p)*yYdK@10&O2Oo&F8Z?Ra>1+g1E6-n&qeWb(Lx@d2@C%GZ$BY3S)EgZ~DvMEA}P{ zJ-XYIsLu}O<)_-_^>Q;KvqRVYZqg22_t_hC7bO3h5-7~!xpq)a#1q~$H`lmE z{wAGnJug>rm3l2x0%XLdjsua%SI-wc>HE3)@54_^06J=oVPJs5t5Hxo6Cmogy%#VzO1jZA(S1QjZFhjjupIXh6G12fInUFi# z(l^)QYg12AYTAs|=5P^7Ze;W9)4F@APT(`K7u>Lr7CE0HX^dy# z%Ht^|1v;tU%VqG4@u!up`*m7})h0yij<_GSMs5$z+}MeVA{o^Ed?wm3h^VOC%-53d z1HE$yTpbhLetJ>z`DKWfCsKOKs~NMfN=2o<4zEW6Ns5d0xjo2cv%0g_sWXkxnJ;rOYipNA{h`s({F#Wgzv)5p`St0fCjEd> zcl1}Ww8hiSk)?1JrwzrBTw0QaTzX#mYk!VlxL$i+I@*>&yJxzZulVjvQ3UvX6`*PH zM2Io@_GF=C8RzVDrCZ@=T1D@pzs+dQt7^UZ2b=klTn2-BZN=fCT!TKPCeo(tNzy-=Ccp<}Si@Bi#%g`CEA!c8=9;7zux-=Y9E>M2K^av<8(E3cRq3<)v)B+;9{c z5hvpUO}3bm|0Bsg_%>?Dd;j(HxEJ5_wbd=w;t##Ww2nF>;UkZ;CRLq=wm0BzqN*6Q z(Q~tdf;Ouo!ROznb!Z(xiHp@1C7~Grf8gCwsij`Hh<>4)!iX)umghM`YihI4wWW{E z63ecS6nX1SAKGik2>xrw(J&!0rkd=}AYeVYsGMfF%R<$r2yA^F08WS_{%(e8#Vft5 zLH+2r>nrjrRlaYWvwySw29;6JW#%Iis+1t|_?y)mXtCfhIhlP%PbMAk*fuykoFy2B zYq^obtJ)={@S(t8kw}I3bB^YncSCyVsR3w$l3}Io@-f>;GdY9!Z;j|<(_1j$GkDp&=mG-tmAWPa|;tAwN zK6Yf-K`kD2@-~?N+}oVwBO<){AlCBHp#AeUr`F>8+X?dz1DoHKZH>0;nyz-PRpMFt z)|qeB{S^-{>`GZz5jUO3-^Gygs@3=s-5-BbU(F7}Tlz&887|&`9WS4s=?1VY9%eXo zyMIjD+J94<4mt8YUm~O!|H||=fx7*$DN`sc#F6DTb7WoUL9dG;xgdvUbN zi|QSv`NTP*jf?D)$;MP%y|1F-=Dn1H`qxFcA?i5XF(qMnnf1-N$eXa16O4U-VqD-b zuS&NVwA;q%a+ln2(0!F5vtRBckR3j$Hz>Fl^-12=`--XO#g+XGzNd@Rc7a31RmMH~ z16Pkt<66M|#z#zAMGnIs+&2fpDfARs=d6=Ktg<7%X1ASlEmW1D5C>M>q za@R`oIOM1M)fv~kr3ouMvL;D`UdS)(c7`TSciWrn_Wc5|h=!Y6f8F0|8D+9k@Tp4{ zcS_m4vvdzG{eJ6eeBSfFm?;eFEH|^P4LuK@HE)#~(y^=9mHiBPS=JhXi2Et=e0{Qf z%Ag$%kCK)8?Jn?UJL;-j@q7Og*2vby54G>{ktzK-W+&i$FhS~+*yz+CulW<^W0S_n z!Qv4Q&OyS*;ZIAYtnEszKE6^;5<9Hk_Z6^glm}Wev;vMY)uDZ{vn&OJZr9D$fHP7L zfNzkn+3I?S*Z62MlWNRjL0-!Ot-RyNfm)MPuhVGR9ll9b_oFUP3tp8{4=XuIszkes!sZVP*{E zP)3C@hf5udKxnvKG9#)SA-X+KLqFu0`=!q8I|m*zZ^%p%p5)6u2cI0>mIHft!A*g2 zeV#*(81(kqA`6364oRqA3%47fHpF;9cRnwQeBL=Q!*quT(-$eU0uWLB#s7&eU+o^* zVyh^~FsO3tGJLyV)F)gjn0$&K?wGrgSeq6(F<6ci(&43`a1!TO!@VWQ`v#)k#kb)K z`{S6JxKR?o$X60(-Cr;31eQEMQCLvj(ECxN?R{JNyZH~*5_%+G6NPLerhB1>+Q-u; z(iO?)>PTUPFsHWlXmBL+bY?x?!N;eV31XXrDACi&Y<@i)ri_}r=X$oiW`5O* zpPB6Py3LMeP_)N9*g-#|+4-$d00#T?8k3LgXBR!@&kI$S!ALbLd4e62U<6+bO2gbI zYIM77BTV8QDmiV}=BU1hEQz;Li*b0JuaO5SJPw>LCh1+UjDYRKZn|dw0BlCQ!wr)B zEKWSP&-Inq#*diH6jUowdggD^CKueiI^w-uOdFFjHw`wpt+%!8suAk_sPWC3_3?3p zRNeT+B;&Tdxn&urzbp}D&}1v(q(*w$&coR77lYfY(^it6I*W!Dd6T;3WR9a_{hG%n zdd6NRh&_=kEIyQPmw^%i}?J^hf9Xx_QTPWwyZ`OZXELw)#} zYmLHg)&$&WRJygcn@k_sy5JWE*KSw{`QNTR44(Ly%51kLTe8d$Lxcj3HzScH=m!Ns z>xr!%Nib6gE@z_9~tk`4!?W z(~FR2_thtMP20+36_&LdlwW*+6J+Dk?P1|#v8jYh0?pXli|+fpOq_5V-OUQTAw1{S zJD1LclbOUfNSF-zq!!4Yv7VO~w~~8wGn3E4+o4^z+E05#zEtB`+?}U2cDj^v~>36KH@-RW=|M!VkaYQjuo;buUEijs9mWsi0=Ly zf-_N=orZC-6Fw`*vqBL{`}j7>>yW-78l;BpBsG{He`#T5syi#S0qODAYHL z;Beq@o8bT1D)MreM(-#dy!a?IUyw>OS5$hSKt#-HQ9ef34Xq_4{RaB3AG zxB#R}csd}Q-6XtKoI`v4rI&P79FB-ym{T3eZ;0lEW&@O3)L`DkyS?kvPn|d3{1pTo z^no3=xJf1>o_mJXD-SETyP*;P*ww+cld3d9%+=6;Nt)N-B?ddUfpk6bmFZ1Ovs&Bn zeB!?I+*gfg2cA4%8ikY%@Wy`@EQ-U5D3M+O%}wPQ3!*awUAOGKrxe-kY^36{GG=;v))rt-}e<+G)3pv221($ zWKvXaK#iNBekZ~W>SoYl?Th{3NXbvox-a`4hfy!nET(%ZLr6o2@G|)_bj8!|&?8EC zVGGhE&JDh(#$|S|qa9dpYSahDu;F)tOzC-gcfPS5?|&DOu8y}+1n84}+#9%G$Cfi_ z_Pn)qGc`L1ene>6Y}F{ z24;tBa=~3w`^N9;LS9T}b7eW?zCX4z1rX!ra06-j^Wp zHz|U%H&$Dm(hnxHvx&vcF^B1mtQ*rSwo3$uRh7zckECxo1dC#@T~gr_Im5(Z7PezQ zev1nfF5=d?^i%EhcA-4nvhHgg&o!vJ?JsULuamMooOG7J6j2VW6hk$8=Q@TTVDpb$ z3NffK{3s#y%Jtz9Caa3OIACz|yQ;66f4wg!`t9u&Bq|;`<}(@nI{*2-vP# zhFWkyk=fA5Egq5#de5Pr7qRrteNVox3i+CDIb`3DbO9I1bsvpy#SD(02N3l{1+zVg zKHnbI5p{EkSzY=ItdTnt@P)z_Q|>W0AemUqmMEmIAYh*rA$N*9Q?SB{-PHGoq8wfS zcJ)zQyIT94jDd~wA(5j?MKNDCsg{UW4R8ugb=P=pJ#G}nPYQ$EhP>|c_&ps8H^|q1 zI!};>i)eK!n}4x&7*YWZoYfdGv(1Ecp3rL-Nrgaq>}4+Px?=D&in8X>w;um|OOacx zql3<5b1`AIWo|Z)E*4A5w^V$rIx=n~UPfcT8;Sg*61Y1Dh$NgK#!fZ19@)b2Bi$4wH=dedJg!GE^{MB6{I@dc6Qx^ghXJOK=P4abD{QjZc z^R|5M0R1cz^c7vHj|2Q4OPL`Ug(NZGeL>s*_B(a;?U(Me3S59SCN7w#@r z^Pga$O&EC;d0>qt(go$@U8Ay zfp!|=vU~531v@U@o)ylKytB6E`!^Z28fFb5D*)p*87o(9v6vF>Tf;(*;RDx^A6S7n zCith`q(hwNXc+v17MM?R7jzO1W-ZKCQe7*R|wcsXtN7Iul^NZ;+}qc zMR;o(?`z|@`53T)j9IDe?GEm08Ao{3t>@!WAEjqjqqe*Ab?K`n?Vl;&srlfUF4l@TVxi^^J73y*f? zYW6f-->=_<9q!vr*0o|nsZTndc7G0SeS;vt7=4@-ZvYytI&6ybDNNk}bpC@(L7XWb zlr6AKq;)zQhxpD}*2w|z31@3Ptkgjdz6g4KEL|(9J3$qA zC`i+~jCc%Z?tCbEtUImfXH^bMpCS-j`;^9D(Ty_?6hYc>SY4ebMEs~z-dL&EG3>86 z9V8R<9z10i>M*N39`JmZ)#ooJRzK6{sxLfc2UoXUJ2R7WK>XfD0(&$2NLh;g?Q0Vt z=6bFF(;Q*Wm02`UVB#XIpm!I2%VW^sBVjCJNc5xmf^#R?>1nUf_Ki+RDBINAs)K)* z-Y?_vWxmtL^B<^m!hxrF#4|N)+wt?|i%D5cw%MZ1*w=KsEALf$TqZ6AOTAEw|bIenW@i^OAOgqO?g{Fqh@z4oN{F-SxsJfp39l;;3FdoR*wh| zM)OZh+gFPtVwx1FRCA|Bt5y)5XOTY;<4abX>DRj&4ES`H}^V5lj>pJ^dMkJ@E3RGe)=QB6zE?YE3_~-y)qzkgE@RpRI=F$n$@UTyQ^4`V*)z?ibz~D z>I*n&wmK)z%|jFAHRE9mw7E)_RDV?GS%z#dg3jX9O14ekB|a+(&>9dS=tm-VhPx-c zKeN8=C1t(dx7V4o>*CVZRDnIOteQvZE$JzZ6>ix_|{dvZtCUD-zqcwzAN*o;>;_3G|^EggdjQusc z{4XeaAjdWhgDd9NFKcXfUDV^oU%J&E?SWB?2!?zU+2UA>7}#Gd%hkkiUF;&7e=5tZ9m9u1LXc)_1zkXfKsVOaM7;cXI=#|<8=A7yrYe--a`ZeGa z`tG*tQ^p;XX`u$Wq5ni^P$aviCVr=W_qeVryiIGx8R#Vq>zH7hvlt4u%guY*(q$6d z3~MeMp_PJ`0l$Fso;y3KLo{4n1R+3wEqZTT$xzm|12)&U^|i}A9(4TMdp!7!t zMju6MCd9u$W_RTgfkq&>ToQ z_?N_7K^yvQ+r!yV^P1igD>jzR`2VZd( z(QID~$^A+y{%6TU3#`mK5lO_Y)*|w|@rj_ZECPWxUbx|ny9qFE$vcYeu;SOvK6|i` zp2=d9qXn=;SLbse@=r|o%=!c@jKiRV-~^ufmI#jzs5*l0s<2Qi!6pI;)^v6m_b|*@ z_01g(6NhHZ*lD|*{#ax3#%R7ur8lrXBtlx~+&66iBw7gs3Y+{2ll&;5=SqR^+bLzR zL91K)5~^5AE0nT9R#wNY1k+efi``v54r{HKIfn#`%@|FNpN-mW;OI+)OtMBgvf8ll zm8*Pq5tL}2V$8!?_PG1z%06cpg`yhgmd|lTi}IQ(v!ab5h2hq?><&9tT+P9@M9kK) zfRH3qp3WCAiqamA+@gdbx=Mm$7qc-9(S5^X*TP+X*TwBVRm;1kVW-ZjVlQL|_|<-X zw6Oaw5V{SkMXJB)O(WJ z6K4d+N%Qm~hPyt541U|^=A`ORU4HF<-aRg_QE#hvxi4nKgYgWTUp=&y_UO%F4g%-> zw!x0^keEw*Q@{5gaTi2~K_fXtnR8wpY&8q!Y<(rplp#B;Wn+_K@#&=woXZE>Xos;p3wE2$w1o`3_| zwAHk^l@hQu5t3$72<9GW*>!gnR}$P2xXK7xs^tC71I2sjHIlOEM-_L!_4^xs-ytSp zF&`&#ce7})&yKuGAbqX^ZRl=F4{WmEidYZyA|!hEKI`yzcufUTHdsn_owpn0GUPZD zO?rMSz+*zb)T zT({O0bK0#j{%$e4Y6@|Kx6d&tEh%`5x<(_f87=4CTUebm^>*9N9Bj%*cWcQ%|5}LL zL6m6LdcE2&x7hB$-*pZ%u9hfhkMYf$pBpfh_k%o_QB|-R z*t{%lo`InDzdMx&W(q~_*ABkKH!|HQK)qyqhTPY`*Dr{1U{`2c`?k(7X`eFv;yp%r zVsHiYqMKc%lub@g8RA$&t~>13Wwb-nXScrFmXJr_UF;4E42LL&@wgy2O`Hme0k`T* zMx)Sbf|xJ8mI$C6eX!M?-N}l^6HZQj0neob)KR$FEtnp!=FBWW#-QI+qF&nP|`rI)^(l1w~DgorhNV)IhDYq z+FV%%S^hn4Y9k^FPGmvaszm;Ue2DbP?PI01Ijj==!MW0_(qq8I(gw3ORgFW zYiJw}KC>YHIaioj0j+GKAqOzc=clXr>OfntXq1~!jsf6^IIL6#nbPgG&iQMU6&!9+ z7va8s)HKk!_j>Ed5%=fTF!)Zp3pcG`Bp3Y&Dq`~p^wC)Pe7PM-=lPkAe;MMokz%sh z$v|8DjGhvb3({F)@;Xh6Z#r=6R%2YiPve(iE6q)?^q38rg2xGGQlXNdV}Bo7_rc0t z?R!^A*utj#uq>Qw4q|nH^TN@~=U35VzeUen3xR;)W;mU@Ig)-<%-egI9_Tl`seorf zkYAg2IS)(a)8_;DfeL)tevIkv1X?4$4)`4ZBt7xRpTZ}?^a7-{IFRqSP;NzC?y4rD zccud&dVuyTXkVPWP)yEA3=;zf_>l^C5)0qh`8FpuuioY|H`wrMjTJv0Ot!J>yR};8 zLaZ(NfTJ?rP38hUnzxVIk@i}*I>G(CMuwJggj4^9=j8-JIE#^?7jR0bdCXCT;SE@| zJnnA~fWa_Lk`SCn3J0=ug2HZ$J-+Yg5TQ}tIokSqLWFhsalW7h&Ez-~CjA)Nx{(FO3<5sW)~zFeL1D0!H6hzyY&hmKy3 z=wsGAG$5ak@?89EU4?-dPhArCVK4g~(!)Ivyteu3tcAMbY+2^21v7qkxM)McV^Kd;Lp9%Mhnusa>0hAnQ{8O|)QRoI_WW z6{+j_inP+^E4o4T>eF!;b05ZNcX80s5#^J;U|;p?{VnnKP#68}FZoO*0wwDZ2K}C;(85)oGFNDcWx8w*A_}a0zH=^nCcYMa}m*FXx4;L0&8f z_ByH$VZiwf)37}&ixbQ66Tg;_o8Dzjb5ag^vbaGU1(D;$d1Kh87j%gov}gf4yx{&W z1gD>AAJl$x28$8{$-2w(KFYHV87P;U)V{=$FQ)`T6Z_uwf;{F8@G(XR4zz7!)1vlq{8JwN-cpV);MWosJJ;e+jjb_fvP&THM zz*8@8DOuy3E1^|JRjQ75F(2aRd-~azi^Xevy`kSe09adX*mN99@NKpGQqT+vm=PvP zkX7NMJE_nVpCv_r>O7*avhqmTyX*S4)L`*tS0ElZvN=m^nOvU6u+dG%GEgaj-Y*I zN~T;c-?;bNxyRrMiPdR4_h=nA+@-$(x5C7Xzu7_7iE}OCA9%7Y45}^A8LI>#4TqTf zw#|L55eL&P^CU?aM=h!i4B5A9X-x_95m6mD5vp}(g-878rlg3ksKlnYj0pnr%U3RUKHdk*~;EJby@LmS3#9C_7Gt~};HnGA$LGl53H z=5jmPF;%h-{fd`6>oy^fAt(r7tcIr273ET-vW^+Ww&~|FLphy(%QgE0YmCbY4mzs2 zLv!Oo(_K~vO?w6FE+fP=3Lo-ze|?k1q*bNl(jS zUf;23O=@uPjhoL~!8MU7)TgL(_fRb`Z!J<1${TS|VJ-87;pAsavQ|9(^qm$4k7n&8 zdnvlwPv4=IBb;vOAjI$XMNE!<6#D!0)p4VCYLP}?=?|#2Bm4vQZ=04zSzRCle7Fk* zNmGr`8UaO3sSs`zDEO5|9drD$lG7_uwHFL;`coJ!8vd*R{z29DcBIp>IQlwu!RXH< zMX!KQu?cD4T%UkL80aZ!!lg12KlO)sa*e#`49(MhZ*IWPk8&#j)e201L5TjDLO!Db zR|le`$od0cE~VSf+fTkV38g~xBjbU1CGXyrEf zDfgy-1G=Y7e<%P@^;`YiDCo7xrxSuCFX3}`2*I&ovwbE!<`9v{B7huP*GTg#vr%2_ zmgIjJ0P%~62nftUOE$sfw87BjcmGw-sY~O$<3i|zdRbEDNEF+f0M&Y=YY~&b6k9qv zrPL@0wd+8V6~E8%XFWk?4Y|Ptl0BqIW^n(4z919`0AT`CK@zj18PzMbRkkk0U2#7i zc6uOtkdY&j?1I&h4H{MoO|0m3lrgtCB8WNJxBYXF{SDV&L+E~Zm`!14&{xd;d@W1I z#H6_4cOi(+?^(%Vzoh(hf58j_$^$>Fu)sR6w|jv4o>5jfb4Cq7?r?dk!0C|kPZ;Q5 zD7{{G@Rmf2Ubj2NJRX|oyVIM_@8bj~zd%Q~2b;^hftq{EUg@^$fsCq^-@>I2lEYw8 z+YR!G5zk(_Kv4;n(r)(uf;0z1LC|b*H6Y{_Yjv7`fJaOOc8I}ob&}oq#|Wz1jxV3R zIKTynZO%yl2X;9r*b0QZHWCvHJzWhFDf+06B6H*8NaMC3a$2Z#Ncbf4@74mx0Lu5C z5eZ?9xZN6SR4k^f^LvdZ53phc9e>-rKAjlO1d@U_`K_4gjlg%8!0gZpSc`8hT=B{U-L(^O7jI|p612~{Q(BW)w8UbADd6?67c!#`oZe>HJj zdazbs)VkOqRZ4NrG}H%NX2ZLjf4mz1ZnY^=@D{g+DI>2XwtwqR60t-Fg-S4_R7U-q z3l#Z`<&V1rZsPR^{uv~ZtO4#JXCPe%`E~Ia9uf7u<_zQhU+i1LQo$tM?nE=7`R(`` zeqa(Y-{wCC4>?9b6mxGeM2J?U#E0d2o8o0Q(9y+px7Feln4PK1zdQ7(F2oHGx_9vd zsH+H2(<%3H3KK%}ob-mh?jTI8cugCir;T=Z7 z)^(T{L0ze#AUwjS>!Q+W)My5=KVFJdNoSzg5Pvcy%DcI2*cuW;*$)?Y{DJ{OBCeeO z64#6g_cOOAnm$8rH5Th5(<1^_8W0HQu>qZ#o(hN2XgrlyW`>%av#~KS&_77y>ax%` z{co!zp+h+HZF^jq=MW|E(t!rVoz6Nn<3qoC&X+1>SyQE)q>M0FD)Q~mP_R+oLcV5X zI8W6##4;=Vnq!WMDT{(vRto__{_C+y(1I60AR`F`EC#AJ3QCKU;agXP*(re~YU1DU zbza7sLK?$4VN${~6Acgb!6yE5?f;~kfhR+SZ;YqyFoz~3 zDMiC_KRWL&#S9$>?Xdr|_cD<{%y4-B4hGR-D=F7{vE&82@cwBmFnE1BsLmL{o68hz zf83woro#Ue@K>I!0uB_Zgsrn6_h;2aAOM-c&j9osfMT5w#wb06%Hx&n`C1#b0EHN- zcIJRxXG5tF)zQmzcsLXM~DoH(F2Du`iv~`)Kcx+Oq&vlkB>glG^HZGpjAJHVEFn@(e zfn_S>7(sx}^-`nt+syB$axn-Av$v;2sPYmLxoe806J(gGI-;A=Nl2Ld?oY>@Un~DK z8(SP00BC_Di+ampJ16s%QSYySlbk3F3J@4PnYsHx9W+51CR+Gcjeh3yZ$dwOa_WBk z^!9pB3YxT(3$iVBeWJURZ-*V$J9*Ux^EwhlC5i$Y!|pnl_Zjs*W!77CVaqmDi-bV@ zZZ_bznQeB++JE_T2)=>hxvryBVSaKruFZG{>o!_D+Wye2%IbVPIAL=(exK8=Q2#-} zsN0xyzTQ#7gn088INdsX>Iwv}V}Fi#t<~)CWW>DE{{G3LgHCS~eHeavV~UvncetbJ zxuH1r&ZB#PC4Oh1HSAfTff7ugR+FuUQpGHTw6IgxtEbJ{w-_ur^ps!wKV@evCx55y z;!Z=2j(ppt zggri?lu~YgYB^uO^{!5fC*#lYGu!i2Vdso-)uC98z>Y1%;fOR}%gIDPE5^lcVKR%z5?ltK4^)@(Ks%O>}s4-^Z zYAGvIuh+C{J&KqiBEcQJ0Yxf)Q0<*zHJ!3PU-d&xy@HIMZKa0Gao>FTjH;JHNHmg= zn<^YX^XfJ$;&X0C0vz&ws!U9+@kBJFQiGu$S)O=*zLNT+1KjZTOEk>)kdWxs;}&r& zMoohb{fwnV9WSFc#iUXvk)4Y6hjY3m(5w4Xp*lY``qru_APukm1 z=|n~?!;5VO3@oeyGUq(>)*}5*Dz3ZR4RrMr6(hjSio5tyy*b^+fHxB%w>Bw)F|fw4 zwC#T1oY`<$6A!LjYN$_H}_m0q43uyB!?-uIGDCrgwJ8uc+)i8>LqTY(*(V`p6+-RGFJ zNuxQDyl4IowYokJSH{fPito2NA(=Cht=C7$*6)Ryi@l$Z=wr57?!Q@*_{*npkj8pH zYkjGd>Ja>#r7O7iGdJj!vZ&FNrAFiMt?kBWbAS|)>){8r8kcI#0R$;C6km6YkBjvz=5Qmymw9(RLVa|3S#b z>z%FL&$$%atAcy>y~ti?QZM~498$>{bT*T~JMy05+BxW%_euCXYGEoy~*r$NMRJA(Q=OHGu~%lnVMoF z82-%1B5j3UUGzt9BpjB)o6r#^TH>HD26)IOZ~X%fRRQ!$6pP$8`^xP zsT$}tpjK^#Rqzl5Nf==gCPX;%?@HyfOhLb7zdEtLwoYFmQ0?$&F4lW$b7j`QcW5`Q z>Iycn@tM?!CmT*X5~y-+-lrvJ`wX`zoNAtA84!w@-lxD%&hyrj!)Eo{-pdGb7%U+P zTOb@Nu3k-4Pi~VC*w1ZJ+?+#u0re6)2W8;ln)~D<{c{>~UmB{4!=Xt8UBjz7j}t!6 zJcX@cF(t-_9b%eN_AeG-jz}A1p(;l8rcYnWR7snN)EiCpTXs;HT8TaWjdT18$b1A4 zbce^r(b86;b3=^oTNhA&*xj6d zIJsC@T;qz{KpCjPvQ^W|^*{*~4@(H9!D6xBWngvDSFj4!>?Iu1mq-mQOsUEgS#HOD zla&wOg62o>d>2MC`8z#smN{IH>gV&-YO(eSEe!l=;HJ^CT;ge!rw)y4jS}%A*Be0* ztdB>_V6Ntkh*pIg{T~02sTRjp`_NCQhky)+Qt^RD1Oz90A z6P^&?8iTJfQU+5nQZQyP4$k(0tYY-`IHbtp#t=>YRMoSTs9KH1csMwcpUt<$EgY{# zTv)g~(GpS}y3N89>V9*~3S6uA`{ck{#|ts7Thr0xhAY74^Vvilyg*D|1ioNFo}6`j zWPDL#zPnxW#p173eKRbtD+$MO{o{Ol^K`sfSL!hEYWCmO9n6=Zjv^X)TsQI%xxbho`tiOkLic%KbEqG%YeC$D^$0!-A~t~3oao)m5^L|G z{tXV8t%B$5Pv1+C`m}S7BC@qQ5Rk-^ToqR!WgcIOE{E)ouyqvhHWzMUPel`yE)39T^+C|Me%yL?iU-6jzAK+ zI-OEXF&b<)3Y5O|26?}m*K#h8lQ_#*G=prJR(w6+SMnr0-pVCP2}7~ZXrq{A<)rZl zL84k{CAs36bTy=3&eC|T;nr@!)}6^@cghGFOsa(G)bMAJeM!(#T0Q|GU5v zRY%rK^aIN#%DG6&5a%&%y{b2g(ST-~UF@0F5bgF3gm zUwr8l^qV0b)uiqCYVw@t7W>u7EBCI9w9v;ukQMWk|F^@75Y=Voh|}e|if3CdYt5(6 z16SDhD=mg^8*TsgYOp? z06tbo4Yeat68Gy@l6(eib<_1>wJ2r1LvVhDM(J*PCCaU%9*xi4t$q|F{7)R+2rtvJ zz&FHIrDN`@s^?E%PcyasntUiJ(lEbPR}T?!_!n|9uw9Gns~D#$7Rtp!K$v+Km|Td% zP%~08Tsy&M*_QPZz5r9U7}MnriYdLGx79iIF7Q@cRamyWI}}R;T=q~ zI?wFXT)9~|1^8K$1-Y_069&n(5ht44(bi++?lV~8Q$XFoKTA< zoM|wfUZS_k*T!-VSgi~YrDiH;_lizI6&<+Ew zb!8fSyzHLmac9Rhag6C12!blsZchQ^-~i=PF28rBYszIV!fDhP6a#9U*5=BGULO1^ zG7cj4$|8-eR}jS=rl0Z0Ijz!NnHf!K8QLWa^NeN zG>WQ{ivafCq8lf2gYZ9Em8O#FwITwCE*}hdjh7skN9A%{N+u+Sk4kNe&vDp@$_QHYaZ zKsX4+wUkY9?ki~Z5ym@hUINSiscZUvT*LZqHjqi%OSwnrcZ_I*{sy5V80;nJ&@P{e zKbDJw*2(St1RX2$W3f6ecz9;A2|2~(tw|d;gKI+vQB956C!kMQn z`z6Qyy|9%yL~BsJPMuF&LmvGeg27P1$Ogy$i;uQ*KFtvl7=Erks(en&5(NXxe$7}mqL!qn|BQd*jVj>EIx*z07B#a%zne;rQ zdGA$Fp>gbQNF2`IL8ZdLT^y`l2`za;QgJO2a$2vPaCwvw&_xSIe-&il!#|rWXZ#>) z&?wMW9gP*Hk}@cCs4w<@G$fjR5$&Mg=|%N`{x#Q4s2PhDM14RYhQN*Rql10L1Y>UX z13X%z%O*UL?Kk_1`TBV(<7Xwg%m|#dhKe%P;5&Z~HV(PRkFk*azvwhrPkZBQuBro% zvzo12x!*zmvof?`^98moKgL7lvF)(etm&lcT$7|Z@t{?2EUVGzJLK=*6H~45ba~Jq zyb56gVFC*u&F6ab9nti0BmnP)B4M?@kf;Ul6Jb$s`MmFfWH#$z^MJ;wB5WJAL`0e- zYkd7_j*)y(S8%LJ!;|EL>z*~Haj}BgAjAhI4UymN`RCC+OFtFIxSqDK!*QTUoJ3BF zIl~cUGz>I+iCVJ!OoXZp!dcbiN01;;QR&t@aP$m%7Zi1&M6|+jIX3OpJQsAr@s#2J zc6($k$&I_>cz?9au<6SrytjW{E1Tz;T_bYhZ>Eo~KB26VZClkEn-0J+bKW!q)-#sS z3?&tnDO|S{Bxzj#6uH{(<_2_gSTA&h69!LvU6tNRHpB@+0^I529J=G30**+lctUvN z&M>D!nbAm}j^T$}@s?C;jmi(!?K?Jb9Yjg!XEnAYaqcigAukor9@CxU+646o&a5Ik zxufC6@mSS5uhK2;pqM@S8@%=Ry*~8RK`!?XYV? z1Q&5Z%jtw9vG3QcAs$)E5-KCke9>CQX83xb9w(5F4?@Kyks{+7c>+Fu|YE}Zw6 zMwp8?XASZ1tN%(y{B)`X9EfcH9qasOjFFHr^Zfs}{J*C$NMa}qEUYAm&P+0r&Cx;J z7kVjqH8=+&ty4Y4QVM=6u2HyDayiO_EZdcW<{ib@Jy4L7B9Y=*jRqf`Qbjagu6E^) zQWc!QBEEE#esGuk56(+s{|nwi5uf`Pf{0DvGrT1=WbT=>wZ(^-uNp1%;)a>5tU-m449$E4{jpg-M~}m!XiSZN4{E zCMEDF!_}g=PJ10SO{p$*r_ilXu2~hw6s57kS1;&9%>9mXUIsmcH>zN~c))3>+n=Kt zH$}yaQe-%0R(iV3*((HTf)qLDLel26S(`6-MDO#OLS>j6#_x5HO9tWGBJ}_!{Za*^ z40LoeS)Oq1Ifg=8g#Ui2{qz(D7T&(Iv7hr;^rWx`<>svw(P*%ZosZs6l{lLJVsT(8<=S)K2tV)gLv<^IfDBR@gj`A;x98F{pR&FU z*lF6@qPv{sC+0zXCM#}20s?w+{>PaOw?=%}s`s^!5)CkhKqF&P&T6Cz$y}ZKhhinI zomE)z5RtdhOOCYC;Zl7Mm1N?1n;dmgzIx8XHIAHH3v0T2%gs%|sphQ9l2~ywOvMuo zpL4EArl6T%`gb>R79_A&7auqoz!80enpbEoyrTf~PmGy73yoo#_OgP_jpC*> z8T?YdzT?N4`@A#??}bVdhA26qfhYEOo6!GRS4}@&r9HlO5AhouJO(*|k7|sTxssnJ z_|IqObw&ypG&XPepU@D|`f06pm^}n5V)9EV&^ZPwn8#vnIYt%txyhNjPMp zL)%&qm3#szJBS`qP81g$JlgzHr`gWX6;er%r`ug;@5|$~PNq@qwE>Az%;z~PQTZND z+YTjn7_~Nw3p3@W*&@KR^O~_n$&U&JGPrvVTk&=PLgxk1*c?0QYG2oUnV%kbUTUgV``Ys7iN)mr0fzvo>`=$8h=YCU z^kK?;y<%U58k@Mc!-*Q_+aV4b)_R9lk_z34adE;WvnC{#>M99@(RXd8@44fj7%Z-KVlHy6fn)H1d;~j}L4Cri>K->|Go|-@uFKJ8w6jlcl zj??8-*GSo2aJJTTn#xsk0<+L^v2F2=6~Nc~9nj`#k9*zo+N-`<)LQRjk&68F3Ft({ z6-$c$h4TQ_XVDl%G){AGQ(f|69Z^`7rydME0*Y?D2HX_x%D4&zXpg zHS@U)n9z0sp=j#zd1)6A*dzO8VtzcG+wc~ic#vg+ha5tU5F-|jmv1%y6iOFHZPS{d zR?t)BcC}x8(9_ei36J?X6++a;aG%0s7`i!;$?wQJJf6fV-Eg$Unwae0w3EF2C`_2i0>t$*wwIp*6O{ z133&kIUO(8Zk?N{b{WFJ<*><8i+Fy@V3S?VPU80NP>X!xM9!e{U+wlv;`n*EGt29i zbg$898mnICus3DYdE9)X{YE{wgXGd-IS{#ECE)pq?r5n|o&oh_Ba;8wf~R7Y&3v4o zSh3M+-_3tj4|i@YzzcFpX#;rw)78^QE^STvMC#lCgP)BMC9Wkt{eJSJ!~zt<|r6XT8l(6>{j$(c;9chCitm)|b;_0S!akCmpHksC*uGvns_qnBzOP8w0QRPY29qioOo#SRK9| z&m0`A&3LCXFt-TTpiyO$-Mqc(hiCI|xl4E3(?(cHKs#tNwx$km ztjRvF?VP?iK3&b39z}xYd0gh})|2wFg5I&RMb1pqGgs+gN`tn3k7kY1%*-Px6GV?BSU1= zJY?j4?89T5tCa>jnCS>fC2*0yY*mROAZiO>Og*Ff$Fux~5Ai~+vTj=u?62&0#u;iI z(cHyO%(#!}(m`LE^+eUGbOra<4=OvgpFU-?QHqX+whx)<(ieb|aS?%B_dv)peB+E%-TL21{ih*8P=$N`Vy=GBmD~&;W%E)0l&mj&V3Z&s{IiBbmk8O?DJ5iS4PruBvo;c_wo?mW1K* zE*%1H)H^X9L1w)9N|)`~e%DNnP};=`ly{f46AFNlP*f+z1W$2%Cms0a#rZSZ7!N{W zl@9OctHkD4w(+5M=4dSoC!Nnv8e$&jA+Fth`wGdgFg7h8W8TqoMgyXTRC&aN)z=VyOx(0G0oKF!)57PGxv!xX$HleX35a_9OcT zi`0sfB<#>s;$KHakRwsVYxu_jSrqe*h;oLYC)wG9{NQ77I6II;Jc1xvAfmPMaj?=8 z_RS$6(ybN(obO#bwq?xW6EtmaA0VSub=$gJlsC$_)D`N-+T7QP8D${5)`5d=;Q7@^ zGM{S{BCL~{La6nXHv{$+f`u{NB&ij&TX^=GI#wm6CsnE_(iW(LzQ{(e@s~vn@M+|Y zOyNP(jHi9S4zajg$k26hqBK~8HehERP8_|v350S zL`=>cJXSfYPEskO4s8uFAP$3b<2%N3+P6{A%`DV$z@LO(|Jl%dp6OrQRHQv09vdA; zu*#gRFepxh@WWMKuRh+S=7640{m!1guA){V!VtiD%ky8wsdZ}Y8~_Uq(fJnZHP~5j z+KP4fS#CvNxSW)ku;A}{_GOg6G+ga& zyXgRjHHjueU}H&P%({vmoC7QdbpwB^(l6zkbXSNBU*rjqaxk(p=Bhed9f*LCbNeH* zJ89mSm-jd9piUJ?t~mVisZ=-tr^0(Co3PORAVrMHg{!2}>jFeA7dNM(psn<`sPpo) z%p?@G!z6BNuy#wjSN=ULVV;%+1B2=V5rnWiT^;T2Te*?^*KSDF;dDB|dZ*$!Bm}9c z*3Eq`!8Q@uhxKk3FM4nWhD|xJD}LHTH+<&xIPK`E1%F?OvZ=qlbulf5M$ag;R{qrc zon2Lw&g!GX;miAeZ@QTVsSy7AOYj*Wr=8q4|l zYSF$V`0GMM&0yZNoe_m4)XgSvD>310Z>OMZw+)J0>$XkCnDWFqWN}#yGtD%2_9~O~ zrt*Gnbab}BK%+91$^?TVJjJ($P>ly0mf^Ry4;rO^(jrrQ^ftxxa^s(XWM8}L$eaJH z8o6yZHvp{TGJA|F;9l)Gh48|nC(ZRZ0O;&6qY;(Ii-LLIaqm1Z92hwzwyk|t=vb0^ zH5+shfE64U{HAbgUz1<5kXCxDqM6PBASesSaZ@Dp(LQnz${~>B$RASoHEslA}sgn0`cIc6N}-|Ph4c@t9Z}4Wl*aE{`Yl`-L5eTrwUDh@V03=wh$<#>@{Ehnor#2Wb@OIbVXite5MnRMoqS34*JODI$^WA zDSS%we5ETPh5(BBgrXc2qK;{I!@bMo^Ql3@^P6?QnB8uB7v{Y%nP@+SLQP7VG&;%i z`E)uul*AZA7O;fN0#fmurZrOhAdSi#4@J#I@L&uF?i5L+zbMR5iC>}NStv(Hq{WmZtbWP^%3i z1SzslzHNsggYnZunp(!)M(Hj!LMB2t$DvTK)uu#{NUbu6M7fV7;-yVh;&7aq6qR4o zY(Uuo3#0OTMC|m3D#rP7{D8vovrDSgxjjC_?{H_)2qN?c)Szi2ysF!_tTG#E>gXlE zNpZ`1&mlHQv;Qs1b}2*^S=k7u<$Yl{_!{C_aACVXq~-1S6?z5;_`=Volg3>kUvc%kf$t9I;*&%_ZD?!NH<@p4 zaFv-Lge36Ki6oJ1S1j6Sw1&4jk7Cva>hF$ePQ0OeiYQqPTBNUUKmp>M4ve1td~{CX z?d-XN6OMB0`??ZQZm;40zIVfQ-9M1MmKt~oD<@cCup&D-9Co8PE6?y> zpmwtR-8%C2S8Pq}R)a0Cv5HmBl|O8 z@MefOQ!_S^@EXc&jrY$`&$55_Chv2iWR2nHszc3LMa0B1$^g1uPI(((HtZ zxTPo~)&6O;=R)}=o2E3{96_VYdm2T`bSWB61mTIx;xXP#-YLy$ZnERlV+T8N6I6$J z3--JV5C6dFFCZCSub~oJbHLX}EEmqS`yRYIT3-0RM!g$AOY=n8*(#P%ztk*0FA5Kz zuag>z#O_sMy-e7$M$5 z6xLXP_s8J}AJ%Rs39fbtyQ{vLzpe59_yc_%;3~U#YB(y$lTXB_Gk|3&KoJh%N7}dx zWJms*_})9x-R-7#{>)bem;E~$%IjWac zi>>!b!VNUOd_O8>hs#4_}a1In15SNu!`)iKRXF$o{IU%-4=6m zuw~DKvo=uZFc%fALc(8fZ2m*tmL})}F$NgW?(S?)v|d{uPpkJ~!Rzb7d-Afw^HDc% zk@isz_%CK~(gxN3DkHP8hs6w|j(wbAB4QjMTUioLR31IF9*ApP&Mp>7xlN=;L|p^q z<90CV8sOyxuN}CM+G1>zkqsel$FAdWj4fAp+w(T=J`9r)^_U-BZ_VV+Rh7A2>M5Nb z@sJd%~Izp%Ddp(*!SzDQiOjj9Q z#oR|(G*ADDA`~HLAcA-Ji z!u_bBx4n2vCV=i@ytqj$lrF{P)9}?dlRgd8W$${KcUJL1l}ZyBFt0N9;QgGx7R`nD z<5zY2!41LFdX-T_`Kj$_@+wL^_Y$;`rqsa{Z&I7+;fxykiEoI>-ZBflN$y&uIjDRo zi-XZE^V8KF$74Of?Zfl9k^aX3kB6WiY&cS_{r zAb`fd4jY%pFWHJ#AcnKv(q%$TV-H|HCFaqT-}PWFd#sD67KgrKH0nf&I#jlK3Z67S;q%C7p9CgdW)I}mS z`w%#1g4Y7uD>tr^Rvfy|sv@hqG{u1qRfj-A{88#3tWna!>bz>fh`0NcWO@GM+0sB; zp>m8B>DpBIgV>_1Q%lic%DQvJId*QS%&^*S(;>JfB8q_e@+o_~uQ#n-*r8jC>9L7^*+U>=AbrX;fUNaBs*PtFfiN7-e@i(8T3*3yjqCh) z)B!uFxY}B%77FUC)!29yIAQsz@k~MC(x=a3CE=`S+%i4hgrRY-$PPFULD- z!A+pUWVd!?Yf*%MQ(bKz=?H^9cuxd2wpi^PEVLvzd)@3b89VT| z5iW&_7#+O%IOi znkuj=z%?+C$bR36YU`FfpQ|H3pF8=mA8*f8ho}{ z38#kNj=V(k$&g3=fhqTn9nv8S+4ZMH`%`cpUk)^>wF?m_7msXrXm#kE;@Tp8+)e9X zX!nDCITKx{J9pr?6S_J$&+R>Fm(G+inOn^zkmFP-(f-bfcRp&_;jus57k-@l;2n=@ zMWm07)y8pctRbFcNPBONqUSq+Q(ZsT_g10OQodOpNX(48N9jfmMXO66I5(-cSwOm!v z)#B9m?S&WywJ3N1YsNMfOH~2B!M+rm!`5OTqSDbqy5`vV^IK8d9alnH4AY^SchVmp zd0z!(FLGhz@Q1}viS&9y*od&px!*F zZVAL}nOTadY)r(yF~px;821A?ORpAKm0GhKcju2ismj$}F5_LSZ`Zbk0JKngG*VLA z3Av`7!J{>MoLW}3K;ovYaZ0OgjgktHyVKO^8%tXW zw$~^|R6Y2ia=WNj&0C*%ipjBaxIpoz3G&)|$zhj`CR-(pM_%p1-p{qXZWqs7AJOnL zStVrZSvdF#j$LM8Jy_u5itUeD-6_^q?(Fre>(eshn*h2-HXr$#XIPad*r5?fzCl4F z7$A;f0jly?roZDshWfAZ{_D?bAbOIe>z0Vag}JzZy3KpkC-`^N3kN|I+Y(yBT~-vO4lH8}9GM z*Ds(u+FZhbFn@MS5=A4>m1ru2{C6WZG>nJq8BX)7Kf4tmQG|##?f>@>Ntj>|ZqL_0 z*uD8fT9R)91rX5+Ua|h&sEvSjy49z@N%e=c0#H6O5Yc4bnEl<@h6WkM_kls#-%9xP zDH$SKGS$rAjjp7SQD8?#r~X#LuTRXdh|Hx$YVUk(nk1rQ6av17Vj{s}B4}>QQS`H7 z;ZK`5i1Z5k;Sq*2DkW-jhorDdl>y5{dec+hnSWtcqPnXIJBodC-gm!s!e1zG0FRgk zDis*`2}{TxPWtPu|3`+d9z?WLhO)wWb=y1<%=lTxNxG@Q;Me=WLT_DxkTcs8m#i!S z*ki@bh(why&0S0-D;bR8NT`OaDI(Ki;pKn|1KV)uBY0((W5+vqjZJ*~D9x?}W!o3} z%uO2!Jx^=mYR#Ca z3E*5o(#eGWaI<%>%5_%LkKb9c5NQ0?gfnYWgTJZangjpO8CB6LkZ|x&0lu|LLV57{ zhL@UxiHNzUpi%mI1+Eh3Fdq~J>+fU*&Swh%Vtg|1T}m;R43xt3Ty>@VKCFB>2hz&a zwGQl7)iw202d&@$Rp0%i&tIC2;)cBD*O&DB_$ePVB#KH)?d5#5-5TG#d9%NNsMO=B zp<&OE3wkKlXmAzG&gHJvY2cifE6mt2dMdNV_X`j3{r!5Npqt6NV#Z-zuo}Xqv8=9d zt_3BxZQj{!TyH)X^@Tmb={V=_Ka)3#;JmW!& zldmA~wnz#Xk+nzZSoRTJo{LW3^6K*7%-vdXBhhL)yVv+KR)43CU7-NF@!=f(ren3Su|iQ_KRlwtTZEs> zOBVUn75i*(=)%ngG!(?W)U=-@V$rxU1V9(Yam$gDoc95P81O?(X1C*M#1QdkOhbE6G`g32nDxTWOBYE&KWrsXU#h#+e->A}s-2)3SMQ z6e+`l{Vk_}=%<6`kwmtc;-};Kd%!aMm2s^_74ADml`G-rqMm)D`sa1-Q0Gkf6SpN0 z8=G|)g;C~q5Ah$9k-p)ZcQyBD;Zu)jA6|$Y>g{pM4pE=phohBx^YKPAX}*E}{<^2* z)tgzlh!clue!06Tr7{gj6sSYVrPreF0b&-x`ywsfAW95>cLoK zKM#nJyR%F$q`Stn?*;|Gz7_*IPbxoT>$LhZzE8^*k?*7i-}YK1?-G0uAM2O+bKCdH z#~ci!N^s&~*F0(13xzc**26FJ7s{T=yubU-B=?kYPu|`!nQxi2G(Ka$bI*N@YU1n~ za?B4X0K_t`mN-N<{_yl=JQB_ZFVJU7qnyCH_cE@Ur%z_&6nWJG+X3Q#J*@4G&9p$= z9U_HhMC&Di+fgE8aYKWXdTb-eHi(v%mg?ZJaaNYW(W*AF;R`zpd%h}QPTcLR?>-)h zQM&T_>8U7BsFmyup3QSH^|sL^&>~~(RIP+xW7xFQQmE3qr~H~=${zFURdaH806iNU zJ~`~4+eX5dZ@3U;59sOFBsUkEzF};2`)0Kj$v&J_-7vzBhLV)5g@ zJBw`Zv^16F#+eodp|~S2NW==$+zxrTKr2i)a$)^3fHHvGqQP)KR?R5$ULt@ z_jLG9fLLX;8qq)@OIL`V52HdKMe+YIBqUJ*P%Iv5t7<}*O(U6!d?Pn2ttTb<`Jy_Y zHZ||FL2_Eg@zH$j5RuEoNWPNrRJOhKzVBS8V30h%BR9<|MhaMr>*LDp ztm%B-^I3Nd?PIERqs;<)2@(7J{LYhmy^ZPwTg9i+RM@rz<_}zX-=EJ4Rb*SNAREde z4$YtPRMkO`o*M3f0Mq#?En+tv+JH^Q)CRz|G`F+c3(!29#iTQ&fR6C!NE^-MXWMEpH7q}C++1(U$R z-f@Nn!`c*aTeEQ_gm)slvP_F^Wa1`&wzPdCJw3g~`SCEFH}#baQ#|7f@Z{>ZvZG|F z)gAz19lxiLvdh@V1B?rQbDeSfLh2D+`cQ6Ryx9J?*eV|FCbU7ESFUQJ`gbRG`aSkF3- z@dP?)dW$R@TJG9Y4y)xmuymR^WQBUQYjv1p=A=H|mEbpz)-N}w8ROTfX3jOTLvW1$ zsb45*F6>*i1qB)D`A?tK%BKuR-hS`XJikop*FsCgA-*wshB%~%K9F~4qD~qYIB-DR+168{a?{wY=2+a=m?-dP=iyKyW4i=_JZZdt@vH8Q_qa*eD+WuLGid^Ks(Jo}9rHHCB`qg7H zTLs}RV!5A1rN~&CKSlobLLr|v+rIUE!~%>eSuK65Y;4p}o@M>Ne`iA>wP%fNc4ltE zK$!Q>X-yJU3yn4M?+5m&D144h+tcls4-$en32v=o;<@|B`;(`WRWU=!^PStR@Hat! z%F)cAdvdtQESI`it9t@mR1EFYV?ntuK)F?*Wp%tNDJoKEDw5!PmgU|{USIty+_F>Z zVl%0BzP7;Kv0!m8UVC$zPf>9Oo@4U(*}8tX_h#OOvXK0bs1yqNJ9(GG+&ahf>%XM` z*WCRsCl~bRivQNN4vEYeB3Ro0v@eh@7zMf-cOek!pJPCvkAQjs`hVW>1HXHEBcb+= TzAog)p`j#2 Date: Thu, 20 Feb 2025 15:31:04 +0700 Subject: [PATCH 8/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 65104a38..64fad27c 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ This GitHub Action automatically checks for typos in the files changed in a pull ```bash gem install typocop # install - GITHUB_TOKEN=your_token PULL_REQUEST_ID=your_pull_request_id typocop execute # run action + GITHUB_TOKEN=your_token PULL_REQUEST_ID=the_request_id GITHUB_BASE_REF=branch_base_name typocop execute # run action ``` ![Typocop demo](typocop.gif "")