I have this code that works in PS 7.1 to count the overall length of a string that includes emojis.
In 5.1 it doesn't return the correct values. So to prevent you from wasting your time it would be best to use 7.1.
My question is:
How do I get the emoji count using PowerShell 7.1?
Add-Type -AssemblyName System.Globalization
$str = '๐ฉโ๐ฆฐ๐ฉโ๐ฉโ๐ฆโ๐ฆ๐ณ๏ธโ๐' # 7.1 Returns 3 but 5.1 returns 13.
#$str = '๐๐๐๐๐๐
๐' # 7.1 Returns 7 but 5.1 returns 7.
#$str = "'What ๐จโ๐ฉโ๐ฆ is this?' ๐จโ๐ฉโ๐ฆ ๐น๐ค" # 7.1 Returns 22 but 5.1 returns 30.
$se = [System.Globalization.StringInfo]::GetTextElementEnumerator($str)
$cnt = 0
while($se.MoveNext()) { $cnt += 1 }
$cnt
My required output should be (emoji count only):
'๐ฉโ๐ฆฐ๐ฉโ๐ฉโ๐ฆโ๐ฆ๐ณ๏ธโ๐' # Should return 3.
'๐๐๐๐๐๐
๐' # Should return 7.
"'What ๐จโ๐ฉโ๐ฆ is this?' ๐จโ๐ฉโ๐ฆ ๐น๐ค" # Should return 4.
There are 3,512 emojis at the time of writing.
๐๐๐๐๐๐
๐คฃ๐๐๐๐๐๐๐ฅฐ๐๐คฉ๐๐โบ๏ธ๐๐๐ฅฒ๐๐๐๐คช๐๐ค๐ค๐คญ๐คซ๐ค๐ค๐คจ๐๐๐ถ๐ถโ๐ซ๏ธ๐๐๐๐ฌ๐ฎโ๐จ๐คฅ๐๐๐ช๐คค๐ด๐ท๐ค๐ค๐คข๐คฎ๐คง๐ฅต๐ฅถ๐ฅด๐ต๐ตโ๐ซ๐คฏ๐ค ๐ฅณ๐ฅธ๐๐ค๐ง๐๐๐โน๏ธ๐ฎ๐ฏ๐ฒ๐ณ๐ฅบ๐ฆ๐ง๐จ๐ฐ๐ฅ๐ข๐ญ๐ฑ๐๐ฃ๐๐๐ฉ๐ซ๐ฅฑ๐ค๐ก๐ ๐คฌ๐๐ฟ๐โ ๏ธ๐ฉ๐คก๐น๐บ๐ป๐ฝ๐พ๐ค๐บ๐ธ๐น๐ป๐ผ๐ฝ๐๐ฟ๐พ๐๐๐๐๐๐๐๐๐๐๐๐๐โฃ๏ธ๐โค๏ธโ๐ฅโค๏ธโ๐ฉนโค๏ธ๐งก๐๐๐๐๐ค๐ค๐ค๐ฏ๐ข๐ฅ๐ซ๐ฆ๐จ๐ณ๏ธ๐ฃ๐ฌ๐๏ธโ๐จ๏ธ๐จ๏ธ๐ฏ๏ธ๐ญ๐ค๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐ค๐ค๐ป๐ค๐ผ๐ค๐ฝ๐ค๐พ๐ค๐ฟ๐๏ธ๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟโโ๐ปโ๐ผโ๐ฝโ๐พโ๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐ค๐ค๐ป๐ค๐ผ๐ค๐ฝ๐ค๐พ๐ค๐ฟ๐ค๐ค๐ป๐ค๐ผ๐ค๐ฝ๐ค๐พ๐ค๐ฟโ๏ธโ๐ปโ๐ผโ๐ฝโ๐พโ๐ฟ๐ค๐ค๐ป๐ค๐ผ๐ค๐ฝ๐ค๐พ๐ค๐ฟ๐ค๐ค๐ป๐ค๐ผ๐ค๐ฝ๐ค๐พ๐ค๐ฟ๐ค๐ค๐ป๐ค๐ผ๐ค๐ฝ๐ค๐พ๐ค๐ฟ๐ค๐ค๐ป๐ค๐ผ๐ค๐ฝ๐ค๐พ๐ค๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟโ๏ธโ๐ปโ๐ผโ๐ฝโ๐พโ๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟโโ๐ปโ๐ผโ๐ฝโ๐พโ๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐ค๐ค๐ป๐ค๐ผ๐ค๐ฝ๐ค๐พ๐ค๐ฟ๐ค๐ค๐ป๐ค๐ผ๐ค๐ฝ๐ค๐พ๐ค๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐คฒ๐คฒ๐ป๐คฒ๐ผ๐คฒ๐ฝ๐คฒ๐พ๐คฒ๐ฟ๐ค๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟโ๏ธโ๐ปโ๐ผโ๐ฝโ๐พโ๐ฟ๐
๐
๐ป๐
๐ผ๐
๐ฝ๐
๐พ๐
๐ฟ๐คณ๐คณ๐ป๐คณ๐ผ๐คณ๐ฝ๐คณ๐พ๐คณ๐ฟ๐ช๐ช๐ป๐ช๐ผ๐ช๐ฝ๐ช๐พ๐ช๐ฟ๐ฆพ๐ฆฟ๐ฆต๐ฆต๐ป๐ฆต๐ผ๐ฆต๐ฝ๐ฆต๐พ๐ฆต๐ฟ๐ฆถ๐ฆถ๐ป๐ฆถ๐ผ๐ฆถ๐ฝ๐ฆถ๐พ๐ฆถ๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐ฆป๐ฆป๐ป๐ฆป๐ผ๐ฆป๐ฝ๐ฆป๐พ๐ฆป๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐ง ๐ซ๐ซ๐ฆท๐ฆด๐๐๏ธ๐
๐๐ถ๐ถ๐ป๐ถ๐ผ๐ถ๐ฝ๐ถ๐พ๐ถ๐ฟ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐ฆ๐ฆ๐ป๐ฆ๐ผ๐ฆ๐ฝ๐ฆ๐พ๐ฆ๐ฟ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐ฑ๐ฑ๐ป๐ฑ๐ผ๐ฑ๐ฝ๐ฑ๐พ๐ฑ๐ฟ๐จ๐จ๐ป๐จ๐ผ๐จ๐ฝ๐จ๐พ๐จ๐ฟ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐จโ๐ฆฐ๐จ๐ปโ๐ฆฐ๐จ๐ผโ๐ฆฐ๐จ๐ฝโ๐ฆฐ๐จ๐พโ๐ฆฐ๐จ๐ฟโ๐ฆฐ๐จโ๐ฆฑ๐จ๐ปโ๐ฆฑ๐จ๐ผโ๐ฆฑ๐จ๐ฝโ๐ฆฑ๐จ๐พโ๐ฆฑ๐จ๐ฟโ๐ฆฑ๐จโ๐ฆณ๐จ๐ปโ๐ฆณ๐จ๐ผโ๐ฆณ๐จ๐ฝโ๐ฆณ๐จ๐พโ๐ฆณ๐จ๐ฟโ๐ฆณ๐จโ๐ฆฒ๐จ๐ปโ๐ฆฒ๐จ๐ผโ๐ฆฒ๐จ๐ฝโ๐ฆฒ๐จ๐พโ๐ฆฒ๐จ๐ฟโ๐ฆฒ๐ฉ๐ฉ๐ป๐ฉ๐ผ๐ฉ๐ฝ๐ฉ๐พ๐ฉ๐ฟ๐ฉโ๐ฆฐ๐ฉ๐ปโ๐ฆฐ๐ฉ๐ผโ๐ฆฐ๐ฉ๐ฝโ๐ฆฐ๐ฉ๐พโ๐ฆฐ๐ฉ๐ฟโ๐ฆฐ๐งโ๐ฆฐ๐ง๐ปโ๐ฆฐ๐ง๐ผโ๐ฆฐ๐ง๐ฝโ๐ฆฐ๐ง๐พโ๐ฆฐ๐ง๐ฟโ๐ฆฐ๐ฉโ๐ฆฑ๐ฉ๐ปโ๐ฆฑ๐ฉ๐ผโ๐ฆฑ๐ฉ๐ฝโ๐ฆฑ๐ฉ๐พโ๐ฆฑ๐ฉ๐ฟโ๐ฆฑ๐งโ๐ฆฑ๐ง๐ปโ๐ฆฑ๐ง๐ผโ๐ฆฑ๐ง๐ฝโ๐ฆฑ๐ง๐พโ๐ฆฑ๐ง๐ฟโ๐ฆฑ๐ฉโ๐ฆณ๐ฉ๐ปโ๐ฆณ๐ฉ๐ผโ๐ฆณ๐ฉ๐ฝโ๐ฆณ๐ฉ๐พโ๐ฆณ๐ฉ๐ฟโ๐ฆณ๐งโ๐ฆณ๐ง๐ปโ๐ฆณ๐ง๐ผโ๐ฆณ๐ง๐ฝโ๐ฆณ๐ง๐พโ๐ฆณ๐ง๐ฟโ๐ฆณ๐ฉโ๐ฆฒ๐ฉ๐ปโ๐ฆฒ๐ฉ๐ผโ๐ฆฒ๐ฉ๐ฝโ๐ฆฒ๐ฉ๐พโ๐ฆฒ๐ฉ๐ฟโ๐ฆฒ๐งโ๐ฆฒ๐ง๐ปโ๐ฆฒ๐ง๐ผโ๐ฆฒ๐ง๐ฝโ๐ฆฒ๐ง๐พโ๐ฆฒ๐ง๐ฟโ๐ฆฒ๐ฑโโ๏ธ๐ฑ๐ปโโ๏ธ๐ฑ๐ผโโ๏ธ๐ฑ๐ฝโโ๏ธ๐ฑ๐พโโ๏ธ๐ฑ๐ฟโโ๏ธ๐ฑโโ๏ธ๐ฑ๐ปโโ๏ธ๐ฑ๐ผโโ๏ธ๐ฑ๐ฝโโ๏ธ๐ฑ๐พโโ๏ธ๐ฑ๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐ด๐ด๐ป๐ด๐ผ๐ด๐ฝ๐ด๐พ๐ด๐ฟ๐ต๐ต๐ป๐ต๐ผ๐ต๐ฝ๐ต๐พ๐ต๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐
๐
๐ป๐
๐ผ๐
๐ฝ๐
๐พ๐
๐ฟ๐
โโ๏ธ๐
๐ปโโ๏ธ๐
๐ผโโ๏ธ๐
๐ฝโโ๏ธ๐
๐พโโ๏ธ๐
๐ฟโโ๏ธ๐
โโ๏ธ๐
๐ปโโ๏ธ๐
๐ผโโ๏ธ๐
๐ฝโโ๏ธ๐
๐พโโ๏ธ๐
๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐คฆ๐คฆ๐ป๐คฆ๐ผ๐คฆ๐ฝ๐คฆ๐พ๐คฆ๐ฟ๐คฆโโ๏ธ๐คฆ๐ปโโ๏ธ๐คฆ๐ผโโ๏ธ๐คฆ๐ฝโโ๏ธ๐คฆ๐พโโ๏ธ๐คฆ๐ฟโโ๏ธ๐คฆโโ๏ธ๐คฆ๐ปโโ๏ธ๐คฆ๐ผโโ๏ธ๐คฆ๐ฝโโ๏ธ๐คฆ๐พโโ๏ธ๐คฆ๐ฟโโ๏ธ๐คท๐คท๐ป๐คท๐ผ๐คท๐ฝ๐คท๐พ๐คท๐ฟ๐คทโโ๏ธ๐คท๐ปโโ๏ธ๐คท๐ผโโ๏ธ๐คท๐ฝโโ๏ธ๐คท๐พโโ๏ธ๐คท๐ฟโโ๏ธ๐คทโโ๏ธ๐คท๐ปโโ๏ธ๐คท๐ผโโ๏ธ๐คท๐ฝโโ๏ธ๐คท๐พโโ๏ธ๐คท๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐จโโ๏ธ๐จ๐ปโโ๏ธ๐จ๐ผโโ๏ธ๐จ๐ฝโโ๏ธ๐จ๐พโโ๏ธ๐จ๐ฟโโ๏ธ๐ฉโโ๏ธ๐ฉ๐ปโโ๏ธ๐ฉ๐ผโโ๏ธ๐ฉ๐ฝโโ๏ธ๐ฉ๐พโโ๏ธ๐ฉ๐ฟโโ๏ธ๐งโ๐๐ง๐ปโ๐๐ง๐ผโ๐๐ง๐ฝโ๐๐ง๐พโ๐๐ง๐ฟโ๐๐จโ๐๐จ๐ปโ๐๐จ๐ผโ๐๐จ๐ฝโ๐๐จ๐พโ๐๐จ๐ฟโ๐๐ฉโ๐๐ฉ๐ปโ๐๐ฉ๐ผโ๐๐ฉ๐ฝโ๐๐ฉ๐พโ๐๐ฉ๐ฟโ๐๐งโ๐ซ๐ง๐ปโ๐ซ๐ง๐ผโ๐ซ๐ง๐ฝโ๐ซ๐ง๐พโ๐ซ๐ง๐ฟโ๐ซ๐จโ๐ซ๐จ๐ปโ๐ซ๐จ๐ผโ๐ซ๐จ๐ฝโ๐ซ๐จ๐พโ๐ซ๐จ๐ฟโ๐ซ๐ฉโ๐ซ๐ฉ๐ปโ๐ซ๐ฉ๐ผโ๐ซ๐ฉ๐ฝโ๐ซ๐ฉ๐พโ๐ซ๐ฉ๐ฟโ๐ซ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐จโโ๏ธ๐จ๐ปโโ๏ธ๐จ๐ผโโ๏ธ๐จ๐ฝโโ๏ธ๐จ๐พโโ๏ธ๐จ๐ฟโโ๏ธ๐ฉโโ๏ธ๐ฉ๐ปโโ๏ธ๐ฉ๐ผโโ๏ธ๐ฉ๐ฝโโ๏ธ๐ฉ๐พโโ๏ธ๐ฉ๐ฟโโ๏ธ๐งโ๐พ๐ง๐ปโ๐พ๐ง๐ผโ๐พ๐ง๐ฝโ๐พ๐ง๐พโ๐พ๐ง๐ฟโ๐พ๐จโ๐พ๐จ๐ปโ๐พ๐จ๐ผโ๐พ๐จ๐ฝโ๐พ๐จ๐พโ๐พ๐จ๐ฟโ๐พ๐ฉโ๐พ๐ฉ๐ปโ๐พ๐ฉ๐ผโ๐พ๐ฉ๐ฝโ๐พ๐ฉ๐พโ๐พ๐ฉ๐ฟโ๐พ๐งโ๐ณ๐ง๐ปโ๐ณ๐ง๐ผโ๐ณ๐ง๐ฝโ๐ณ๐ง๐พโ๐ณ๐ง๐ฟโ๐ณ๐จโ๐ณ๐จ๐ปโ๐ณ๐จ๐ผโ๐ณ๐จ๐ฝโ๐ณ๐จ๐พโ๐ณ๐จ๐ฟโ๐ณ๐ฉโ๐ณ๐ฉ๐ปโ๐ณ๐ฉ๐ผโ๐ณ๐ฉ๐ฝโ๐ณ๐ฉ๐พโ๐ณ๐ฉ๐ฟโ๐ณ๐งโ๐ง๐ง๐ปโ๐ง๐ง๐ผโ๐ง๐ง๐ฝโ๐ง๐ง๐พโ๐ง๐ง๐ฟโ๐ง๐จโ๐ง๐จ๐ปโ๐ง๐จ๐ผโ๐ง๐จ๐ฝโ๐ง๐จ๐พโ๐ง๐จ๐ฟโ๐ง๐ฉโ๐ง๐ฉ๐ปโ๐ง๐ฉ๐ผโ๐ง๐ฉ๐ฝโ๐ง๐ฉ๐พโ๐ง๐ฉ๐ฟโ๐ง๐งโ๐ญ๐ง๐ปโ๐ญ๐ง๐ผโ๐ญ๐ง๐ฝโ๐ญ๐ง๐พโ๐ญ๐ง๐ฟโ๐ญ๐จโ๐ญ๐จ๐ปโ๐ญ๐จ๐ผโ๐ญ๐จ๐ฝโ๐ญ๐จ๐พโ๐ญ๐จ๐ฟโ๐ญ๐ฉโ๐ญ๐ฉ๐ปโ๐ญ๐ฉ๐ผโ๐ญ๐ฉ๐ฝโ๐ญ๐ฉ๐พโ๐ญ๐ฉ๐ฟโ๐ญ๐งโ๐ผ๐ง๐ปโ๐ผ๐ง๐ผโ๐ผ๐ง๐ฝโ๐ผ๐ง๐พโ๐ผ๐ง๐ฟโ๐ผ๐จโ๐ผ๐จ๐ปโ๐ผ๐จ๐ผโ๐ผ๐จ๐ฝโ๐ผ๐จ๐พโ๐ผ๐จ๐ฟโ๐ผ๐ฉโ๐ผ๐ฉ๐ปโ๐ผ๐ฉ๐ผโ๐ผ๐ฉ๐ฝโ๐ผ๐ฉ๐พโ๐ผ๐ฉ๐ฟโ๐ผ๐งโ๐ฌ๐ง๐ปโ๐ฌ๐ง๐ผโ๐ฌ๐ง๐ฝโ๐ฌ๐ง๐พโ๐ฌ๐ง๐ฟโ๐ฌ๐จโ๐ฌ๐จ๐ปโ๐ฌ๐จ๐ผโ๐ฌ๐จ๐ฝโ๐ฌ๐จ๐พโ๐ฌ๐จ๐ฟโ๐ฌ๐ฉโ๐ฌ๐ฉ๐ปโ๐ฌ๐ฉ๐ผโ๐ฌ๐ฉ๐ฝโ๐ฌ๐ฉ๐พโ๐ฌ๐ฉ๐ฟโ๐ฌ๐งโ๐ป๐ง๐ปโ๐ป๐ง๐ผโ๐ป๐ง๐ฝโ๐ป๐ง๐พโ๐ป๐ง๐ฟโ๐ป๐จโ๐ป๐จ๐ปโ๐ป๐จ๐ผโ๐ป๐จ๐ฝโ๐ป๐จ๐พโ๐ป๐จ๐ฟโ๐ป๐ฉโ๐ป๐ฉ๐ปโ๐ป๐ฉ๐ผโ๐ป๐ฉ๐ฝโ๐ป๐ฉ๐พโ๐ป๐ฉ๐ฟโ๐ป๐งโ๐ค๐ง๐ปโ๐ค๐ง๐ผโ๐ค๐ง๐ฝโ๐ค๐ง๐พโ๐ค๐ง๐ฟโ๐ค๐จโ๐ค๐จ๐ปโ๐ค๐จ๐ผโ๐ค๐จ๐ฝโ๐ค๐จ๐พโ๐ค๐จ๐ฟโ๐ค๐ฉโ๐ค๐ฉ๐ปโ๐ค๐ฉ๐ผโ๐ค๐ฉ๐ฝโ๐ค๐ฉ๐พโ๐ค๐ฉ๐ฟโ๐ค๐งโ๐จ๐ง๐ปโ๐จ๐ง๐ผโ๐จ๐ง๐ฝโ๐จ๐ง๐พโ๐จ๐ง๐ฟโ๐จ๐จโ๐จ๐จ๐ปโ๐จ๐จ๐ผโ๐จ๐จ๐ฝโ๐จ๐จ๐พโ๐จ๐จ๐ฟโ๐จ๐ฉโ๐จ๐ฉ๐ปโ๐จ๐ฉ๐ผโ๐จ๐ฉ๐ฝโ๐จ๐ฉ๐พโ๐จ๐ฉ๐ฟโ๐จ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐จโโ๏ธ๐จ๐ปโโ๏ธ๐จ๐ผโโ๏ธ๐จ๐ฝโโ๏ธ๐จ๐พโโ๏ธ๐จ๐ฟโโ๏ธ๐ฉโโ๏ธ๐ฉ๐ปโโ๏ธ๐ฉ๐ผโโ๏ธ๐ฉ๐ฝโโ๏ธ๐ฉ๐พโโ๏ธ๐ฉ๐ฟโโ๏ธ๐งโ๐๐ง๐ปโ๐๐ง๐ผโ๐๐ง๐ฝโ๐๐ง๐พโ๐๐ง๐ฟโ๐๐จโ๐๐จ๐ปโ๐๐จ๐ผโ๐๐จ๐ฝโ๐๐จ๐พโ๐๐จ๐ฟโ๐๐ฉโ๐๐ฉ๐ปโ๐๐ฉ๐ผโ๐๐ฉ๐ฝโ๐๐ฉ๐พโ๐๐ฉ๐ฟโ๐๐งโ๐๐ง๐ปโ๐๐ง๐ผโ๐๐ง๐ฝโ๐๐ง๐พโ๐๐ง๐ฟโ๐๐จโ๐๐จ๐ปโ๐๐จ๐ผโ๐๐จ๐ฝโ๐๐จ๐พโ๐๐จ๐ฟโ๐๐ฉโ๐๐ฉ๐ปโ๐๐ฉ๐ผโ๐๐ฉ๐ฝโ๐๐ฉ๐พโ๐๐ฉ๐ฟโ๐๐ฎ๐ฎ๐ป๐ฎ๐ผ๐ฎ๐ฝ๐ฎ๐พ๐ฎ๐ฟ๐ฎโโ๏ธ๐ฎ๐ปโโ๏ธ๐ฎ๐ผโโ๏ธ๐ฎ๐ฝโโ๏ธ๐ฎ๐พโโ๏ธ๐ฎ๐ฟโโ๏ธ๐ฎโโ๏ธ๐ฎ๐ปโโ๏ธ๐ฎ๐ผโโ๏ธ๐ฎ๐ฝโโ๏ธ๐ฎ๐พโโ๏ธ๐ฎ๐ฟโโ๏ธ๐ต๏ธ๐ต๐ป๐ต๐ผ๐ต๐ฝ๐ต๐พ๐ต๐ฟ๐ต๏ธโโ๏ธ๐ต๐ปโโ๏ธ๐ต๐ผโโ๏ธ๐ต๐ฝโโ๏ธ๐ต๐พโโ๏ธ๐ต๐ฟโโ๏ธ๐ต๏ธโโ๏ธ๐ต๐ปโโ๏ธ๐ต๐ผโโ๏ธ๐ต๐ฝโโ๏ธ๐ต๐พโโ๏ธ๐ต๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐ฅท๐ฅท๐ป๐ฅท๐ผ๐ฅท๐ฝ๐ฅท๐พ๐ฅท๐ฟ๐ท๐ท๐ป๐ท๐ผ๐ท๐ฝ๐ท๐พ๐ท๐ฟ๐ทโโ๏ธ๐ท๐ปโโ๏ธ๐ท๐ผโโ๏ธ๐ท๐ฝโโ๏ธ๐ท๐พโโ๏ธ๐ท๐ฟโโ๏ธ๐ทโโ๏ธ๐ท๐ปโโ๏ธ๐ท๐ผโโ๏ธ๐ท๐ฝโโ๏ธ๐ท๐พโโ๏ธ๐ท๐ฟโโ๏ธ๐คด๐คด๐ป๐คด๐ผ๐คด๐ฝ๐คด๐พ๐คด๐ฟ๐ธ๐ธ๐ป๐ธ๐ผ๐ธ๐ฝ๐ธ๐พ๐ธ๐ฟ๐ณ๐ณ๐ป๐ณ๐ผ๐ณ๐ฝ๐ณ๐พ๐ณ๐ฟ๐ณโโ๏ธ๐ณ๐ปโโ๏ธ๐ณ๐ผโโ๏ธ๐ณ๐ฝโโ๏ธ๐ณ๐พโโ๏ธ๐ณ๐ฟโโ๏ธ๐ณโโ๏ธ๐ณ๐ปโโ๏ธ๐ณ๐ผโโ๏ธ๐ณ๐ฝโโ๏ธ๐ณ๐พโโ๏ธ๐ณ๐ฟโโ๏ธ๐ฒ๐ฒ๐ป๐ฒ๐ผ๐ฒ๐ฝ๐ฒ๐พ๐ฒ๐ฟ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐คต๐คต๐ป๐คต๐ผ๐คต๐ฝ๐คต๐พ๐คต๐ฟ๐คตโโ๏ธ๐คต๐ปโโ๏ธ๐คต๐ผโโ๏ธ๐คต๐ฝโโ๏ธ๐คต๐พโโ๏ธ๐คต๐ฟโโ๏ธ๐คตโโ๏ธ๐คต๐ปโโ๏ธ๐คต๐ผโโ๏ธ๐คต๐ฝโโ๏ธ๐คต๐พโโ๏ธ๐คต๐ฟโโ๏ธ๐ฐ๐ฐ๐ป๐ฐ๐ผ๐ฐ๐ฝ๐ฐ๐พ๐ฐ๐ฟ๐ฐโโ๏ธ๐ฐ๐ปโโ๏ธ๐ฐ๐ผโโ๏ธ๐ฐ๐ฝโโ๏ธ๐ฐ๐พโโ๏ธ๐ฐ๐ฟโโ๏ธ๐ฐโโ๏ธ๐ฐ๐ปโโ๏ธ๐ฐ๐ผโโ๏ธ๐ฐ๐ฝโโ๏ธ๐ฐ๐พโโ๏ธ๐ฐ๐ฟโโ๏ธ๐คฐ๐คฐ๐ป๐คฐ๐ผ๐คฐ๐ฝ๐คฐ๐พ๐คฐ๐ฟ๐คฑ๐คฑ๐ป๐คฑ๐ผ๐คฑ๐ฝ๐คฑ๐พ๐คฑ๐ฟ๐ฉโ๐ผ๐ฉ๐ปโ๐ผ๐ฉ๐ผโ๐ผ๐ฉ๐ฝโ๐ผ๐ฉ๐พโ๐ผ๐ฉ๐ฟโ๐ผ๐จโ๐ผ๐จ๐ปโ๐ผ๐จ๐ผโ๐ผ๐จ๐ฝโ๐ผ๐จ๐พโ๐ผ๐จ๐ฟโ๐ผ๐งโ๐ผ๐ง๐ปโ๐ผ๐ง๐ผโ๐ผ๐ง๐ฝโ๐ผ๐ง๐พโ๐ผ๐ง๐ฟโ๐ผ๐ผ๐ผ๐ป๐ผ๐ผ๐ผ๐ฝ๐ผ๐พ๐ผ๐ฟ๐
๐
๐ป๐
๐ผ๐
๐ฝ๐
๐พ๐
๐ฟ๐คถ๐คถ๐ป๐คถ๐ผ๐คถ๐ฝ๐คถ๐พ๐คถ๐ฟ๐งโ๐๐ง๐ปโ๐๐ง๐ผโ๐๐ง๐ฝโ๐๐ง๐พโ๐๐ง๐ฟโ๐๐ฆธ๐ฆธ๐ป๐ฆธ๐ผ๐ฆธ๐ฝ๐ฆธ๐พ๐ฆธ๐ฟ๐ฆธโโ๏ธ๐ฆธ๐ปโโ๏ธ๐ฆธ๐ผโโ๏ธ๐ฆธ๐ฝโโ๏ธ๐ฆธ๐พโโ๏ธ๐ฆธ๐ฟโโ๏ธ๐ฆธโโ๏ธ๐ฆธ๐ปโโ๏ธ๐ฆธ๐ผโโ๏ธ๐ฆธ๐ฝโโ๏ธ๐ฆธ๐พโโ๏ธ๐ฆธ๐ฟโโ๏ธ๐ฆน๐ฆน๐ป๐ฆน๐ผ๐ฆน๐ฝ๐ฆน๐พ๐ฆน๐ฟ๐ฆนโโ๏ธ๐ฆน๐ปโโ๏ธ๐ฆน๐ผโโ๏ธ๐ฆน๐ฝโโ๏ธ๐ฆน๐พโโ๏ธ๐ฆน๐ฟโโ๏ธ๐ฆนโโ๏ธ๐ฆน๐ปโโ๏ธ๐ฆน๐ผโโ๏ธ๐ฆน๐ฝโโ๏ธ๐ฆน๐พโโ๏ธ๐ฆน๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐ง๐งโโ๏ธ๐งโโ๏ธ๐ง๐งโโ๏ธ๐งโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐ถ๐ถ๐ป๐ถ๐ผ๐ถ๐ฝ๐ถ๐พ๐ถ๐ฟ๐ถโโ๏ธ๐ถ๐ปโโ๏ธ๐ถ๐ผโโ๏ธ๐ถ๐ฝโโ๏ธ๐ถ๐พโโ๏ธ๐ถ๐ฟโโ๏ธ๐ถโโ๏ธ๐ถ๐ปโโ๏ธ๐ถ๐ผโโ๏ธ๐ถ๐ฝโโ๏ธ๐ถ๐พโโ๏ธ๐ถ๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโ๐ฆฏ๐ง๐ปโ๐ฆฏ๐ง๐ผโ๐ฆฏ๐ง๐ฝโ๐ฆฏ๐ง๐พโ๐ฆฏ๐ง๐ฟโ๐ฆฏ๐จโ๐ฆฏ๐จ๐ปโ๐ฆฏ๐จ๐ผโ๐ฆฏ๐จ๐ฝโ๐ฆฏ๐จ๐พโ๐ฆฏ๐จ๐ฟโ๐ฆฏ๐ฉโ๐ฆฏ๐ฉ๐ปโ๐ฆฏ๐ฉ๐ผโ๐ฆฏ๐ฉ๐ฝโ๐ฆฏ๐ฉ๐พโ๐ฆฏ๐ฉ๐ฟโ๐ฆฏ๐งโ๐ฆผ๐ง๐ปโ๐ฆผ๐ง๐ผโ๐ฆผ๐ง๐ฝโ๐ฆผ๐ง๐พโ๐ฆผ๐ง๐ฟโ๐ฆผ๐จโ๐ฆผ๐จ๐ปโ๐ฆผ๐จ๐ผโ๐ฆผ๐จ๐ฝโ๐ฆผ๐จ๐พโ๐ฆผ๐จ๐ฟโ๐ฆผ๐ฉโ๐ฆผ๐ฉ๐ปโ๐ฆผ๐ฉ๐ผโ๐ฆผ๐ฉ๐ฝโ๐ฆผ๐ฉ๐พโ๐ฆผ๐ฉ๐ฟโ๐ฆผ๐งโ๐ฆฝ๐ง๐ปโ๐ฆฝ๐ง๐ผโ๐ฆฝ๐ง๐ฝโ๐ฆฝ๐ง๐พโ๐ฆฝ๐ง๐ฟโ๐ฆฝ๐จโ๐ฆฝ๐จ๐ปโ๐ฆฝ๐จ๐ผโ๐ฆฝ๐จ๐ฝโ๐ฆฝ๐จ๐พโ๐ฆฝ๐จ๐ฟโ๐ฆฝ๐ฉโ๐ฆฝ๐ฉ๐ปโ๐ฆฝ๐ฉ๐ผโ๐ฆฝ๐ฉ๐ฝโ๐ฆฝ๐ฉ๐พโ๐ฆฝ๐ฉ๐ฟโ๐ฆฝ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐บ๐บ๐ป๐บ๐ผ๐บ๐ฝ๐บ๐พ๐บ๐ฟ๐ด๏ธ๐ด๐ป๐ด๐ผ๐ด๐ฝ๐ด๐พ๐ด๐ฟ๐ฏ๐ฏโโ๏ธ๐ฏโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐คบ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟโท๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๏ธ๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๏ธโโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐๏ธโโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐ฃ๐ฃ๐ป๐ฃ๐ผ๐ฃ๐ฝ๐ฃ๐พ๐ฃ๐ฟ๐ฃโโ๏ธ๐ฃ๐ปโโ๏ธ๐ฃ๐ผโโ๏ธ๐ฃ๐ฝโโ๏ธ๐ฃ๐พโโ๏ธ๐ฃ๐ฟโโ๏ธ๐ฃโโ๏ธ๐ฃ๐ปโโ๏ธ๐ฃ๐ผโโ๏ธ๐ฃ๐ฝโโ๏ธ๐ฃ๐พโโ๏ธ๐ฃ๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐โโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธโน๏ธโน๐ปโน๐ผโน๐ฝโน๐พโน๐ฟโน๏ธโโ๏ธโน๐ปโโ๏ธโน๐ผโโ๏ธโน๐ฝโโ๏ธโน๐พโโ๏ธโน๐ฟโโ๏ธโน๏ธโโ๏ธโน๐ปโโ๏ธโน๐ผโโ๏ธโน๐ฝโโ๏ธโน๐พโโ๏ธโน๐ฟโโ๏ธ๐๏ธ๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๏ธโโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐๏ธโโ๏ธ๐๐ปโโ๏ธ๐๐ผโโ๏ธ๐๐ฝโโ๏ธ๐๐พโโ๏ธ๐๐ฟโโ๏ธ๐ด๐ด๐ป๐ด๐ผ๐ด๐ฝ๐ด๐พ๐ด๐ฟ๐ดโโ๏ธ๐ด๐ปโโ๏ธ๐ด๐ผโโ๏ธ๐ด๐ฝโโ๏ธ๐ด๐พโโ๏ธ๐ด๐ฟโโ๏ธ๐ดโโ๏ธ๐ด๐ปโโ๏ธ๐ด๐ผโโ๏ธ๐ด๐ฝโโ๏ธ๐ด๐พโโ๏ธ๐ด๐ฟโโ๏ธ๐ต๐ต๐ป๐ต๐ผ๐ต๐ฝ๐ต๐พ๐ต๐ฟ๐ตโโ๏ธ๐ต๐ปโโ๏ธ๐ต๐ผโโ๏ธ๐ต๐ฝโโ๏ธ๐ต๐พโโ๏ธ๐ต๐ฟโโ๏ธ๐ตโโ๏ธ๐ต๐ปโโ๏ธ๐ต๐ผโโ๏ธ๐ต๐ฝโโ๏ธ๐ต๐พโโ๏ธ๐ต๐ฟโโ๏ธ๐คธ๐คธ๐ป๐คธ๐ผ๐คธ๐ฝ๐คธ๐พ๐คธ๐ฟ๐คธโโ๏ธ๐คธ๐ปโโ๏ธ๐คธ๐ผโโ๏ธ๐คธ๐ฝโโ๏ธ๐คธ๐พโโ๏ธ๐คธ๐ฟโโ๏ธ๐คธโโ๏ธ๐คธ๐ปโโ๏ธ๐คธ๐ผโโ๏ธ๐คธ๐ฝโโ๏ธ๐คธ๐พโโ๏ธ๐คธ๐ฟโโ๏ธ๐คผ๐คผโโ๏ธ๐คผโโ๏ธ๐คฝ๐คฝ๐ป๐คฝ๐ผ๐คฝ๐ฝ๐คฝ๐พ๐คฝ๐ฟ๐คฝโโ๏ธ๐คฝ๐ปโโ๏ธ๐คฝ๐ผโโ๏ธ๐คฝ๐ฝโโ๏ธ๐คฝ๐พโโ๏ธ๐คฝ๐ฟโโ๏ธ๐คฝโโ๏ธ๐คฝ๐ปโโ๏ธ๐คฝ๐ผโโ๏ธ๐คฝ๐ฝโโ๏ธ๐คฝ๐พโโ๏ธ๐คฝ๐ฟโโ๏ธ๐คพ๐คพ๐ป๐คพ๐ผ๐คพ๐ฝ๐คพ๐พ๐คพ๐ฟ๐คพโโ๏ธ๐คพ๐ปโโ๏ธ๐คพ๐ผโโ๏ธ๐คพ๐ฝโโ๏ธ๐คพ๐พโโ๏ธ๐คพ๐ฟโโ๏ธ๐คพโโ๏ธ๐คพ๐ปโโ๏ธ๐คพ๐ผโโ๏ธ๐คพ๐ฝโโ๏ธ๐คพ๐พโโ๏ธ๐คพ๐ฟโโ๏ธ๐คน๐คน๐ป๐คน๐ผ๐คน๐ฝ๐คน๐พ๐คน๐ฟ๐คนโโ๏ธ๐คน๐ปโโ๏ธ๐คน๐ผโโ๏ธ๐คน๐ฝโโ๏ธ๐คน๐พโโ๏ธ๐คน๐ฟโโ๏ธ๐คนโโ๏ธ๐คน๐ปโโ๏ธ๐คน๐ผโโ๏ธ๐คน๐ฝโโ๏ธ๐คน๐พโโ๏ธ๐คน๐ฟโโ๏ธ๐ง๐ง๐ป๐ง๐ผ๐ง๐ฝ๐ง๐พ๐ง๐ฟ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐งโโ๏ธ๐ง๐ปโโ๏ธ๐ง๐ผโโ๏ธ๐ง๐ฝโโ๏ธ๐ง๐พโโ๏ธ๐ง๐ฟโโ๏ธ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐งโ๐คโ๐ง๐ง๐ปโ๐คโ๐ง๐ป๐ง๐ปโ๐คโ๐ง๐ผ๐ง๐ปโ๐คโ๐ง๐ฝ๐ง๐ปโ๐คโ๐ง๐พ๐ง๐ปโ๐คโ๐ง๐ฟ๐ง๐ผโ๐คโ๐ง๐ป๐ง๐ผโ๐คโ๐ง๐ผ๐ง๐ผโ๐คโ๐ง๐ฝ๐ง๐ผโ๐คโ๐ง๐พ๐ง๐ผโ๐คโ๐ง๐ฟ๐ง๐ฝโ๐คโ๐ง๐ป๐ง๐ฝโ๐คโ๐ง๐ผ๐ง๐ฝโ๐คโ๐ง๐ฝ๐ง๐ฝโ๐คโ๐ง๐พ๐ง๐ฝโ๐คโ๐ง๐ฟ๐ง๐พโ๐คโ๐ง๐ป๐ง๐พโ๐คโ๐ง๐ผ๐ง๐พโ๐คโ๐ง๐ฝ๐ง๐พโ๐คโ๐ง๐พ๐ง๐พโ๐คโ๐ง๐ฟ๐ง๐ฟโ๐คโ๐ง๐ป๐ง๐ฟโ๐คโ๐ง๐ผ๐ง๐ฟโ๐คโ๐ง๐ฝ๐ง๐ฟโ๐คโ๐ง๐พ๐ง๐ฟโ๐คโ๐ง๐ฟ๐ญ๐ญ๐ป๐ฉ๐ปโ๐คโ๐ฉ๐ผ๐ฉ๐ปโ๐คโ๐ฉ๐ฝ๐ฉ๐ปโ๐คโ๐ฉ๐พ๐ฉ๐ปโ๐คโ๐ฉ๐ฟ๐ฉ๐ผโ๐คโ๐ฉ๐ป๐ญ๐ผ๐ฉ๐ผโ๐คโ๐ฉ๐ฝ๐ฉ๐ผโ๐คโ๐ฉ๐พ๐ฉ๐ผโ๐คโ๐ฉ๐ฟ๐ฉ๐ฝโ๐คโ๐ฉ๐ป๐ฉ๐ฝโ๐คโ๐ฉ๐ผ๐ญ๐ฝ๐ฉ๐ฝโ๐คโ๐ฉ๐พ๐ฉ๐ฝโ๐คโ๐ฉ๐ฟ๐ฉ๐พโ๐คโ๐ฉ๐ป๐ฉ๐พโ๐คโ๐ฉ๐ผ๐ฉ๐พโ๐คโ๐ฉ๐ฝ๐ญ๐พ๐ฉ๐พโ๐คโ๐ฉ๐ฟ๐ฉ๐ฟโ๐คโ๐ฉ๐ป๐ฉ๐ฟโ๐คโ๐ฉ๐ผ๐ฉ๐ฟโ๐คโ๐ฉ๐ฝ๐ฉ๐ฟโ๐คโ๐ฉ๐พ๐ญ๐ฟ๐ซ๐ซ๐ป๐ฉ๐ปโ๐คโ๐จ๐ผ๐ฉ๐ปโ๐คโ๐จ๐ฝ๐ฉ๐ปโ๐คโ๐จ๐พ๐ฉ๐ปโ๐คโ๐จ๐ฟ๐ฉ๐ผโ๐คโ๐จ๐ป๐ซ๐ผ๐ฉ๐ผโ๐คโ๐จ๐ฝ๐ฉ๐ผโ๐คโ๐จ๐พ๐ฉ๐ผโ๐คโ๐จ๐ฟ๐ฉ๐ฝโ๐คโ๐จ๐ป๐ฉ๐ฝโ๐คโ๐จ๐ผ๐ซ๐ฝ๐ฉ๐ฝโ๐คโ๐จ๐พ๐ฉ๐ฝโ๐คโ๐จ๐ฟ๐ฉ๐พโ๐คโ๐จ๐ป๐ฉ๐พโ๐คโ๐จ๐ผ๐ฉ๐พโ๐คโ๐จ๐ฝ๐ซ๐พ๐ฉ๐พโ๐คโ๐จ๐ฟ๐ฉ๐ฟโ๐คโ๐จ๐ป๐ฉ๐ฟโ๐คโ๐จ๐ผ๐ฉ๐ฟโ๐คโ๐จ๐ฝ๐ฉ๐ฟโ๐คโ๐จ๐พ๐ซ๐ฟ๐ฌ๐ฌ๐ป๐จ๐ปโ๐คโ๐จ๐ผ๐จ๐ปโ๐คโ๐จ๐ฝ๐จ๐ปโ๐คโ๐จ๐พ๐จ๐ปโ๐คโ๐จ๐ฟ๐จ๐ผโ๐คโ๐จ๐ป๐ฌ๐ผ๐จ๐ผโ๐คโ๐จ๐ฝ๐จ๐ผโ๐คโ๐จ๐พ๐จ๐ผโ๐คโ๐จ๐ฟ๐จ๐ฝโ๐คโ๐จ๐ป๐จ๐ฝโ๐คโ๐จ๐ผ๐ฌ๐ฝ๐จ๐ฝโ๐คโ๐จ๐พ๐จ๐ฝโ๐คโ๐จ๐ฟ๐จ๐พโ๐คโ๐จ๐ป๐จ๐พโ๐คโ๐จ๐ผ๐จ๐พโ๐คโ๐จ๐ฝ๐ฌ๐พ๐จ๐พโ๐คโ๐จ๐ฟ๐จ๐ฟโ๐คโ๐จ๐ป๐จ๐ฟโ๐คโ๐จ๐ผ๐จ๐ฟโ๐คโ๐จ๐ฝ๐จ๐ฟโ๐คโ๐จ๐พ๐ฌ๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐ง๐ปโโค๏ธโ๐โ๐ง๐ผ๐ง๐ปโโค๏ธโ๐โ๐ง๐ฝ๐ง๐ปโโค๏ธโ๐โ๐ง๐พ๐ง๐ปโโค๏ธโ๐โ๐ง๐ฟ๐ง๐ผโโค๏ธโ๐โ๐ง๐ป๐ง๐ผโโค๏ธโ๐โ๐ง๐ฝ๐ง๐ผโโค๏ธโ๐โ๐ง๐พ๐ง๐ผโโค๏ธโ๐โ๐ง๐ฟ๐ง๐ฝโโค๏ธโ๐โ๐ง๐ป๐ง๐ฝโโค๏ธโ๐โ๐ง๐ผ๐ง๐ฝโโค๏ธโ๐โ๐ง๐พ๐ง๐ฝโโค๏ธโ๐โ๐ง๐ฟ๐ง๐พโโค๏ธโ๐โ๐ง๐ป๐ง๐พโโค๏ธโ๐โ๐ง๐ผ๐ง๐พโโค๏ธโ๐โ๐ง๐ฝ๐ง๐พโโค๏ธโ๐โ๐ง๐ฟ๐ง๐ฟโโค๏ธโ๐โ๐ง๐ป๐ง๐ฟโโค๏ธโ๐โ๐ง๐ผ๐ง๐ฟโโค๏ธโ๐โ๐ง๐ฝ๐ง๐ฟโโค๏ธโ๐โ๐ง๐พ๐ฉโโค๏ธโ๐โ๐จ๐ฉ๐ปโโค๏ธโ๐โ๐จ๐ป๐ฉ๐ปโโค๏ธโ๐โ๐จ๐ผ๐ฉ๐ปโโค๏ธโ๐โ๐จ๐ฝ๐ฉ๐ปโโค๏ธโ๐โ๐จ๐พ๐ฉ๐ปโโค๏ธโ๐โ๐จ๐ฟ๐ฉ๐ผโโค๏ธโ๐โ๐จ๐ป๐ฉ๐ผโโค๏ธโ๐โ๐จ๐ผ๐ฉ๐ผโโค๏ธโ๐โ๐จ๐ฝ๐ฉ๐ผโโค๏ธโ๐โ๐จ๐พ๐ฉ๐ผโโค๏ธโ๐โ๐จ๐ฟ๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐ป๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐ผ๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐ฝ๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐พ๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐ฟ๐ฉ๐พโโค๏ธโ๐โ๐จ๐ป๐ฉ๐พโโค๏ธโ๐โ๐จ๐ผ๐ฉ๐พโโค๏ธโ๐โ๐จ๐ฝ๐ฉ๐พโโค๏ธโ๐โ๐จ๐พ๐ฉ๐พโโค๏ธโ๐โ๐จ๐ฟ๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐ป๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐ผ๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐ฝ๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐พ๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐ฟ๐จโโค๏ธโ๐โ๐จ๐จ๐ปโโค๏ธโ๐โ๐จ๐ป๐จ๐ปโโค๏ธโ๐โ๐จ๐ผ๐จ๐ปโโค๏ธโ๐โ๐จ๐ฝ๐จ๐ปโโค๏ธโ๐โ๐จ๐พ๐จ๐ปโโค๏ธโ๐โ๐จ๐ฟ๐จ๐ผโโค๏ธโ๐โ๐จ๐ป๐จ๐ผโโค๏ธโ๐โ๐จ๐ผ๐จ๐ผโโค๏ธโ๐โ๐จ๐ฝ๐จ๐ผโโค๏ธโ๐โ๐จ๐พ๐จ๐ผโโค๏ธโ๐โ๐จ๐ฟ๐จ๐ฝโโค๏ธโ๐โ๐จ๐ป๐จ๐ฝโโค๏ธโ๐โ๐จ๐ผ๐จ๐ฝโโค๏ธโ๐โ๐จ๐ฝ๐จ๐ฝโโค๏ธโ๐โ๐จ๐พ๐จ๐ฝโโค๏ธโ๐โ๐จ๐ฟ๐จ๐พโโค๏ธโ๐โ๐จ๐ป๐จ๐พโโค๏ธโ๐โ๐จ๐ผ๐จ๐พโโค๏ธโ๐โ๐จ๐ฝ๐จ๐พโโค๏ธโ๐โ๐จ๐พ๐จ๐พโโค๏ธโ๐โ๐จ๐ฟ๐จ๐ฟโโค๏ธโ๐โ๐จ๐ป๐จ๐ฟโโค๏ธโ๐โ๐จ๐ผ๐จ๐ฟโโค๏ธโ๐โ๐จ๐ฝ๐จ๐ฟโโค๏ธโ๐โ๐จ๐พ๐จ๐ฟโโค๏ธโ๐โ๐จ๐ฟ๐ฉโโค๏ธโ๐โ๐ฉ๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐ป๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐ผ๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐ฝ๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐พ๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐ฟ๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ป๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ผ๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฝ๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐พ๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฟ๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐ป๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐ผ๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐ฝ๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐พ๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐ฟ๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐ป๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐ผ๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐ฝ๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐พ๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐ฟ๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐ป๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐ผ๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐ฝ๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐พ๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐ฟ๐๐๐ป๐๐ผ๐๐ฝ๐๐พ๐๐ฟ๐ง๐ปโโค๏ธโ๐ง๐ผ๐ง๐ปโโค๏ธโ๐ง๐ฝ๐ง๐ปโโค๏ธโ๐ง๐พ๐ง๐ปโโค๏ธโ๐ง๐ฟ๐ง๐ผโโค๏ธโ๐ง๐ป๐ง๐ผโโค๏ธโ๐ง๐ฝ๐ง๐ผโโค๏ธโ๐ง๐พ๐ง๐ผโโค๏ธโ๐ง๐ฟ๐ง๐ฝโโค๏ธโ๐ง๐ป๐ง๐ฝโโค๏ธโ๐ง๐ผ๐ง๐ฝโโค๏ธโ๐ง๐พ๐ง๐ฝโโค๏ธโ๐ง๐ฟ๐ง๐พโโค๏ธโ๐ง๐ป๐ง๐พโโค๏ธโ๐ง๐ผ๐ง๐พโโค๏ธโ๐ง๐ฝ๐ง๐พโโค๏ธโ๐ง๐ฟ๐ง๐ฟโโค๏ธโ๐ง๐ป๐ง๐ฟโโค๏ธโ๐ง๐ผ๐ง๐ฟโโค๏ธโ๐ง๐ฝ๐ง๐ฟโโค๏ธโ๐ง๐พ๐ฉโโค๏ธโ๐จ๐ฉ๐ปโโค๏ธโ๐จ๐ป๐ฉ๐ปโโค๏ธโ๐จ๐ผ๐ฉ๐ปโโค๏ธโ๐จ๐ฝ๐ฉ๐ปโโค๏ธโ๐จ๐พ๐ฉ๐ปโโค๏ธโ๐จ๐ฟ๐ฉ๐ผโโค๏ธโ๐จ๐ป๐ฉ๐ผโโค๏ธโ๐จ๐ผ๐ฉ๐ผโโค๏ธโ๐จ๐ฝ๐ฉ๐ผโโค๏ธโ๐จ๐พ๐ฉ๐ผโโค๏ธโ๐จ๐ฟ๐ฉ๐ฝโโค๏ธโ๐จ๐ป๐ฉ๐ฝโโค๏ธโ๐จ๐ผ๐ฉ๐ฝโโค๏ธโ๐จ๐ฝ๐ฉ๐ฝโโค๏ธโ๐จ๐พ๐ฉ๐ฝโโค๏ธโ๐จ๐ฟ๐ฉ๐พโโค๏ธโ๐จ๐ป๐ฉ๐พโโค๏ธโ๐จ๐ผ๐ฉ๐พโโค๏ธโ๐จ๐ฝ๐ฉ๐พโโค๏ธโ๐จ๐พ๐ฉ๐พโโค๏ธโ๐จ๐ฟ๐ฉ๐ฟโโค๏ธโ๐จ๐ป๐ฉ๐ฟโโค๏ธโ๐จ๐ผ๐ฉ๐ฟโโค๏ธโ๐จ๐ฝ๐ฉ๐ฟโโค๏ธโ๐จ๐พ๐ฉ๐ฟโโค๏ธโ๐จ๐ฟ๐จโโค๏ธโ๐จ๐จ๐ปโโค๏ธโ๐จ๐ป๐จ๐ปโโค๏ธโ๐จ๐ผ๐จ๐ปโโค๏ธโ๐จ๐ฝ๐จ๐ปโโค๏ธโ๐จ๐พ๐จ๐ปโโค๏ธโ๐จ๐ฟ๐จ๐ผโโค๏ธโ๐จ๐ป๐จ๐ผโโค๏ธโ๐จ๐ผ๐จ๐ผโโค๏ธโ๐จ๐ฝ๐จ๐ผโโค๏ธโ๐จ๐พ๐จ๐ผโโค๏ธโ๐จ๐ฟ๐จ๐ฝโโค๏ธโ๐จ๐ป๐จ๐ฝโโค๏ธโ๐จ๐ผ๐จ๐ฝโโค๏ธโ๐จ๐ฝ๐จ๐ฝโโค๏ธโ๐จ๐พ๐จ๐ฝโโค๏ธโ๐จ๐ฟ๐จ๐พโโค๏ธโ๐จ๐ป๐จ๐พโโค๏ธโ๐จ๐ผ๐จ๐พโโค๏ธโ๐จ๐ฝ๐จ๐พโโค๏ธโ๐จ๐พ๐จ๐พโโค๏ธโ๐จ๐ฟ๐จ๐ฟโโค๏ธโ๐จ๐ป๐จ๐ฟโโค๏ธโ๐จ๐ผ๐จ๐ฟโโค๏ธโ๐จ๐ฝ๐จ๐ฟโโค๏ธโ๐จ๐พ๐จ๐ฟโโค๏ธโ๐จ๐ฟ๐ฉโโค๏ธโ๐ฉ๐ฉ๐ปโโค๏ธโ๐ฉ๐ป๐ฉ๐ปโโค๏ธโ๐ฉ๐ผ๐ฉ๐ปโโค๏ธโ๐ฉ๐ฝ๐ฉ๐ปโโค๏ธโ๐ฉ๐พ๐ฉ๐ปโโค๏ธโ๐ฉ๐ฟ๐ฉ๐ผโโค๏ธโ๐ฉ๐ป๐ฉ๐ผโโค๏ธโ๐ฉ๐ผ๐ฉ๐ผโโค๏ธโ๐ฉ๐ฝ๐ฉ๐ผโโค๏ธโ๐ฉ๐พ๐ฉ๐ผโโค๏ธโ๐ฉ๐ฟ๐ฉ๐ฝโโค๏ธโ๐ฉ๐ป๐ฉ๐ฝโโค๏ธโ๐ฉ๐ผ๐ฉ๐ฝโโค๏ธโ๐ฉ๐ฝ๐ฉ๐ฝโโค๏ธโ๐ฉ๐พ๐ฉ๐ฝโโค๏ธโ๐ฉ๐ฟ๐ฉ๐พโโค๏ธโ๐ฉ๐ป๐ฉ๐พโโค๏ธโ๐ฉ๐ผ๐ฉ๐พโโค๏ธโ๐ฉ๐ฝ๐ฉ๐พโโค๏ธโ๐ฉ๐พ๐ฉ๐พโโค๏ธโ๐ฉ๐ฟ๐ฉ๐ฟโโค๏ธโ๐ฉ๐ป๐ฉ๐ฟโโค๏ธโ๐ฉ๐ผ๐ฉ๐ฟโโค๏ธโ๐ฉ๐ฝ๐ฉ๐ฟโโค๏ธโ๐ฉ๐พ๐ฉ๐ฟโโค๏ธโ๐ฉ๐ฟ๐ช๐จโ๐ฉโ๐ฆ๐จโ๐ฉโ๐ง๐จโ๐ฉโ๐งโ๐ฆ๐จโ๐ฉโ๐ฆโ๐ฆ๐จโ๐ฉโ๐งโ๐ง๐จโ๐จโ๐ฆ๐จโ๐จโ๐ง๐จโ๐จโ๐งโ๐ฆ๐จโ๐จโ๐ฆโ๐ฆ๐จโ๐จโ๐งโ๐ง๐ฉโ๐ฉโ๐ฆ๐ฉโ๐ฉโ๐ง๐ฉโ๐ฉโ๐งโ๐ฆ๐ฉโ๐ฉโ๐ฆโ๐ฆ๐ฉโ๐ฉโ๐งโ๐ง๐จโ๐ฆ๐จโ๐ฆโ๐ฆ๐จโ๐ง๐จโ๐งโ๐ฆ๐จโ๐งโ๐ง๐ฉโ๐ฆ๐ฉโ๐ฆโ๐ฆ๐ฉโ๐ง๐ฉโ๐งโ๐ฆ๐ฉโ๐งโ๐ง๐ฃ๏ธ๐ค๐ฅ๐ซ๐ฃ๐ต๐๐ฆ๐ฆง๐ถ๐๐ฆฎ๐โ๐ฆบ๐ฉ๐บ๐ฆ๐ฆ๐ฑ๐๐โโฌ๐ฆ๐ฏ๐
๐๐ด๐๐ฆ๐ฆ๐ฆ๐ฆฌ๐ฎ๐๐๐๐ท๐๐๐ฝ๐๐๐๐ช๐ซ๐ฆ๐ฆ๐๐ฆฃ๐ฆ๐ฆ๐ญ๐๐๐น๐ฐ๐๐ฟ๏ธ๐ฆซ๐ฆ๐ฆ๐ป๐ปโโ๏ธ๐จ๐ผ๐ฆฅ๐ฆฆ๐ฆจ๐ฆ๐ฆก๐พ๐ฆ๐๐๐ฃ๐ค๐ฅ๐ฆ๐ง๐๏ธ๐ฆ
๐ฆ๐ฆข๐ฆ๐ฆค๐ชถ๐ฆฉ๐ฆ๐ฆ๐ธ๐๐ข๐ฆ๐๐ฒ๐๐ฆ๐ฆ๐ณ๐๐ฌ๐ฆญ๐๐ ๐ก๐ฆ๐๐๐๐ฆ๐๐๐๐ชฒ๐๐ฆ๐ชณ๐ท๏ธ๐ธ๏ธ๐ฆ๐ฆ๐ชฐ๐ชฑ๐ฆ ๐๐ธ๐ฎ๐ต๏ธ๐น๐ฅ๐บ๐ป๐ผ๐ท๐ฑ๐ชด๐ฒ๐ณ๐ด๐ต๐พ๐ฟโ๏ธ๐๐๐๐๐๐๐๐๐๐๐๐ฅญ๐๐๐๐๐๐๐ซ๐ฅ๐
๐ซ๐ฅฅ๐ฅ๐๐ฅ๐ฅ๐ฝ๐ถ๏ธ๐ซ๐ฅ๐ฅฌ๐ฅฆ๐ง๐ง
๐๐ฅ๐ฐ๐๐ฅ๐ฅ๐ซ๐ฅจ๐ฅฏ๐ฅ๐ง๐ง๐๐๐ฅฉ๐ฅ๐๐๐๐ญ๐ฅช๐ฎ๐ฏ๐ซ๐ฅ๐ง๐ฅ๐ณ๐ฅ๐ฒ๐ซ๐ฅฃ๐ฅ๐ฟ๐ง๐ง๐ฅซ๐ฑ๐๐๐๐๐๐๐ ๐ข๐ฃ๐ค๐ฅ๐ฅฎ๐ก๐ฅ๐ฅ ๐ฅก๐ฆ๐ฆ๐ฆ๐ฆ๐ฆช๐ฆ๐ง๐จ๐ฉ๐ช๐๐ฐ๐ง๐ฅง๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ผ๐ฅโ๐ซ๐ต๐ถ๐พ๐ท๐ธ๐น๐บ๐ป๐ฅ๐ฅ๐ฅค๐ง๐ง๐ง๐ง๐ฅข๐ฝ๏ธ๐ด๐ฅ๐ช๐บ๐๐๐๐๐บ๏ธ๐พ๐งญ๐๏ธโฐ๏ธ๐๐ป๐๏ธ๐๏ธ๐๏ธ๐๏ธ๐๏ธ๐๏ธ๐๏ธ๐๏ธ๐งฑ๐ชจ๐ชต๐๐๏ธ๐๏ธ๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฏ๐ฐ๐๐ผ๐ฝโช๐๐๐โฉ๏ธ๐โฒโบ๐๐๐๏ธ๐๐
๐๐๐โจ๏ธ๐ ๐ก๐ข๐๐ช๐๐๐๐
๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ป๐๐๐๐๏ธ๐๏ธ๐ต๐ฆฝ๐ฆผ๐บ๐ฒ๐ด๐น๐ผ๐๐ฃ๏ธ๐ค๏ธ๐ข๏ธโฝ๐จ๐ฅ๐ฆ๐๐งโโต๐ถ๐ค๐ณ๏ธโด๏ธ๐ฅ๏ธ๐ขโ๏ธ๐ฉ๏ธ๐ซ๐ฌ๐ช๐บ๐๐๐ ๐ก๐ฐ๏ธ๐๐ธ๐๏ธ๐งณโโณโโฐโฑ๏ธโฒ๏ธ๐ฐ๏ธ๐๐ง๐๐๐๐๐๐๐๐๐๐ ๐๐ก๐๐ข๐๐ฃ๐๐ค๐๐ฅ๐๐ฆ๐๐๐๐๐๐๐๐๐๐๐๐๐ก๏ธโ๏ธ๐๐๐ชโญ๐๐ ๐โ๏ธโ
โ๏ธ๐ค๏ธ๐ฅ๏ธ๐ฆ๏ธ๐ง๏ธ๐จ๏ธ๐ฉ๏ธ๐ช๏ธ๐ซ๏ธ๐ฌ๏ธ๐๐๐โ๏ธโโฑ๏ธโกโ๏ธโ๏ธโโ๏ธ๐ฅ๐ง๐๐๐๐๐๐งจโจ๐๐๐๐๐๐๐๐๐๐งง๐๐๐๏ธ๐๏ธ๐ซ๐๏ธ๐๐
๐ฅ๐ฅ๐ฅโฝโพ๐ฅ๐๐๐๐๐พ๐ฅ๐ณ๐๐๐๐ฅ๐๐ธ๐ฅ๐ฅ๐ฅ
โณโธ๏ธ๐ฃ๐คฟ๐ฝ๐ฟ๐ท๐ฅ๐ฏ๐ช๐ช๐ฑ๐ฎ๐ช๐งฟ๐ฎ๐น๏ธ๐ฐ๐ฒ๐งฉ๐งธ๐ช
๐ชโ ๏ธโฅ๏ธโฆ๏ธโฃ๏ธโ๏ธ๐๐๐ด๐ญ๐ผ๏ธ๐จ๐งต๐ชก๐งถ๐ชข๐๐ถ๏ธ๐ฅฝ๐ฅผ๐ฆบ๐๐๐๐งฃ๐งค๐งฅ๐งฆ๐๐๐ฅป๐ฉฑ๐ฉฒ๐ฉณ๐๐๐๐๐๐๏ธ๐๐ฉด๐๐๐ฅพ๐ฅฟ๐ ๐ก๐ฉฐ๐ข๐๐๐ฉ๐๐งข๐ชโ๏ธ๐ฟ๐๐๐๐๐๐๐๐ข๐ฃ๐ฏ๐๐๐ผ๐ต๐ถ๐๏ธ๐๏ธ๐๏ธ๐ค๐ง๐ป๐ท๐ช๐ธ๐น๐บ๐ป๐ช๐ฅ๐ช๐ฑ๐ฒโ๏ธ๐๐๐ ๐๐๐ป๐ฅ๏ธ๐จ๏ธโจ๏ธ๐ฑ๏ธ๐ฒ๏ธ๐ฝ๐พ๐ฟ๐๐งฎ๐ฅ๐๏ธ๐ฝ๏ธ๐ฌ๐บ๐ท๐ธ๐น๐ผ๐๐๐ฏ๏ธ๐ก๐ฆ๐ฎ๐ช๐๐๐๐๐๐๐๐๐๐๐๐๐ฐ๐๏ธ๐๐๐ท๏ธ๐ฐ๐ช๐ด๐ต๐ถ๐ท๐ธ๐ณ๐งพ๐นโ๏ธ๐ง๐จ๐ฉ๐ค๐ฅ๐ฆ๐ซ๐ช๐ฌ๐ญ๐ฎ๐ณ๏ธโ๏ธโ๏ธ๐๏ธ๐๏ธ๐๏ธ๐๏ธ๐๐ผ๐๐๐๏ธ๐
๐๐๏ธ๐๏ธ๐๐๐๐๐๐๐๐๐๏ธ๐๐โ๏ธ๐๏ธ๐๏ธ๐๏ธ๐๐๐๐๐๐๏ธ๐จ๐ชโ๏ธโ๏ธ๐ ๏ธ๐ก๏ธโ๏ธ๐ซ๐ช๐น๐ก๏ธ๐ช๐ง๐ช๐ฉโ๏ธ๐๏ธโ๏ธ๐ฆฏ๐โ๏ธ๐ช๐งฐ๐งฒ๐ชโ๏ธ๐งช๐งซ๐งฌ๐ฌ๐ญ๐ก๐๐ฉธ๐๐ฉน๐ฉบ๐ช๐๐ช๐ช๐๏ธ๐๏ธ๐ช๐ฝ๐ช ๐ฟ๐๐ชค๐ช๐งด๐งท๐งน๐งบ๐งป๐ชฃ๐งผ๐ชฅ๐งฝ๐งฏ๐๐ฌโฐ๏ธ๐ชฆโฑ๏ธ๐ฟ๐ชง๐ง๐ฎ๐ฐโฟ๐น๐บ๐ป๐ผ๐พ๐๐๐๐
โ ๏ธ๐ธโ๐ซ๐ณ๐ญ๐ฏ๐ฑ๐ท๐ต๐โข๏ธโฃ๏ธโฌ๏ธโ๏ธโก๏ธโ๏ธโฌ๏ธโ๏ธโฌ
๏ธโ๏ธโ๏ธโ๏ธโฉ๏ธโช๏ธโคด๏ธโคต๏ธ๐๐๐๐๐๐๐๐โ๏ธ๐๏ธโก๏ธโธ๏ธโฏ๏ธโ๏ธโฆ๏ธโช๏ธโฎ๏ธ๐๐ฏโโโโโโโโโโโโโ๐๐๐โถ๏ธโฉโญ๏ธโฏ๏ธโ๏ธโชโฎ๏ธ๐ผโซ๐ฝโฌโธ๏ธโน๏ธโบ๏ธโ๏ธ๐ฆ๐
๐๐ถ๐ณ๐ดโ๏ธโ๏ธโง๏ธโ๏ธโโโโพ๏ธโผ๏ธโ๏ธโโโโใฐ๏ธ๐ฑ๐ฒโ๏ธโป๏ธโ๏ธ๐ฑ๐๐ฐโญโ
โ๏ธโ๏ธโโโฐโฟใฝ๏ธโณ๏ธโด๏ธโ๏ธยฉ๏ธยฎ๏ธโข๏ธ#๏ธโฃ*๏ธโฃ0๏ธโฃ1๏ธโฃ2๏ธโฃ3๏ธโฃ4๏ธโฃ5๏ธโฃ6๏ธโฃ7๏ธโฃ8๏ธโฃ9๏ธโฃ๐๐ ๐ก๐ข๐ฃ๐ค๐
ฐ๏ธ๐๐
ฑ๏ธ๐๐๐โน๏ธ๐โ๏ธ๐๐๐
พ๏ธ๐๐
ฟ๏ธ๐๐๐๐๐๏ธ๐ท๏ธ๐ถ๐ฏ๐๐น๐๐ฒ๐๐ธ๐ด๐ณใ๏ธใ๏ธ๐บ๐ต๐ด๐ ๐ก๐ข๐ต๐ฃ๐คโซโช๐ฅ๐ง๐จ๐ฉ๐ฆ๐ช๐ซโฌโฌโผ๏ธโป๏ธโพโฝโช๏ธโซ๏ธ๐ถ๐ท๐ธ๐น๐บ๐ป๐ ๐๐ณ๐ฒ๐๐ฉ๐๐ด๐ณ๏ธ๐ณ๏ธโ๐๐ณ๏ธโโง๏ธ๐ดโโ ๏ธ๐ฆ๐จ๐ฆ๐ฉ๐ฆ๐ช๐ฆ๐ซ๐ฆ๐ฌ๐ฆ๐ฎ๐ฆ๐ฑ๐ฆ๐ฒ๐ฆ๐ด๐ฆ๐ถ๐ฆ๐ท๐ฆ๐ธ๐ฆ๐น๐ฆ๐บ๐ฆ๐ผ๐ฆ๐ฝ๐ฆ๐ฟ๐ง๐ฆ๐ง๐ง๐ง๐ฉ๐ง๐ช๐ง๐ซ๐ง๐ฌ๐ง๐ญ๐ง๐ฎ๐ง๐ฏ๐ง๐ฑ๐ง๐ฒ๐ง๐ณ๐ง๐ด๐ง๐ถ๐ง๐ท๐ง๐ธ๐ง๐น๐ง๐ป๐ง๐ผ๐ง๐พ๐ง๐ฟ๐จ๐ฆ๐จ๐จ๐จ๐ฉ๐จ๐ซ๐จ๐ฌ๐จ๐ญ๐จ๐ฎ๐จ๐ฐ๐จ๐ฑ๐จ๐ฒ๐จ๐ณ๐จ๐ด๐จ๐ต๐จ๐ท๐จ๐บ๐จ๐ป๐จ๐ผ๐จ๐ฝ๐จ๐พ๐จ๐ฟ๐ฉ๐ช๐ฉ๐ฌ๐ฉ๐ฏ๐ฉ๐ฐ๐ฉ๐ฒ๐ฉ๐ด๐ฉ๐ฟ๐ช๐ฆ๐ช๐จ๐ช๐ช๐ช๐ฌ๐ช๐ญ๐ช๐ท๐ช๐ธ๐ช๐น๐ช๐บ๐ซ๐ฎ๐ซ๐ฏ๐ซ๐ฐ๐ซ๐ฒ๐ซ๐ด๐ซ๐ท๐ฌ๐ฆ๐ฌ๐ง๐ฌ๐ฉ๐ฌ๐ช๐ฌ๐ซ๐ฌ๐ฌ๐ฌ๐ญ๐ฌ๐ฎ๐ฌ๐ฑ๐ฌ๐ฒ๐ฌ๐ณ๐ฌ๐ต๐ฌ๐ถ๐ฌ๐ท๐ฌ๐ธ๐ฌ๐น๐ฌ๐บ๐ฌ๐ผ๐ฌ๐พ๐ญ๐ฐ๐ญ๐ฒ๐ญ๐ณ๐ญ๐ท๐ญ๐น๐ญ๐บ๐ฎ๐จ๐ฎ๐ฉ๐ฎ๐ช๐ฎ๐ฑ๐ฎ๐ฒ๐ฎ๐ณ๐ฎ๐ด๐ฎ๐ถ๐ฎ๐ท๐ฎ๐ธ๐ฎ๐น๐ฏ๐ช๐ฏ๐ฒ๐ฏ๐ด๐ฏ๐ต๐ฐ๐ช๐ฐ๐ฌ๐ฐ๐ญ๐ฐ๐ฎ๐ฐ๐ฒ๐ฐ๐ณ๐ฐ๐ต๐ฐ๐ท๐ฐ๐ผ๐ฐ๐พ๐ฐ๐ฟ๐ฑ๐ฆ๐ฑ๐ง๐ฑ๐จ๐ฑ๐ฎ๐ฑ๐ฐ๐ฑ๐ท๐ฑ๐ธ๐ฑ๐น๐ฑ๐บ๐ฑ๐ป๐ฑ๐พ๐ฒ๐ฆ๐ฒ๐จ๐ฒ๐ฉ๐ฒ๐ช๐ฒ๐ซ๐ฒ๐ฌ๐ฒ๐ญ๐ฒ๐ฐ๐ฒ๐ฑ๐ฒ๐ฒ๐ฒ๐ณ๐ฒ๐ด๐ฒ๐ต๐ฒ๐ถ๐ฒ๐ท๐ฒ๐ธ๐ฒ๐น๐ฒ๐บ๐ฒ๐ป๐ฒ๐ผ๐ฒ๐ฝ๐ฒ๐พ๐ฒ๐ฟ๐ณ๐ฆ๐ณ๐จ๐ณ๐ช๐ณ๐ซ๐ณ๐ฌ๐ณ๐ฎ๐ณ๐ฑ๐ณ๐ด๐ณ๐ต๐ณ๐ท๐ณ๐บ๐ณ๐ฟ๐ด๐ฒ๐ต๐ฆ๐ต๐ช๐ต๐ซ๐ต๐ฌ๐ต๐ญ๐ต๐ฐ๐ต๐ฑ๐ต๐ฒ๐ต๐ณ๐ต๐ท๐ต๐ธ๐ต๐น๐ต๐ผ๐ต๐พ๐ถ๐ฆ๐ท๐ช๐ท๐ด๐ท๐ธ๐ท๐บ๐ท๐ผ๐ธ๐ฆ๐ธ๐ง๐ธ๐จ๐ธ๐ฉ๐ธ๐ช๐ธ๐ฌ๐ธ๐ญ๐ธ๐ฎ๐ธ๐ฏ๐ธ๐ฐ๐ธ๐ฑ๐ธ๐ฒ๐ธ๐ณ๐ธ๐ด๐ธ๐ท๐ธ๐ธ๐ธ๐น๐ธ๐ป๐ธ๐ฝ๐ธ๐พ๐ธ๐ฟ๐น๐ฆ๐น๐จ๐น๐ฉ๐น๐ซ๐น๐ฌ๐น๐ญ๐น๐ฏ๐น๐ฐ๐น๐ฑ๐น๐ฒ๐น๐ณ๐น๐ด๐น๐ท๐น๐น๐น๐ป๐น๐ผ๐น๐ฟ๐บ๐ฆ๐บ๐ฌ๐บ๐ฒ๐บ๐ณ๐บ๐ธ๐บ๐พ๐บ๐ฟ๐ป๐ฆ๐ป๐จ๐ป๐ช๐ป๐ฌ๐ป๐ฎ๐ป๐ณ๐ป๐บ๐ผ๐ซ๐ผ๐ธ๐ฝ๐ฐ๐พ๐ช๐พ๐น๐ฟ๐ฆ๐ฟ๐ฒ๐ฟ๐ผ๐ด๐ด๐ด
Some useful links:
https://unicode.org/Public/emoji/13.1/
https://unicode.org/emoji/charts/full-emoji-list.html#1f538
I think the problem is that the strings you've posted contain Unicode features than the .Net Framework (as opposed to dotnet core / dotnet 5) doesn't understand.
For example, the emoji "๐ฉโ๐ฉโ๐ฆโ๐ฆ" is called Family: Woman, Woman, Girl, Boy and although it renders as a single image, it's composed of 4 separate emoji that are combined with a Zero Width Joiner:
$zwj = [System.Char]::ConvertFromUtf32( 0x0200D ); # zero width joiner
$girl = [System.Char]::ConvertFromUtf32( 0x1F466 );
$boy = [System.Char]::ConvertFromUtf32( 0x1F467 );
$man = [System.Char]::ConvertFromUtf32( 0x1F468 );
$woman = [System.Char]::ConvertFromUtf32( 0x1F469 );
# https://emojipedia.org/family-woman-woman-girl-boy/
$family_woman_woman_girl_boy = $woman + $zwj + $woman + $zwj + $girl + $zwj + $boy;
$family_woman_woman_girl_boy
# ๐ฉโ๐ฉโ๐ฆโ๐ฆ
If you run your sample in PowerShell 7.1 (which is based on dotnet core) you get this:
# ๐ฉโ๐ฉโ๐ฆโ๐ฆ
$text = $family_woman_woman_girl_boy;
$se = [System.Globalization.StringInfo]::GetTextElementEnumerator($text)
$cnt = 0
while($se.MoveNext()) { $cnt += 1 }
$cnt
# 1
but if you run it in Windows PowerShell 5.1 (based on the .net framework) you get:
# ๐ฉโ๐ฉโ๐ฆโ๐ฆ
$text = $family_woman_woman_girl_boy;
$se = [System.Globalization.StringInfo]::GetTextElementEnumerator($text)
$cnt = 0
while($se.MoveNext()) { $cnt += 1 }
$cnt
# 7
and you can see PS 5.1 is counting the individual emoji and the $zwj = 4 + 3 = 7.
In your first example $str = '๐ฉโ๐ฆฐ๐ฉโ๐ฉโ๐ฆโ๐ฆ๐ณ๏ธโ๐' you've also got these emoji:
$rainbow = [System.Char]::ConvertFromUtf32( 0x1F308 );
$waving_white_flag = [System.Char]::ConvertFromUtf32( 0x1F3F3 );
$light_skin_tone = [System.Char]::ConvertFromUtf32( 0x1F3FB );
$red_hair = [System.Char]::ConvertFromUtf32( 0x1F9B0 );
$var_16 = [System.Char]::ConvertFromUtf32( 0x0FE0F ); # variation selector-16
# https://emojipedia.org/woman-light-skin-tone-red-hair/
$woman_light_skin_tone_red_hair = $woman + $light_skin_tone + $zwj + $red_hair;
# https://emojipedia.org/rainbow-flag/
$rainbow_flag = $waving_white_flag + $var_16 + $zwj + $rainbow;
and then your sample in PowerShell 7.1 is:
# ๐ฉโ๐ฆฐ๐ฉโ๐ฉโ๐ฆโ๐ฆ๐ณ๏ธโ๐
$text = $woman_light_skin_tone_red_hair + $family_woman_woman_girl_boy + $rainbow_flag;
$se = [System.Globalization.StringInfo]::GetTextElementEnumerator($text)
$cnt = 0
while($se.MoveNext()) { $cnt += 1 }
$cnt
# 3
and in PowerShell 5.1 is:
# ๐ฉโ๐ฆฐ๐ฉโ๐ฉโ๐ฆโ๐ฆ๐ณ๏ธโ๐
$text = $woman_light_skin_tone_red_hair + $family_woman_woman_girl_boy + $rainbow_flag;
$se = [System.Globalization.StringInfo]::GetTextElementEnumerator($text)
$cnt = 0
while($se.MoveNext()) { $cnt += 1 }
$cnt
# 14
Note that PowerShell 5.1 is not counting $var_16, but it is counting $zwj, so the total is 14, not 15.
If you break your other examples down in the same way the results make more sense.
In addition, if you break the composite emoji down into individual items the PowerShell 5.1 version works fine:
# ๐ฉ๐ฉ๐ฆ๐ง
$text = $woman + $woman + $girl + $boy;
$se = [System.Globalization.StringInfo]::GetTextElementEnumerator($text)
$cnt = 0
while($se.MoveNext()) { $cnt += 1 }
$cnt
# 4
so it's specifically a problem with the composite emoji.
That seems to explain why you're seeing those results, but as for how to work around it... ๐คท
Basically, emojis are a huge pain. Let's take this string, how many emoji characters are there?
'foo ๐จโ๐ฉโ๐ฆ ๐น๐ค ๐ง๐ป bar'
That's right, there are seven valid emoji characters. Emojis can be combined or modified with others:
๐จโ๐ฉโ๐ฆ = ๐จโ + ๐ฉโ + ๐ฆ
๐น
๐ค
๐ง๐ป = ๐ง + ๐ป
In UTF16 (as powershell's [char] is 16-bit), it looks something like this:
# emoji character is split in two for UTF16, and "glued" together with zero-width-joiner character U+200D to other emojis
๐จโ๐ฉโ๐ฆ = '0xd83d,0xdc68,0x200d,0xd83d,0xdc69,0x200d,0xd83d,0xdc66'
# modified with a variation selector character
๐ง๐ป = '0xd83d,0xdc67,0xd83c,0xdffb'
This function works fine to get emojis from a string for educational purposes in both 5.1 and v7. I just wrote it for a one-time issue though - it will not work in many circumstances (see below):
Function Get-Emojis {
param ($string = (Get-Content emojis.txt -Encoding UTF8))
# Iterate through each char until emoji
$result = for ($i = 0; $i -lt $string.length) {
# character arrays are made of UTF16 characters, so emojis are always split up into pairs
# check if character is part of a surrogate pair, otherwise increment
if ( [System.Char]::IsSurrogatePair($string[$i],$string[$i+1]) ) {
# add char pair to output
[char[]]$output = $string[$i],$string[$i+1]
$iIsEmoji = $true
$i+=2
# check following characters for either a zero-width-joiner or a variation selector, and add to output.
# loop because many emojis can be combined
While ($iIsEmoji) {
# check if next character is a joiner (unicode 200D)
# or a variation selector character (FE00-FE0F):
if ( $string[$i] -in (0xFE00..0xFE0F+0x200d) ) {
$output += $string[$i]
$i+=1
}
#check if next two characters are emoji modifiers (skin tone etc) (U+1F300-U+1F5FF)
elseif ( [System.Char]::IsSurrogatePair($string[$i],$string[$i+1]) ) {
# check if pair is within modifier character range
if ([System.char]::ConvertToUtf32($string[$i],$string[$i+1]) -in 0x1F300..0x1F5FF ) {
$output += $string[$i],$string[$i+1]
$i+=2
}
# but if not in range, it's probably a separate emoji, so end.
else { $iIsEmoji = $false }
}
else { $iIsEmoji = $false }
}
# Return full emoji string
$output -join $null
}
else {$i += 1}
}
$result
}
# Usage: Only one string at a time.
# note: specify encoding when importing weird text from a file - otherwise different powershell versions can misbehave
# example: What emoji is ๐จโ๐ฉโ๐ฆ ๐น๐ค ๐ง๐ป this
$string = get-content C:\temp\emojis.txt -Encoding utf8
$emojis = Get-Emojis -string $string
$emojis.count
4
Warnings:
This will grab any character that is above the utf16 limit of U+FFFF (not just emojis)
It only grabs characters above that limit. No dingbats or many other types of symbols.
it's not very efficient.
It shows the process though, so it may be helpful
Hmm, enumeraterunes() in ps 7 says '14' for the first one and '12' for the emojis in the last one. $str2 has the simplest behavior where each emoji is 2 surrogate characters.
$str = '๐ฉโ๐ฆฐ๐ฉโ๐ฉโ๐ฆโ๐ฆ๐ณ๏ธโ๐'
$str.length # 22
$str.EnumerateRunes() | measure | % count # 14
$str2 = '๐๐๐๐๐๐
๐'
$str2.length # 14
$str2.EnumerateRunes() | measure | % count # 7
$str3 = '๐จโ๐ฉโ๐ฆ๐จโ๐ฉโ๐ฆ๐น๐ค'
$str3.length # 20
$str3.EnumerateRunes() | measure | % count # 12
Related
It seems so simple. I need a cmdlet to take a two word string, and truncate the first word to just the first character and truncate the second word to 11 characters, and eliminate the space between them. So "Arnold Schwarzenegger" would output to a variable as "ASchwarzeneg"
I literally have no code. My thinking was to
$vars=$var1.split(" ")
$var1=""
foreach $var in $vars{
????
}
I'm totally at a loss as to how to do this, and it seems so simple too. Any help would be appreciated.
Here is one way to do it using the index operator [ ] in combination with the range operator ..:
$vars = 'Arnold Schwarzenegger', 'Short Name'
$names = foreach($var in $vars) {
$i = $var.IndexOf(' ') + 1 # index after the space
$z = $i + 10 # to slice from `$i` until `$i + 10` (11 chars)
$var[0] + [string]::new($var[$i..$z])
}
$names
I need help with the following:
Create a for loop based on the conditions that the index is initialized to 0, $test is less than 26, and the index is incremented by 1
For each iteration, print the current letter of the alphabet. Start at the letter A. Thus, for each iteration, a single letter is printed on a separate line.
I am not able to increment the char each time the loop runs
for ($test = 0; $test -lt 26; $test++)
{
[char]65
}
I have tried multiple attempts with trying to increment the char 65 through 90 with no success.
Is there an easier way to increment the alphabet to show a letter for each loop that is ran?
You can sum your loop index with 65. So, it'll be: 0 + 65 = A, 1 + 65 = B ...
for ($test = 0; $test -lt 26; $test++)
{
[char](65 + $test)
}
PS2 to PS5:
97..(97+25) | % { [char]$_ }
Faster:
(97..(97+25)).ForEach({ [char]$_ })
PS6+:
'a'..'z' | % { $_ }
Faster:
('a'..'z').ForEach({ $_ })
The following example does not assume 'A' is 65 and also allows you to change it to whatever starting drive you desire. For example, to start with 'C' and go to 'Z':
$start = 'C'
for ($next = 0; $next -lt (26 + [byte][char]'A' - [byte][char]$start); $next++) {
[char]([byte][char]$start + $next)
}
Here's a way to find the first available drive. It checks drives E to Z, and stops on the first available one:
101..(97+25) | % { if(!( get-psdrive ([char]$_ ) -ea 0 ) ) {$freedrive = ([char]$_ ); break} }
$freedrive
$getRead = #($readFile)
for($i = 0; $i -lt getRead.length; $i++){
$getEnd = $readFile.substring(readFile[$i].length - 1, 4)
$getStart = $readFile.substring(readFile[$i].length 1, $getEnd)
#$findMatchREGEX = "[0-8]"
#$replaceWithREGEX = "9"
#$newNum = $readFile -replace $findMatchREGEX,$replaceWithREGEX
}
I am reading in drivers license numbers of varying lengths for all 50 states. I need to change the last 4 digits to 9
How do I get the beginning portion of the subscript in an array and then concatenate them together?
This will work provided you have a single driver's license number, per line in you file:
$readFile = "c:/path/file"
$getRead = gc $readFile
foreach ($line in $getRead){
$getStart = $line.substring(0, $line.Length - 5)
$resultWithNines = $getStart + "9999"
echo $resultWithNines
}
So, currently I'm basically copying a name of the folder using the Ctrl+C that I'm sending to a window explorer. The text that gets copied is usually full of Unicode characters. Then, I'm using ClipGet() like this:
$data = ClipGet()
Send($data)
Unfortunately, the ClipGet() command does not work well with Unicode, so instead of sending the correct title of the folder, I get a bunch of ? characters. I'm really not sure what should I do to Send() the proper text filled with Unicode characters.
Clip get works perfectly. Send() is the problem.
From the forum
;======================================================
;
; Function Name: _SendUnicode("string")
; Description: Send a unicode or an ASCII string.
; Parameter(s): $string is the string you want to send.
; Requirement(s): String Input.
; Return Value(s): None
; Author(s): Robie Zhou (robiezhou#gmail.com)
;
;======================================================
Func _SendUnicode($string)
Local $char
Local $code
For $i = 1 to StringLen($string)
$char = StringMid($string, $i, 1)
$code = Asc($char)
If $code > 127 Then
$code = $code * 256
$i = $i + 1
$char = StringMid($string, $i, 1)
$code = $code + Asc($char)
EndIf
Send("{ASC " & $code & "}")
Next
EndFunc
I had two wordpress installs where a hacker tried to inject some php code into the existing php files
Nothing serious, but now I have to remove about 20 lines of text from about 200 text files across a number of sub-directories, and just not good enough with grep & sed to figure it out...
What is the syntax of the command to search the folder "hacked wordpress" for all the *.php files (including subdirectories) that contain the following text snippet and then delete the snippet?
<?php
//{{56541616
GLOBAL $alreadyxxx;
if($alreadyxxx != 1)
{
$alreadyxxx = 1;
$olderrxxx=error_reporting(0);
function StrToNum($Str, $Check, $Magic)
{
$Int32Unit = 4294967296;
$length = strlen($Str);
for ($i = 0; $i < $length; $i++) {
$Check *= $Magic;
if ($Check >= $Int32Unit) {
$Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
$Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
}
$Check += ord($Str{$i});
}
return $Check;
}
function HashURL($String)
{
$Check1 = StrToNum($String, 0x1505, 0x21);
$Check2 = StrToNum($String, 0, 0x1003F);
$Check1 >>= 2;
$Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
$Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
$Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);
$T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
$T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
return ($T1 | $T2);
}
function CheckHash($Hashnum)
{
$CheckByte = 0;
$Flag = 0;
$HashStr = sprintf('%u', $Hashnum) ;
$length = strlen($HashStr);
for ($i = $length-1; $i >= 0; $i--) {
$Re = $HashStr{$i};
if (1 === ($Flag % 2)) {
$Re += $Re;
$Re = (int)($Re / 10) + ($Re % 10);
}
$CheckByte += $Re;
$Flag ++;
}
$CheckByte %= 10;
if (0 !== $CheckByte) {
$CheckByte = 10 - $CheckByte;
if (1 === ($Flag % 2) ) {
if (1 === ($CheckByte % 2)) {
$CheckByte += 9;
}
$CheckByte >>= 1;
}
}
return '7'.$CheckByte.$HashStr;
}
function getpr($url)
{
$ch = CheckHash(HashURL($url));
$file = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url";;
$data = file_get_contents($file);
$pos = strpos($data, "Rank_");
if($pos === false){return -1;} else{
$pr=substr($data, $pos + 9);
$pr=trim($pr);
$pr=str_replace("
",'',$pr);
return $pr;
}
}
if(isset($_POST['xxxprch']))
{
echo getpr($_POST['xxxprch']);
exit();
}
error_reporting($olderrxxx);
}
//}}18420732
?>
I wouldn't use sed and grep for that - both operate on lines only and can't remember what came before. I usually use awk. It's the thing that most awk tutorials start with after the very basics. Basically, you create three match blocks, one that matches the opening, one that matches the closing and one that matches the rest. In the "opening" and "closing" you either set or reset a boolean to keep track of whether to print the current line. In the handling of the rest of the lines you either print or do not print depending on this boolean.
Also, do remember to back up your files before running it. You wouldn't be the first to get caught off-guard by a typo.
/startsequence/ { ignoring=true; }
/endsequence/ { ignoring=false; }
{ if (!ignoring) print }
Replace startsequence and endsequence by your own valid start & end sequence. If those numbers are actually consistently present, use those. I haven't checked this (as I'm on a cygwin-less Windows machine now) but do think it works. Inspired by the example here
edit: example added
i did not test this .but the idea is correct i hope:
find ./hacked wordpress -name "*.php"|xargs awk '/^<?php/NP=1,/?>$/NP=0{if(NP=0) print}'
I have the same problem, and still looking for a fix.
Have a look at this:
http://crystaldawn.net/fix_hack
and more info here: http://frazierit.com/blog/?p=103
and here too:
How to call php script using html form elements instead of command line?
The clean up script is not perfect and seems to remove some stuff it shouldn't. I don't have the skills to refine it. It would be awesome if someone could fix it up!
use perl;
find "hacked wordpress" -iname \*.php -print |\
xargs perl -0777 -i -pe 's:\s*<\?php\s*//\{\{56541616.*?//\}\}18420732\s*\?>\s*::s;'
This should remove the whole snippet from each .php file.
DRY RUN FIRST - so test in on temporary copy.