Contract 0xabc200c88eb93f5127e973835d36a1366dcc1ec2

 

Contract Overview

Balance:
0.183378815413371315 BNB

BNB Value:
$105.24 (@ $573.91/BNB)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd39a253a43dc99b5961b8168c2400604c0c159320ce75f05c34dd6673c32dfdaApprove132268612021-12-05 22:01:4622 hrs 30 mins ago0xd8ade58acfc93c94448478184cc81c6a65683e33 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000072725
0xfc7e5dc37cf2761d8493368b4009cc8a364715a6e4de202261908fc62449cd6bSet Fees132245442021-12-05 20:05:521 day 26 mins ago0x2f21a3f7480bd279adbef62fda57d5ebd0bf42ac IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.00028325
0x716b690f902bcbf34b1fc1233ec1e17cafe29fb05ca682c1ad6532c9fb345964Approve132242992021-12-05 19:53:361 day 38 mins ago0xf3e6f530dfb70d36264fff9d62eb27705c2119f2 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000311311
0x2901d2b530a1db0790a6f98282389f6cc5f1f972b6ef9c7155e9c5f5e48cf99dSet Fees132241012021-12-05 19:43:421 day 48 mins ago0x2f21a3f7480bd279adbef62fda57d5ebd0bf42ac IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.00028325
0xbdbe224cf6fe07c936cb89f1ee7fdf8cb01c8b52bcdace0db98f98cdb6520650Set Fees132240762021-12-05 19:42:271 day 49 mins ago0x2f21a3f7480bd279adbef62fda57d5ebd0bf42ac IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.00029621
0x7b5dff1fd9a87e3c204f6254f2d59495237d231d0ed97c659f41ceb34d580ff3Set Fees132240562021-12-05 19:41:271 day 50 mins ago0x2f21a3f7480bd279adbef62fda57d5ebd0bf42ac IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.00029621
0x3fb4813c10eb9cd4a831b73788af747e0b103d3d588f00305bad29c2b2e14039Approve131744212021-12-04 1:30:452 days 19 hrs ago0x5c800d551f616f0672e495124d2ab3e542a34b32 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x30562752e4ecb9ec623195fee5190087caec130ab5104ac69218c12f0f999ea7Approve130565512021-11-29 18:39:007 days 1 hr ago0x147af71b91301ee5202109c9710d285fee132f00 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000311311
0x8bc786b07da334ae7df94d436b81fdc5d4c81b10d701bdf3fd279b4612b78f51Approve129496152021-11-25 17:08:5211 days 3 hrs ago0xb627c33d5ed5867a9e237ef6bbb811880f9f64de IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000266838
0x649df3e8f43a3cb03370c29f5b41149d929dec3795cbcddd18330366b85e7613Approve129493762021-11-25 16:55:5211 days 3 hrs ago0x2bbe62e9f8127490459106150beeaa8892dac94c IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000311311
0x0114227bf98bddc84eacd6197b1ccb181528be4e2df4a0cb7a3f20f8ae3ab830Approve128454722021-11-21 22:23:3214 days 22 hrs ago0x281100c3c8d0a3f2c7c54a427dbbe490729850f4 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x86b44f5dd5c46d74d2733e51efb6caafc5505a30048b7b8f1bae648e8fec7047Approve126388182021-11-14 9:44:2222 days 10 hrs ago0x053b0f463b8d67fdeb1635b6a691af7937914333 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x16be7a7e07f102cd857a6bd8f1350c17f685595f0a9d8b1ede9302e99c47e1f6Approve125799382021-11-12 7:20:2124 days 13 hrs ago0x19315010db4746f34c439213e52cb0f3411aeb66 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x763d352fd108f020d582330dc7928f529038b472aef88d2531e0fa4acfc56ba3Approve125364432021-11-10 18:01:3426 days 2 hrs ago0xcf0c329ca5254aa05697496ee026cb65ae790a50 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000072725
0x4a207964aef6e0e5e1b38e92c59b97ea0537dadb249bf5899455c0150dbedcbbApprove124786882021-11-08 16:32:5428 days 3 hrs ago0x25ee535dfd875125ba38bd7e77f2f2d38d51c842 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0xa7797d3c5633c7b1be83435ab6643695dc0aad9ac8f15ffdf39d3e2788ea76fbApprove123468742021-11-04 1:04:1332 days 19 hrs ago0x15360681b8691f123d3beff94a6f5d48c523d381 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x63ae0ad2e4e4dc8eb38c8431fc497f186e50c10d2b297453251628363d06e6beApprove122769422021-11-01 12:49:2535 days 7 hrs ago0xb575ee59d1476c78b00b04356b829896aede2adc IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x9e13ce7ee765349a364da441d6779524f1cd30dad669b678705821e13876289aApprove122604662021-10-31 22:34:4435 days 21 hrs ago0x3f2bd0cab05e849c30b581472ac1b3c9550818e7 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x702ad8f490038631db43c0019104b1f87710d4fc23dc729b69cca32708182c29Approve122066052021-10-30 1:19:4837 days 19 hrs ago0xc13870f817f30b2cc5e1db159d55a3ab837cc261 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x0ddd6b139d0c5ba4b67c7175afb7d8769e045b559f41bd22a6bb04fbc8375da7Approve122065862021-10-30 1:18:5137 days 19 hrs ago0xc13870f817f30b2cc5e1db159d55a3ab837cc261 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0xc2d4e94311310204cb4ac5e5ddd177557d694f8f1d48581d58781223edf4b613Approve121089152021-10-26 14:07:5741 days 6 hrs ago0xff28bf1b5d022c75b958a97f71a4ed7d2e774f89 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x78cb6b1adafcb31fd38554102bd30f6777065811c02d0ef974414af72029914bApprove121080802021-10-26 13:26:0741 days 7 hrs ago0xef30e55e4a3b0ae9199b36c39ece7b48f8d84898 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x1bac0749baf50eb93297e17be9054f608b8347fd50eb0d9b11bddd7e345dcae8Approve120219632021-10-23 13:01:5544 days 7 hrs ago0x4bc51ac49a2b6d69190cd4f7d3fb1ff51d64b4c9 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
0x1fea415aa5393e9315e6965e516672e43015a1761b4632353162b5ff327522ccApprove120088492021-10-23 2:00:3444 days 18 hrs ago0x6a967afe6798c803817bf030f22d19265dd40559 IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000311311
0x4292069c7bc00bcd933f644b16c467d7bf68acb706edea3a6e7ecfeaa9bb7b2aApprove119770302021-10-21 22:53:4645 days 21 hrs ago0x6a8cfa05c86159caac08dcda03e78bf3b7eaf6fc IN  0xabc200c88eb93f5127e973835d36a1366dcc1ec20 BNB0.000222365
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xf630a473f46476028d270f3f9c4598d8bc241fee7cd4fe6291aad515e2d770b6132518612021-12-06 19:33:4858 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.00189050325168424 BNB
0xf630a473f46476028d270f3f9c4598d8bc241fee7cd4fe6291aad515e2d770b6132518612021-12-06 19:33:4858 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.00189050325168424 BNB
0xf630a473f46476028d270f3f9c4598d8bc241fee7cd4fe6291aad515e2d770b6132518612021-12-06 19:33:4858 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.00189050325168424 BNB
0xf630a473f46476028d270f3f9c4598d8bc241fee7cd4fe6291aad515e2d770b6132518612021-12-06 19:33:4858 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec20xb7f7e7a16ea264037825d8e80aa213567a5111120.001584817869185489 BNB
0xf630a473f46476028d270f3f9c4598d8bc241fee7cd4fe6291aad515e2d770b6132518612021-12-06 19:33:4858 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 0xcd2387dc9e9173ffd24565cd1d0929ac0a07cedf0.002377226803778234 BNB
0xf630a473f46476028d270f3f9c4598d8bc241fee7cd4fe6291aad515e2d770b6132518612021-12-06 19:33:4858 mins ago PancakeSwap: Router v2 0xabc200c88eb93f5127e973835d36a1366dcc1ec20.008716498280520194 BNB
0xc04418125bc0c69fc5a720f91889ca3cb036615c5d7f2ac8d2b80c46359618c2132243192021-12-05 19:54:361 day 37 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.00189995743877183 BNB
0xc04418125bc0c69fc5a720f91889ca3cb036615c5d7f2ac8d2b80c46359618c2132243192021-12-05 19:54:361 day 37 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.00189995743877183 BNB
0xc04418125bc0c69fc5a720f91889ca3cb036615c5d7f2ac8d2b80c46359618c2132243192021-12-05 19:54:361 day 37 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.00189995743877183 BNB
0xc04418125bc0c69fc5a720f91889ca3cb036615c5d7f2ac8d2b80c46359618c2132243192021-12-05 19:54:361 day 37 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec20xb7f7e7a16ea264037825d8e80aa213567a5111120.002259364326502196 BNB
0xc04418125bc0c69fc5a720f91889ca3cb036615c5d7f2ac8d2b80c46359618c2132243192021-12-05 19:54:361 day 37 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 0xcd2387dc9e9173ffd24565cd1d0929ac0a07cedf0.002259364326502196 BNB
0xc04418125bc0c69fc5a720f91889ca3cb036615c5d7f2ac8d2b80c46359618c2132243192021-12-05 19:54:361 day 37 mins ago PancakeSwap: Router v2 0xabc200c88eb93f5127e973835d36a1366dcc1ec20.009037457306008786 BNB
0x5bad6ec8f278d40b7d642dae139702c719d39955dae0d0bfcb5b2f77f599584d132242622021-12-05 19:51:451 day 40 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.001912134177568852 BNB
0x5bad6ec8f278d40b7d642dae139702c719d39955dae0d0bfcb5b2f77f599584d132242622021-12-05 19:51:451 day 40 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.001912134177568852 BNB
0x5bad6ec8f278d40b7d642dae139702c719d39955dae0d0bfcb5b2f77f599584d132242622021-12-05 19:51:451 day 40 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.001912134177568852 BNB
0x5bad6ec8f278d40b7d642dae139702c719d39955dae0d0bfcb5b2f77f599584d132242622021-12-05 19:51:451 day 40 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec20xb7f7e7a16ea264037825d8e80aa213567a5111120.002343502300063091 BNB
0x5bad6ec8f278d40b7d642dae139702c719d39955dae0d0bfcb5b2f77f599584d132242622021-12-05 19:51:451 day 40 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 0xcd2387dc9e9173ffd24565cd1d0929ac0a07cedf0.002343502300063091 BNB
0x5bad6ec8f278d40b7d642dae139702c719d39955dae0d0bfcb5b2f77f599584d132242622021-12-05 19:51:451 day 40 mins ago PancakeSwap: Router v2 0xabc200c88eb93f5127e973835d36a1366dcc1ec20.009374009200252367 BNB
0xbcb45960fc558a9a3f6ef5436d463df6c1c83d8e2ca8590b7a45d7f8a37795dc132241362021-12-05 19:45:271 day 46 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.001922952712956278 BNB
0xbcb45960fc558a9a3f6ef5436d463df6c1c83d8e2ca8590b7a45d7f8a37795dc132241362021-12-05 19:45:271 day 46 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.001922952712956278 BNB
0xbcb45960fc558a9a3f6ef5436d463df6c1c83d8e2ca8590b7a45d7f8a37795dc132241362021-12-05 19:45:271 day 46 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.001922952712956278 BNB
0xbcb45960fc558a9a3f6ef5436d463df6c1c83d8e2ca8590b7a45d7f8a37795dc132241362021-12-05 19:45:271 day 46 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec20xb7f7e7a16ea264037825d8e80aa213567a5111120.002431271262926832 BNB
0xbcb45960fc558a9a3f6ef5436d463df6c1c83d8e2ca8590b7a45d7f8a37795dc132241362021-12-05 19:45:271 day 46 mins ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 0xcd2387dc9e9173ffd24565cd1d0929ac0a07cedf0.002431271262926832 BNB
0xbcb45960fc558a9a3f6ef5436d463df6c1c83d8e2ca8590b7a45d7f8a37795dc132241362021-12-05 19:45:271 day 46 mins ago PancakeSwap: Router v2 0xabc200c88eb93f5127e973835d36a1366dcc1ec20.009725085051707329 BNB
0xe6d7133643e2eacf54fb52d91f2d3cbe17354f0c80e89f7eb15c2bb0c6687835131744632021-12-04 1:33:032 days 18 hrs ago 0xabc200c88eb93f5127e973835d36a1366dcc1ec2 PancakeSwap: Router v20.001923049963806795 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MuskyUP

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-07-22
*/

//SPDX-License-Identifier: MIT

/**
::::::::::::::::::ccccccccccccccccccccclllllllllllllllllllllllllllllllllooooooooooooooooooooooooooooollllllooooooooooooooooooooooollllllllllcccccccccccccccccc::
:::::::::::::::ccccccccccccccccccllllllllllllllllllllllllllllllllllloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooollllllllllllcccccccccccccccc
:::::::::::cccccccccccccccccccccclllllllllllllllllllllllllooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooollllllllllccccccccccccccc
:::cccccccccccccccccccccccccccclllllllllllllllllllllooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooodoooolllllllllllccccccccccc
ccccccccccccccccccccccccccclllllllllllllllllooooooooooooooooooooooooooooooooooooooddddoooddddddddddddooooooooooooooooooooooddoooooooooodooooolllllllllcccccccccc
cccccccccccccccccccccccclllllllllllllllllooooooooooooooooooooooooooooooooooooddddddddddddddddddddddddddddddddooooooooooooooooodddoooooooooooooollllllllccccccccc
ccccccccccccccccccccclllllllllllllllllllloooooooooooooooooodddddddddddddddddddddddddddddddddddddddddddddddddddddddoooooooooooooddddoooooooooodoooolllllllccccccc
ccccccccccccccclllllllllllllllllllllllllooooooooooddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoooooooooddddddooooooooooooollllllllcccc
llllllllllllllllllllllllllllllllllllloooooooooooodddddddddddddddddddddddddddddddddddddddddxxxxxxxddddddddddddddddddddddddddoooooooooddddddooooooooooooollllllccc
llllllllllllllllllllllllllllllllllooooooooooooodddddddddddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdddddddddddddddddoooooooodddddddoooooooooooolllllcc
llllllllllllllllllllllllllllooooooooooooooooooddddddddddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddooooooooddddddoooooooooooolllll
lllloooooooooooooooooooooooooooooooooooooooddddddddddddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddoooooooodooooooooooooooooll
ooloooooooooooooooooooooooooooooooooooodddddddddddddxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddoooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooodddddddddddddddddddxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxdddddddoooooollccclooooooooooooooo
ooooooooooooooooooooooooddddddddddddddddddddddddxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxdddddoollclol,'';clooooooooooooo
oooooooooooooddddddddddddddddddddddddddddddddxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxkkkkkkxxxxxxxxxxxdddddoolodkOKXd''',clloooooooooooo
oooooooooooddddddddddddddddddddddddddddxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOkkkkkkxxxxdoddxxkkkkkkxxxxxxxdoolccllxXWMMW0:''';llloooooooooooo
ooooooodddddddddddddddddddddddddddddxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOkkkkkxdodo;',:oxxkkkxxxxddollodd;'''cKMMMMWd''',cllooooooooooooo
ooooooodddddddddddddddddxxxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOkkxodxk0XO;'',lxxxxxxdolldxOKXWXl'''oNMMMMK:''';lloooooooooooooo
ooooooddddddddddddddddxxxxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkddOXWMMWO;'',lxddoodxo;dNWMMMMNo'',kWMMMWx,'',coooooooooooooooo
oooooodddddddddddddxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOO0000OOOOOkokWMMMMMk,'',codxOKNKc'lXMMMMMWx'.cKMMMMKc''';loooooooooooooool
oooooodddddddddddxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOO000000000000OOOkoOMMMMMWk,'',o0NWMMKl'';OMMMMMMk,'dNMMMWx,'',codddddooooooooool
oooooodddddddddddxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOO00000000000000000OOkoOMMMMMWx'''cKWMMMXl''''dWMMMMM0;,OWMMMXl''';lddddddddooooooooo
oooooddddddddddddxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOO00000000000000000000OOxd0MMMMMWd'':0WMMMXo''',;lKMMMMMK:cKMMMWk,'''codddddddddddoooooo
oooooddddddddddddxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOO000000000000000000000000OOxo0MMMMMNo';OWMMMXo''''cocOMMMMMXldWMMMXl''';lddddxddddddddooooo
ooooooddddddddddxxxxxxxxxxkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOO00000000000000000000000000OOOxdKMMMMMNo,xWMMMNo''''cddcdNMMMMNxOMMMWO;'''cdddxxxxdddddddddooo
ooooodddddddddddxxxxxxxxxxkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOO00000000000000000000000000OOOOkkkddXMMMMMXodNMMMNd,'''cxxkolKMMMMNKXMMMNo''',lddxxxxxxxddddddddoo
dddddddddddddddxxxxxxxxxxxkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOO0000000000000000000000OOkxddoolc:c:dNMMMMMXOXMMMWO;'''cxkkkxlkWMMMMWMMMM0;''':dxxxxxxxxxxxdddddddo
odddddddddddddddxxxxxxxxxxkkkkkkkkkkkkkOOOOOOOOOOOOOOOOO000000000000000000000000OOOxdxkO0KXXXOc''dNMMMMMWWMMMMWXo'',cxkkkkldNMMMMMMMMNd''',ldxxxxxxxxxxxxddddddd
dddddddddddddddxxxxxxxxxxxkkkkkkkkkkkkkOOOOOOOOOOOOOOOO0000000000000000000000OOkxxkOKNWMMMMMWMO,'dWMMMMMMMMMMMMMXl'',lkkkkol0MMMMMMMM0:''':dxxxxxxxxxxxxxxxddddd
ddddddddddddxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkxxxkOOOOO0000000000OOOOOOkkkOOkxkO0NWMMMMMMMMWM0;'kWMMMMMMMMMMMMMMKl'',lkkkxlkWMMMMMMWd''',lxxxxxxxxxxxxxxxxxdddd
ddddddddddxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkxdodoc,,:dkOOO0000000OOOOkxddl;;;ldkKNWWWNKkxKWMWXOdc',OMMMMMMMMMMMMMMMWKc'',lkkkloXMMMMMMK:''':dxxxxxxxxxxxxxxxxxdddd
ddddddddddxxxxxxxxxxxxxxxxkkkkkkkkkkkxdoodxkOK0c'''ckOOOOOOOOOOkxdxxk0Xx,'';kNMMWMXd,''oOxl;'''.;OMMMMMMMNKNMMMMMMMKc'',oxkdl0MMMMMWx,'',lxxkkkkkxxxxxxxxxxxdddd
ddddddddddxxxxxxxxxxxxxxxxxxxxxxxkxdddxk0XWMMMKc.''ckkkOOOkxdodoxKNWMMWd'';kWMMMMWk,'''',''''';cl0MMMMMWXo:kWMMMMMMW0c'',oxxoOWMMMMKc''':dkkkkkkkkkxxxxxxddddddd
ddddddddddxxxxxxxxxxxxxxxxxxxdddxxxokNWMMMMMMMK:'''cxxxddxxc'',c0MMMMMNd''dNMMMMMWKdodxOOOxl,';coKMMMMMNo'':0WMMMMMMW0:'';loxXMMMMNd''',lkkkkkkkkkkkxxxxxxdddddd
dddddddddddxxxxxxxxxxxxxdolol;,;cdodKMMMMMMMMM0:''':dxkOKNNo'''cKMMMMMNo.;OMMMMMMMMMMMMMMMMNx,''cKMMMMMKc'''cKWMMMMMMW0:,:oONWMMMNd,'''cxkkkOOkkkkkkkxxxxxxddddd
odddddddddddxxxxxdddollodkOKk;'',llxNMMMMMMMMM0;''':0WMMMMXl'''cKMMMMMXl.;0MMMMMMMMMMMMMMMMMKc''lXMMMMMKc.'',oXMMMMWNKxlxXWMMMMWXo,''':dkkkOOOOkkkkkkkxxxxxxxddd
oodddddddddddddddoodxOKNWMMWKc'',:lOMMWWMMMMMMO;.''cXMMMMMXl''.lXMMMMMXc.,dNMMMMMMMMMMMMMMMMNd''oNMMMMMK:.',::oKKOxo:,';OMMMMWXk:''',cxkkOOOOOOOkkkkkkkxxxxxxxdd
ooddddddddddddddlxXWMMMMMMMMNo''';oXMMNXNMMMMMO,'''oNMMMMMKc'''lXMMMMMK:.',oO0OOOkkkk0NMMMMMNo''dNMWWNXk:,,;;;;::;,,,,,:kNWX0d:'''';oxkOOOOOOOOOkkkkkkkkkxxxxxxd
oodddddddddddddolOMMMMMMMMMMWx''',xWMMKONMMMMMk,'''oNMMMMMK:.''oNMMMMM0:''',,'',,'''.;0MMMMWO;.'xNN0xo:;;;;;;;;;;;;;;;;;:loc,''',:lxkkOOOOOOOOOOOkkkkkkkkkxxxxxx
oooddddddddddddol0MMMMMMMMMMMO,'';OMMWOkNMMMMMk,'''dWMMMMM0:.''dNMMMMMO;'',clokdc,'',xNMMWNO:'',oxl;;;;;;;;;;;;;;;;;;;;;;;;;;,,coxkkkOOOOOOOOOOOOOkkkkkkkkkxxxxx
oooodddddddddddll0MMMMMWWMMMM0:''lXMMNdxWMMMMWx,'''xWMMMMM0:'',dWMMMMMk;:dOKNWMKxlco0WWWW0o,''',;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:oxkkOOOOOOOOOOOOOOkkkkkkkkkkkxxx
oooodddddddddddloKMMMMWKXMMMMXc.,xWMM0cxWMMMMWd''',kMMMMMM0;'',xWMMMMMk;kWMMMMMWWWNWWWNOo;''',;;;;;;;;;;;;;;;;;;;;;:clllloxkOkxc;cdkkOOOOOOOOOOOOOkkkkkkkkkkkxxx
oooooddddddddddldXMMMMWkOMMMMNd';0MMWx;kMMMMMNo''';OMMMMMMO;'';OMMMMMWx;kWMMMMMMMMWN0dc,'''',;;;;;;;;;;;;:cloooc;:kKXNNXXXWWWWWKl;:oxkOOOOOOOOOOOkkkkkkkkkkkkxxx
oooooodddddddddldNMMMMWxxWMMMWx,lXMMXl,kMMMMMNo''';OMMMMMMO,''oXMMMMMNd'lKWMMWNK0ko:,''',;:;;;;;:clodo:;:xXNWWKl,oXWWWW0olkWMWWNd;;;lxkkOOOOOOOOkkkkkkkkkkkkkxxx
oooooodddddddoocxNMMMMNolXMMMMO:xWMM0;;OMMMMMXl''':0MMMMMWk,'lKMMMMMMNo'';lool:,,'''',:lddc;;;;cONWWW0c,lKWWMWO:;kWMWWXo;:kWMWWXl,;;;okkkOOOOOOOkkkkkkkkkkkkkkxx
oooooooddddddoocxWMMMMNl:KMMMM0o0MMWx';0MMMMMXl'''cKMMMMMMKxkNMMMMMMWXl''',,,',,;;:loxkOkl;;;;;dXWMMWk:;dNMMMNx;c0WMMM0c,c0WMWWO:;;;;:dkkkOOOOOkkkkkkkkkkkkkkxxx
oooodddddddddoockWMMMMXl,OMMMMX0XMMXc.:0MMMMMKc'''lXMMMMMMMMMNKXWXOxo:,'''cxxdxxkkO000OOx:;;;;:kWMMMXo;:OWMWWKl,dXMMMWk:;dXWWMNx;;;;;;lxkkkOOOOkkkkkkkkkkkkkxxxx
ooooodddddddoollOMMMMMXc'xWMMMWWWMWO;.:KMMMMMKc'''lXMMMMMMWXOc:ll;,'''',:lxOO0000000000Od;;;;;lKWWMW0c,lKWMMW0::kWMWWXo;:kWWMWXo;;;;;;cxkkkkOOkkkkkkkkkkkkxxxxxx
ooooooddddddooll0MMMMMKc.oNMMMMMMMNd'.cKMMMMM0:''':0WWWNKkd:'''''',;cldxkO00000000KK000Oo;;;;;dNWMMWk:;dNMMMNx;lKWWWW0c,c0WMMW0c;;;;;;cdkkkkkkkkkkkkkkkkkkxxxxxx
loooooooodddooll0MMMMMK:.cKMMMMMMMK:''cXMMMMM0;''',:cllc;'''',:loodkOOO0000000000000000Od;;;;:OWMMWNd;:OWMMMXo;xNWWWNx;;dXMMMNx;;;;;;;cxkkkkkkkkkkkkkkkkkkxxxxxx
llloooooooooooloKMMMMM0:.;OMMMMMMWk,''lXMMMMMO;'',cl;,,,,;:codkOOOOO0000000000000K00000Ox:;;;lKWMMWKl,lKWMMW0c:OWWMMNkokXWMWNkc;;;;;;;lxkkkkkkkkkkkkkkkkkxxxxxxx
llllooooooooooloXMMMMMO;.,xWMMMMMNo'''oXWWX0xc''',lxxddddxkkOOOOOO000000000000000000000Okl;;;xNWWMWO:;xNWWWWk;lXWMMMWWWWWWN0d:;;;;;;;:oxkkkkkkkkkkkkkkkkxxxxxxxx
lllloooooooooocdNMMMMMk,''oNMMMMM0:'''cxdl;''''',cdkkkkkkkOOOOOO00000000000000000000000OOxc,:OWWMMWKxkXWWWWNo;xWMMMWXK0Okdl:;;;;;;;;;lxxkkkkkkkkkkkkkkxxxxxxxxxx
lllllllooooooocxNMMMMMk,''cKMMMWNx,''''''''',:cldxkkkOOOOOOOOOOO000000000000000000000000OOd:;dXWMMMWWNXNNXKkcc0WMWWKl:;;;;;;;;;;;;;;cdxkkkkkkkkkkkkkxxxxxxxxxxxx
lllllllooooollcxWMMMMWx,'';OX0kdc,''';c:::cloddoldkkkOOOOOOOOOOOOO0000000000000000000000OOkd::okO00Okocllc:;;oXWWWWk:;;;;;;;;;;;;;;ldxkkkkkkkkkkkkxxxxxxxxxxxxxx
llllllllloolllckWMMMMWd''',::,'''',,:loodoooc:c:;okkkkOOOOOOOOOOOOOOOOO00000000000000000OOOkxc;;;;;;;;;;;;;;:kWWWWNd;;;;;;;;;;;;;:lxxkkkkkkkkkkkkxxxxxxxxxxxxxxx
lllllllllllllccOMMWX0x:''',,,,,;:cloolllc::::;cc:oxkkkkOOOOOOOOOOOOOOOOO000000000000000000OOOkoc;;;;;;;;;;;;cOKK0Oxc;;;;;;;;;;;:ldxkkkkkkkkkkxxxxxxxxxxxxxxxxxxd
cclllllllllllccxkdl;,'''',:lllloooooc;;;;:;::;llldxkkkkkOOOOOOOOOOOOOOOOOOOOO00000O00000O0OOOOkxoc:;;;;;;;;;;:::;;;;;;;;;;;;;:ldxkkkkkkkkkkkkxxxxxxxxxxxxxxxxddd
cllllllllllllc;,''''',;::loooooollolc:::;;:cccodxxxkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOO00OOOOOOkkdoc:;;;;;;;;;;;;;;;;;;;;:loxxkkkkkkkkkkkkkkxxxxxxxxxxxxxdddddd
ccclllllllllllc;;;;::clllllllcc:;;co:;:lcloddxxxxxkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkxdolc:::;;;;;;:::clodxkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxdddddd
ccccclllllllllllllllllc:::;;;;:;,:loccodddxxxxxxxxxxxkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkxxdddddddxxxxkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxddddddddddd
ccccccllllllllllllll:::;;;,,,;:ccloddddddxxxxxxxxxxxxkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxddddddddddd
cccccccccllllllllllc;,;;;::cccloooddddddxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkOkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxddddddddddd
cccccccccllllllllllc:;:ccllloooooodddddddxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkOOOOOkkOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxdddddddddo
ccccccccccccclllllllclllllloooooooodddddddddxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxddddddddoo
ccccccccccccccllllllllllloooooooooooddddddddddxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxdddddddddddo
::cccccccccccccclllllllllllooooooooooooddddddddddxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxdxddddddddddddo
:::ccccccccccccccclllllllllllooooooooooooddddddddddddxxxxxxxxxxxxxxxxxxxxxxxxxkkxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxdddddddddddddddo
:::::ccccccccccccccclllllllllllloooooooooooooddddddddddddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkxxxxkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddddddddoo
:::::::cccccccccccccccclllllllllllloooooooooooooddddddddddddddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddddddddddoooo
::::::::cccccccccccccccclllllllllllllooooooooooooooooddddddddddddxxxxxxxdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddddddddddoooooooo
:::::::::::ccccccccccccccccllllllllllllllooooooooooooooooodddddddddddxxdddddddddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdddddddddddddddddddddooooooooooo
c:::::::::::cccccccccccccccccllllllllllllllooooooooooooooooooddddddddddddddddddddddddddddddxxxxxxxxxxxxxxxxxxxxddddxxxxxxxdddddddddddddddddddddddooooooooooooooo
cccccc::::::::cccccccccccccccccccclllllllllllllloooooooooooooooooddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddooooooooooooooooooo
::cccccc:::::::::ccccccccccccccccccclllllllllllllllooooooooooooooooooooddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddooooooooooooooooooooool
:::::cccccc::::::::::cccccccccccccccccccllllllllllllllloooooooooooooooooooooodddddddddddooooddddddddddddddddddddddddddddddddddddddddddoooooooooooooooooooollllll
:::::::cccccc::::::::::ccccccccccccccccccllllllllllllllllllllllllllooooooooooooooooodddoooooooooooooooooooooooddddddoooooooooooooooooooooooooooooooooollllllllll
:;::::::::cccccc::::::::::cccccccccccccccccccccclllllllllllllllllllllllllloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooollllllllllllll
;;;:::::::::cccccc:::::::::ccccccccccccccccccccccclllllllllllllllllllllllllllooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooollllllllllllll

Telegram: https://t.me/MuskyUpFinance

Website: https://www.muskyup.finance/

Since 2021, Hold Musky UP Earn BUSD
*/

pragma solidity ^0.8.6;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * BEP20 standard interface.
 */
interface IBEP20 {
    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    function getOwner() external view returns (address);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address _owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function getAmountsOut(uint256 amountIn, address[] memory path)
        external
        view
        returns (uint256[] memory amounts);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

enum Permission {
    ChangeFees,
    Buyback,
    AdjustContractVariables,
    Authorize,
    Unauthorize,
    PauseUnpauseContract,
    BypassPause,
    LockPermissions,
    ExcludeInclude,
    Blacklist
}

/**
 * Allows for contract ownership along with multi-address authorization for different permissions
 */
abstract contract RSunAuth {
    struct PermissionLock {
        bool isLocked;
        uint64 expiryTime;
    }

    address public owner;
    mapping(address => mapping(uint256 => bool)) private authorizations; // uint256 is permission index

    uint256 constant NUM_PERMISSIONS = 10; // always has to be adjusted when Permission element is added or removed
    mapping(string => uint256) permissionNameToIndex;
    mapping(uint256 => string) permissionIndexToName;

    mapping(uint256 => PermissionLock) lockedPermissions;

    constructor(address owner_) {
        owner = owner_;
        for (uint256 i; i < NUM_PERMISSIONS; i++) {
            authorizations[owner_][i] = true;
        }

        permissionNameToIndex["ChangeFees"] = uint256(Permission.ChangeFees);
        permissionNameToIndex["Buyback"] = uint256(Permission.Buyback);
        permissionNameToIndex["AdjustContractVariables"] = uint256(
            Permission.AdjustContractVariables
        );
        permissionNameToIndex["Authorize"] = uint256(Permission.Authorize);
        permissionNameToIndex["Unauthorize"] = uint256(Permission.Unauthorize);
        permissionNameToIndex["PauseUnpauseContract"] = uint256(
            Permission.PauseUnpauseContract
        );
        permissionNameToIndex["BypassPause"] = uint256(Permission.BypassPause);
        permissionNameToIndex["LockPermissions"] = uint256(
            Permission.LockPermissions
        );
        permissionNameToIndex["ExcludeInclude"] = uint256(
            Permission.ExcludeInclude
        );
        permissionNameToIndex["Blacklist"] = uint256(Permission.Blacklist);

        permissionIndexToName[uint256(Permission.ChangeFees)] = "ChangeFees";
        permissionIndexToName[uint256(Permission.Buyback)] = "Buyback";
        permissionIndexToName[
            uint256(Permission.AdjustContractVariables)
        ] = "AdjustContractVariables";
        permissionIndexToName[uint256(Permission.Authorize)] = "Authorize";
        permissionIndexToName[uint256(Permission.Unauthorize)] = "Unauthorize";
        permissionIndexToName[
            uint256(Permission.PauseUnpauseContract)
        ] = "PauseUnpauseContract";
        permissionIndexToName[uint256(Permission.BypassPause)] = "BypassPause";
        permissionIndexToName[
            uint256(Permission.LockPermissions)
        ] = "LockPermissions";
        permissionIndexToName[
            uint256(Permission.ExcludeInclude)
        ] = "ExcludeInclude";
        permissionIndexToName[uint256(Permission.Blacklist)] = "Blacklist";
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownership required.");
        _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorizedFor(Permission permission) {
        require(
            !lockedPermissions[uint256(permission)].isLocked,
            "Permission is locked."
        );
        require(
            isAuthorizedFor(msg.sender, permission),
            string(
                abi.encodePacked(
                    "Not authorized. You need the permission ",
                    permissionIndexToName[uint256(permission)]
                )
            )
        );
        _;
    }

    /**
     * Authorize address for one permission
     */
    function authorizeFor(address adr, string memory permissionName)
        public
        authorizedFor(Permission.Authorize)
    {
        uint256 permIndex = permissionNameToIndex[permissionName];
        authorizations[adr][permIndex] = true;
        emit AuthorizedFor(adr, permissionName, permIndex);
    }

    /**
     * Authorize address for multiple permissions
     */
    function authorizeForMultiplePermissions(
        address adr,
        string[] calldata permissionNames
    ) public authorizedFor(Permission.Authorize) {
        for (uint256 i; i < permissionNames.length; i++) {
            uint256 permIndex = permissionNameToIndex[permissionNames[i]];
            authorizations[adr][permIndex] = true;
            emit AuthorizedFor(adr, permissionNames[i], permIndex);
        }
    }

    /**
     * Remove address' authorization
     */
    function unauthorizeFor(address adr, string memory permissionName)
        public
        authorizedFor(Permission.Unauthorize)
    {
        require(adr != owner, "Can't unauthorize owner");

        uint256 permIndex = permissionNameToIndex[permissionName];
        authorizations[adr][permIndex] = false;
        emit UnauthorizedFor(adr, permissionName, permIndex);
    }

    /**
     * Unauthorize address for multiple permissions
     */
    function unauthorizeForMultiplePermissions(
        address adr,
        string[] calldata permissionNames
    ) public authorizedFor(Permission.Unauthorize) {
        require(adr != owner, "Can't unauthorize owner");

        for (uint256 i; i < permissionNames.length; i++) {
            uint256 permIndex = permissionNameToIndex[permissionNames[i]];
            authorizations[adr][permIndex] = false;
            emit UnauthorizedFor(adr, permissionNames[i], permIndex);
        }
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorizedFor(address adr, string memory permissionName)
        public
        view
        returns (bool)
    {
        return authorizations[adr][permissionNameToIndex[permissionName]];
    }

    /**
     * Return address' authorization status
     */
    function isAuthorizedFor(address adr, Permission permission)
        public
        view
        returns (bool)
    {
        return authorizations[adr][uint256(permission)];
    }

    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public onlyOwner {
        address oldOwner = owner;
        owner = adr;
        for (uint256 i; i < NUM_PERMISSIONS; i++) {
            authorizations[oldOwner][i] = false;
            authorizations[owner][i] = true;
        }
        emit OwnershipTransferred(oldOwner, owner);
    }

    /**
     * Get the index of the permission by its name
     */
    function getPermissionNameToIndex(string memory permissionName)
        public
        view
        returns (uint256)
    {
        return permissionNameToIndex[permissionName];
    }

    /**
     * Get the time the timelock expires
     */
    function getPermissionUnlockTime(string memory permissionName)
        public
        view
        returns (uint256)
    {
        return
            lockedPermissions[permissionNameToIndex[permissionName]].expiryTime;
    }

    /**
     * Check if the permission is locked
     */
    function isLocked(string memory permissionName) public view returns (bool) {
        return
            lockedPermissions[permissionNameToIndex[permissionName]].isLocked;
    }

    /*
     *Locks the permission from being used for the amount of time provided
     */
    function lockPermission(string memory permissionName, uint64 time)
        public
        virtual
        authorizedFor(Permission.LockPermissions)
    {
        uint256 permIndex = permissionNameToIndex[permissionName];
        uint64 expiryTime = uint64(block.timestamp) + time;
        lockedPermissions[permIndex] = PermissionLock(true, expiryTime);
        emit PermissionLocked(permissionName, permIndex, expiryTime);
    }

    /*
     * Unlocks the permission if the lock has expired
     */
    function unlockPermission(string memory permissionName) public virtual {
        require(
            block.timestamp > getPermissionUnlockTime(permissionName),
            "Permission is locked until the expiry time."
        );
        uint256 permIndex = permissionNameToIndex[permissionName];
        lockedPermissions[permIndex].isLocked = false;
        emit PermissionUnlocked(permissionName, permIndex);
    }

    event PermissionLocked(
        string permissionName,
        uint256 permissionIndex,
        uint64 expiryTime
    );
    event PermissionUnlocked(string permissionName, uint256 permissionIndex);
    event OwnershipTransferred(address from, address to);
    event AuthorizedFor(
        address adr,
        string permissionName,
        uint256 permissionIndex
    );
    event UnauthorizedFor(
        address adr,
        string permissionName,
        uint256 permissionIndex
    );
}

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;

    function claimDividend() external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    /* TESTNET ADDRESSES */
    // address BUSD_TOKEN_ADDR = 0x78867BbEeF44f2326bF8DDd1941a4439382EF2A7;
    // address PANCAKE_ROUTER_ADDR = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;

    /* MAINNET ADDRESSES */
    address BUSD_TOKEN_ADDR = 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56;
    address PANCAKE_ROUTER_ADDR = 0x10ED43C718714eb63d5aA57B78B54704E256024E;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IBEP20 BUSD = IBEP20(BUSD_TOKEN_ADDR);

    IDEXRouter router;

    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;

    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10**36;

    uint256 public minPeriod = 1 hours; // min 1 hour delay
    uint256 public minDistribution = 1 * (10**18); // 1 BUSD minimum auto send

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token);
        _;
    }

    constructor(address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(PANCAKE_ROUTER_ADDR);
        _token = msg.sender;
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = BUSD.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(BUSD);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: msg.value
        }(0, path, address(this), block.timestamp);

        uint256 amount = BUSD.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)
        );
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            BUSD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
            .totalRealised
            .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function getTotalRealisedDividends(address shareholder)
        external
        view
        returns (uint256 totalRealised)
    {
        return shares[shareholder].totalRealised;
    }

    function claimDividend() external override {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract MuskyUP is IBEP20, RSunAuth {
    using SafeMath for uint256;

    /* MAINNET ADDRESSES */
    address BUSD_TOKEN_ADDR = 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56;
    address PANCAKE_ROUTER_ADDR = 0x10ED43C718714eb63d5aA57B78B54704E256024E;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "MuskyUP";
    string constant _symbol = "$MSKY";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1 * 10**9 * (10**_decimals); // 1 billion
    uint256 public _maxSellTxAmount = _totalSupply / 1000; // 0.1%

    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) _allowances;

    mapping(address => bool) isFeeExempt;
    mapping(address => bool) isTxLimitExempt;
    mapping(address => bool) isDividendExempt;
    mapping(address => bool) isBlacklisted;

    uint256 liquidityFee = 300;
    uint256 buybackFee = 600;
    uint256 reflectionFee = 300;
    uint256 marketingFee = 300;
    uint256 additionalSellFee = 1700;
    
    
    uint256 totalBuyFee = 1500;
    uint256 totalSellFee = 3200;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address pancakeV2BNBPair;
    address[] public pairs;

    uint256 public launchedAt;

    /* AUTO BUYBACK SETTINGS */
    bool public autoBuybackEnabled = true;
    uint256 buybackPercentOfBalance = 4; // Percent of BNB holding in wallet to buyback (each)
    uint256 buybackNumOfBuybacks = 3; // Number of consecutive buybacks to trigger
    uint256 buybackThreshold = 100000000000000000000; // 100BNB
    uint256 buybackTokenSellThreshold = 400000 * (10**_decimals); // 400K Tokens

    bool public feesOnNormalTransfers = false;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 5000; // 0.02%
    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() RSunAuth(msg.sender) {
        router = IDEXRouter(PANCAKE_ROUTER_ADDR);
        pancakeV2BNBPair = IDEXFactory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );
        _allowances[address(this)][address(router)] = ~uint256(0);

        pairs.push(pancakeV2BNBPair);
        distributor = new DividendDistributor(address(router));

        address owner_ = msg.sender;

        isFeeExempt[owner_] = true;
        isTxLimitExempt[owner_] = true;
        isDividendExempt[pancakeV2BNBPair] = true;
        isDividendExempt[address(this)] = true;
        isFeeExempt[address(this)] = true;
        isTxLimitExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = owner_;
        marketingFeeReceiver = owner_;

        _balances[owner_] = _totalSupply;
        emit Transfer(address(0), owner_, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function name() external pure override returns (string memory) {
        return _name;
    }

    function getOwner() external view override returns (address) {
        return owner;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function allowance(address holder, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[holder][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, ~uint256(0));
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != ~uint256(0)) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
            .sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(!isBlacklisted[sender], "Address is blacklisted");

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }
        bool isSellTx = isSell(recipient);
        // Max TX applies to sell
        if (isSellTx) {
            checkSellTxLimit(sender, amount);
        }

        // Should convert taxed tokens into BNB?
        if (shouldSwapBack()) {
            swapBack(isSellTx && shouldBuyBack(amount));
        }

        if (!launched() && recipient == pancakeV2BNBPair) {
            require(_balances[sender] > 0);
            launch();
        }

        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );

        uint256 amountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        if (!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }
        if (!isDividendExempt[recipient]) {
            try
                distributor.setShare(recipient, _balances[recipient])
            {} catch {}
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkSellTxLimit(address sender, uint256 amount) internal view {
        require(
            amount <= _maxSellTxAmount || isTxLimitExempt[sender],
            "TX Limit Exceeded"
        );
    }

    function shouldTakeFee(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        if (isFeeExempt[sender] || isFeeExempt[recipient] || !launched())
            return false;

        address[] memory liqPairs = pairs;

        for (uint256 i = 0; i < liqPairs.length; i++) {
            if (sender == liqPairs[i] || recipient == liqPairs[i]) return true;
        }

        return feesOnNormalTransfers;
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        return selling ? totalSellFee : totalBuyFee;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee(isSell(recipient))).div(
            feeDenominator
        );

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function isSell(address recipient) internal view returns (bool) {
        address[] memory liqPairs = pairs;
        for (uint256 i = 0; i < liqPairs.length; i++) {
            if (recipient == liqPairs[i]) return true;
        }
        return false;
    }

    function shouldBuyBack(uint256 amountTokensSold)
        internal
        view
        returns (bool)
    {
        return
            autoBuybackEnabled &&
            address(this).balance > buybackThreshold &&
            address(this).balance >
            (
                (address(this).balance.div(100).mul(buybackPercentOfBalance))
                .mul(buybackNumOfBuybacks)
            ) &&
            amountTokensSold >= buybackTokenSellThreshold;
    }

    function shouldSwapBack() internal view returns (bool) {
        return
            msg.sender != pancakeV2BNBPair &&
            !inSwap &&
            swapEnabled &&
            _balances[address(this)] >= swapThreshold;
    }

    function swapBack(bool shouldBuyback) internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(
            targetLiquidity,
            targetLiquidityDenominator
        )
            ? 0
            : liquidityFee;
        uint256 amountToLiquify = swapThreshold
        .mul(dynamicLiquidityFee)
        .div(totalBuyFee)
        .div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        uint256 balanceBefore = address(this).balance;

        try
            router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                amountToSwap,
                0,
                path,
                address(this),
                block.timestamp
            )
        {
            uint256 amountBNB = address(this).balance.sub(balanceBefore);

            uint256 totalBNBFee = totalBuyFee.sub(dynamicLiquidityFee.div(2));

            uint256 amountBNBLiquidity = amountBNB
            .mul(dynamicLiquidityFee)
            .div(totalBNBFee)
            .div(2);
            uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(
                totalBNBFee
            );
            uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(
                totalBNBFee
            );

            try distributor.deposit{value: amountBNBReflection}() {} catch {}
            (
                bool sendMarketingSendFeeSuccess,
                bytes memory marketingSendFeeData
            ) = payable(marketingFeeReceiver).call{
                value: amountBNBMarketing,
                gas: 30000
            }("");

            if (sendMarketingSendFeeSuccess) {
                emit SendMarketingFeeSuccess(
                    amountBNBMarketing,
                    marketingSendFeeData
                );
            } else {
                emit SendMarketingFeeFailure(
                    amountBNBMarketing,
                    marketingSendFeeData
                );
            }

            if (amountToLiquify > 0) {
                try
                    router.addLiquidityETH{value: amountBNBLiquidity}(
                        address(this),
                        amountToLiquify,
                        0,
                        0,
                        autoLiquidityReceiver,
                        block.timestamp
                    )
                {
                    emit AutoLiquify(amountToLiquify, amountBNBLiquidity);
                } catch {
                    emit AutoLiquify(0, 0);
                }
            }

            emit SwapBackSuccess(amountToSwap);
        } catch Error(string memory e) {
            emit SwapBackFailed(
                string(abi.encodePacked("SwapBack failed with error ", e))
            );
        } catch {
            emit SwapBackFailed(
                "SwapBack failed without an error message from pancakeSwap"
            );
        }

        if (shouldBuyback) {
            uint256 currentBalance = address(this).balance;
            uint256 amounBNBToBuyEach = currentBalance
            .mul(buybackPercentOfBalance)
            .div(100);
            address[] memory buypath = new address[](2);
            buypath[0] = router.WETH();
            buypath[1] = address(this);
            for (
                uint256 buyAttempt = 0;
                buyAttempt < buybackNumOfBuybacks;
                buyAttempt++
            ) {
                try
                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{
                        value: amounBNBToBuyEach
                    }(0, buypath, address(DEAD), block.timestamp)
                {
                    emit BoughtBackSuccess(amounBNBToBuyEach);
                } catch Error(string memory e) {
                    emit BoughtBackFailed(
                        string(
                            abi.encodePacked("SwapBack failed with error ", e)
                        )
                    );
                } catch {
                    emit BoughtBackFailed(
                        "Auto Buyback failed without an error message from pancakeSwap"
                    );
                }
            }
        }
    }

    function triggerBuyback(uint256 amount)
        external
        authorizedFor(Permission.Buyback)
    {
        buyTokens(amount, DEAD);
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);

        try
            router.swapExactETHForTokensSupportingFeeOnTransferTokens{
                value: amount
            }(0, path, to, block.timestamp)
        {
            emit BoughtBackSuccess(amount);
        } catch Error(string memory e) {
            emit BoughtBackFailed(
                string(abi.encodePacked("SwapBack failed with error ", e))
            );
        } catch {
            emit BoughtBackFailed(
                "Auto Buyback failed without an error message from pancakeSwap"
            );
        }
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        emit Launched(block.number, block.timestamp);
    }

    function setSellTxLimit(uint256 amount)
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        require(amount >= _totalSupply / 2000);
        _maxSellTxAmount = amount;
    }

    function setIsDividendExempt(address holder, bool exempt)
        external
        authorizedFor(Permission.ExcludeInclude)
    {
        require(holder != address(this) && holder != pancakeV2BNBPair);
        isDividendExempt[holder] = exempt;
        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt)
        external
        authorizedFor(Permission.ExcludeInclude)
    {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt)
        external
        authorizedFor(Permission.ExcludeInclude)
    {
        isTxLimitExempt[holder] = exempt;
    }

    function addPresaleAddress(address holder)
        external
        authorizedFor(Permission.ExcludeInclude)
    {
        isTxLimitExempt[holder] = true;
        isFeeExempt[holder] = true;
        isDividendExempt[holder] = true;
    }

    function removePresaleAddress(address holder)
        external
        authorizedFor(Permission.ExcludeInclude)
    {
        isTxLimitExempt[holder] = false;
        isFeeExempt[holder] = false;
        isDividendExempt[holder] = true;
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _buybackFee,
        uint256 _reflectionFee,
        uint256 _marketingFee,
        uint256 _extraSellFee,
        uint256 _feeDenominator
    ) external authorizedFor(Permission.AdjustContractVariables) {
        liquidityFee = _liquidityFee;
        buybackFee = _buybackFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalBuyFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(
            _marketingFee
        );
        feeDenominator = _feeDenominator;
        totalSellFee = _liquidityFee
        .add(_buybackFee)
        .add(_reflectionFee)
        .add(_marketingFee)
        .add(_extraSellFee);
        require(totalBuyFee <= feeDenominator / 10, "Buy fee too high");
        require(totalSellFee <= feeDenominator / 5, "Sell fee too high");
    }

    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _marketingFeeReceiver
    ) external authorizedFor(Permission.AdjustContractVariables) {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount)
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function enableAutoBuyback()
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        autoBuybackEnabled = true;
    }

    function disableAutoBuyback()
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        autoBuybackEnabled = false;
    }

    function setAutoBuybackSettings(
        bool _enabled,
        uint256 _percentOfBalance,
        uint256 _numOfBuybacks,
        uint256 _sellThresholdTokens,
        uint256 _threshold
    ) external authorizedFor(Permission.AdjustContractVariables) {
        autoBuybackEnabled = _enabled;
        buybackThreshold = _threshold;
        buybackPercentOfBalance = _percentOfBalance;
        buybackNumOfBuybacks = _numOfBuybacks;
        buybackTokenSellThreshold = _sellThresholdTokens;
        buybackThreshold = _threshold;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator)
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external authorizedFor(Permission.AdjustContractVariables) {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas)
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        require(gas <= 1000000);
        distributorGas = gas;
    }

    function setInSwap(bool _inSwap)
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        inSwap = _inSwap;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy)
        public
        view
        returns (uint256)
    {
        return
            accuracy.mul(balanceOf(pancakeV2BNBPair).mul(2)).div(
                getCirculatingSupply()
            );
    }

    function isOverLiquified(uint256 target, uint256 accuracy)
        public
        view
        returns (bool)
    {
        return getLiquidityBacking(accuracy) > target;
    }

    function claimDividend() external {
        distributor.claimDividend();
    }

    function addPair(address pair)
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        pairs.push(pair);
    }

    function removeLastPair()
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        pairs.pop();
    }

    function setFeesOnNormalTransfers(bool _enabled)
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        feesOnNormalTransfers = _enabled;
    }

    function setIsBlacklisted(address adr, bool blacklisted)
        external
        authorizedFor(Permission.Blacklist)
    {
        isBlacklisted[adr] = blacklisted;
    }

    function setLaunchedAt(uint256 launched_)
        external
        authorizedFor(Permission.AdjustContractVariables)
    {
        launchedAt = launched_;
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
    event BoughtBack(uint256 amount, address to);
    event Launched(uint256 blockNumber, uint256 timestamp);
    event SwapBackSuccess(uint256 amount);
    event SwapBackFailed(string message);
    event BoughtBackSuccess(uint256 amount);
    event BoughtBackFailed(string message);
    event SendMarketingFeeSuccess(uint256 amount, bytes data);
    event SendMarketingFeeFailure(uint256 amount, bytes data);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"AuthorizedFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"BoughtBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"BoughtBackFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BoughtBackSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Launched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"expiryTime","type":"uint64"}],"name":"PermissionLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"PermissionUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"SendMarketingFeeFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"SendMarketingFeeSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"SwapBackFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapBackSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"UnauthorizedFor","type":"event"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"addPresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"authorizeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string[]","name":"permissionNames","type":"string[]"}],"name":"authorizeForMultiplePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableAutoBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAutoBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"getPermissionNameToIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"getPermissionUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"enum Permission","name":"permission","type":"uint8"}],"name":"isAuthorizedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"isAuthorizedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"},{"internalType":"uint64","name":"time","type":"uint64"}],"name":"lockPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLastPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"removePresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_percentOfBalance","type":"uint256"},{"internalType":"uint256","name":"_numOfBuybacks","type":"uint256"},{"internalType":"uint256","name":"_sellThresholdTokens","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_extraSellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_inSwap","type":"bool"}],"name":"setInSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"setIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"launched_","type":"uint256"}],"name":"setLaunchedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSellTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"triggerBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"unauthorizeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string[]","name":"permissionNames","type":"string[]"}],"name":"unauthorizeForMultiplePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"unlockPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600580546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d56179091556006805482167310ed43c718714eb63d5aa57b78b54704e256024e17905560078054821661dead1790556008805490911690556200006e6009600a62000c3f565b6200007e90633b9aca0062000d00565b6009556103e860095462000093919062000bd3565b600a90815561012c6011819055610258601255601381905560149081556106a46015556105dc601655610c80601755612710601855601b556064601c556021805460ff191660011790556004602255600360235568056bc75e2d63100000602455620001029060099062000c3f565b620001119062061a8062000d00565b6025556026805460ff199081169091556207a12060275560288054909116600117905560095462000146906113889062000bd3565b6029553480156200015657600080fd5b50600080546001600160a01b031916339081178255905b600a811015620001bb576001600160a01b0382166000908152600160208181526040808420858552909152909120805460ff1916909117905580620001b28162000d5f565b9150506200016d565b506000604051694368616e67654665657360b01b8152600290600a01908152604051908190036020019020556001604051664275796261636b60c81b81526002906007019081526040519081900360200190205560026040517f41646a757374436f6e74726163745661726961626c6573000000000000000000815260029060170190815260405190819003602001902055600360405168417574686f72697a6560b81b81526002906009019081526040519081900360200190205560046040516a556e617574686f72697a6560a81b8152600290600b019081526040519081900360200190205560056040517f5061757365556e7061757365436f6e747261637400000000000000000000000081526002906014019081526040519081900360200190205560066040516a427970617373506175736560a81b8152600290600b019081526040519081900360200190205560076040516e4c6f636b5065726d697373696f6e7360881b8152600290600f019081526040519081900360200190205560086040516d4578636c756465496e636c75646560901b8152600290600e0190815260405190819003602001902055600960405168109b1858dadb1a5cdd60ba1b8152600290600901908152604080519182900360209081018320939093558181019052600a8152694368616e67654665657360b01b82820190815260008052600390925251620003f0917f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff9162000aed565b506040805180820190915260078152664275796261636b60c81b602080830191825260016000526003905290516200044a917fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c9162000aed565b5060408051808201909152601781527f41646a757374436f6e74726163745661726961626c657300000000000000000060208083019182526002600052600390529051620004ba917fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d9162000aed565b50604080518082019091526009815268417574686f72697a6560b81b6020808301918252600360008190529052905162000516917fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af9162000aed565b5060408051808201909152600b81526a556e617574686f72697a6560a81b6020808301918252600460005260039052905162000574917f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe937724659162000aed565b5060408051808201909152601481527f5061757365556e7061757365436f6e747261637400000000000000000000000060208083019182526005600052600390529051620005e4917f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422509162000aed565b5060408051808201909152600b81526a427970617373506175736560a81b6020808301918252600660005260039052905162000642917fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f39162000aed565b5060408051808201909152600f81526e4c6f636b5065726d697373696f6e7360881b60208083019182526007600052600390529051620006a4917ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd29162000aed565b5060408051808201909152600e81526d4578636c756465496e636c75646560901b6020808301918252600860005260039052905162000705917f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe9162000aed565b5060408051808201909152600980825268109b1858dadb1a5cdd60ba1b60208084019182526000929092526003909152905162000764917f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4589162000aed565b5050600654601d80546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620007be57600080fd5b505afa158015620007d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f9919062000ba1565b6001600160a01b031663c9c65396601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200085657600080fd5b505afa1580156200086b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000891919062000ba1565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620008d957600080fd5b505af1158015620008ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000914919062000ba1565b601e80546001600160a01b039283166001600160a01b0319918216178255306000908152600c60209081526040808320601d805488168552925280832060001990559354601f805460018101825593527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d807909201805490931691851691909117909155549051911690620009a89062000b7c565b6001600160a01b039091168152602001604051809103906000f080158015620009d5573d6000803e3d6000fd5b5060268054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600d60208181526040808420805460ff199081166001908117909255600e8085528387208054831684179055601e5489168752600f8086528488208054841685179055308852848820805484168517905595855283872080548316841790558452828620805482168317905560075490971685529282528084208054909616909217909455601980546001600160a01b03199081168517909155601a805490911684179055600954838352600b85528183208190559051908152919283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000d93565b82805462000afb9062000d22565b90600052602060002090601f01602090048101928262000b1f576000855562000b6a565b82601f1062000b3a57805160ff191683800117855562000b6a565b8280016001018555821562000b6a579182015b8281111562000b6a57825182559160200191906001019062000b4d565b5062000b7892915062000b8a565b5090565b6111178062005b7683390190565b5b8082111562000b78576000815560010162000b8b565b60006020828403121562000bb457600080fd5b81516001600160a01b038116811462000bcc57600080fd5b9392505050565b60008262000bf157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111562000c3757816000190482111562000c1b5762000c1b62000d7d565b8085161562000c2957918102915b93841c939080029062000bfb565b509250929050565b600062000bcc60ff84168360008262000c5b5750600162000cfa565b8162000c6a5750600062000cfa565b816001811462000c83576002811462000c8e5762000cae565b600191505062000cfa565b60ff84111562000ca25762000ca262000d7d565b50506001821b62000cfa565b5060208310610133831016604e8410600b841016171562000cd3575081810a62000cfa565b62000cdf838362000bf6565b806000190482111562000cf65762000cf662000d7d565b0290505b92915050565b600081600019048311821515161562000d1d5762000d1d62000d7d565b500290565b600181811c9082168062000d3757607f821691505b6020821081141562000d5957634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000d765762000d7662000d7d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b614dd38062000da36000396000f3fe6080604052600436106103b05760003560e01c8063893d20e8116101e7578063c2b7bbb61161010d578063e96fada2116100a0578063f3a54f2c1161006f578063f3a54f2c14610b2f578063f708a64f14610b4f578063f84ba65d14610b6f578063f887ea4014610b8f57600080fd5b8063e96fada214610aba578063f0fc6bca14610ada578063f1f3bca314610aef578063f2fde38b14610b0f57600080fd5b8063d51ed1c8116100dc578063d51ed1c814610a14578063dd62ed3e14610a34578063df20fd4914610a7a578063e75cae7914610a9a57600080fd5b8063c2b7bbb61461099e578063c41235a6146109be578063ca33e64c146109de578063cf4be394146109fe57600080fd5b8063a0e3849211610185578063af05cf9311610154578063af05cf9314610928578063b7b31c9c14610948578063b91ac78814610968578063bf56b3711461098857600080fd5b8063a0e38492146108a8578063a2964c76146108c8578063a4b45c00146108e8578063a9059cbb1461090857600080fd5b806395d89b41116101c157806395d89b4114610825578063971563fc146108535780639d1944f5146108735780639fca7e721461089357600080fd5b8063893d20e8146107be5780638da5cb5b146107f057806390bbb6221461081057600080fd5b80632d48e896116102d75780635abe67111161026a57806370a082311161023957806370a08231146107285780638032eccb1461075e5780638101cae31461077e57806386f6c3c11461079e57600080fd5b80635abe6711146106b4578063612e614c146106ce578063658d4b7f146106ee5780636ddd17131461070e57600080fd5b80633bb8a8d4116102a65780633bb8a8d41461063a5780633cd221a214610654578063571ac8b01461067457806357b785411461069457600080fd5b80632d48e896146105af5780632f54bf6e146105cf578063313ce567146105fe57806339e67c8a1461061a57600080fd5b80631161ae391161034f5780631e8f52831161031e5780631e8f52831461053a578063201e79911461055a57806323b872dd1461057a5780632b112e491461059a57600080fd5b80631161ae39146104c5578063174ca3ec146104e557806318160ddd146105055780631ad6084f1461051a57600080fd5b806306fdde031161038b57806306fdde031461041c57806307858b021461045557806308cad4e514610475578063095ea7b31461049557600080fd5b806293dc14146103bc5780630445b667146103d357806306fbdcd8146103fc57600080fd5b366103b757005b600080fd5b3480156103c857600080fd5b506103d1610baf565b005b3480156103df57600080fd5b506103e960295481565b6040519081526020015b60405180910390f35b34801561040857600080fd5b506103e96104173660046145b8565b610c96565b34801561042857600080fd5b5060408051808201909152600781526604d75736b7955560cc1b60208201525b6040516103f3919061496a565b34801561046157600080fd5b506103d16104703660046145b8565b610cbe565b34801561048157600080fd5b506103d161049036600461464f565b610da0565b3480156104a157600080fd5b506104b56104b0366004614513565b610e6a565b60405190151581526020016103f3565b3480156104d157600080fd5b506104b56104e0366004614668565b610ed7565b3480156104f157600080fd5b506103d1610500366004614576565b610eeb565b34801561051157600080fd5b506009546103e9565b34801561052657600080fd5b506103d16105353660046143d4565b610fba565b34801561054657600080fd5b506103d16105553660046144c3565b6111c0565b34801561056657600080fd5b506103d1610575366004614668565b61130c565b34801561058657600080fd5b506104b5610595366004614393565b6113c0565b3480156105a657600080fd5b506103e9611482565b3480156105bb57600080fd5b506103d16105ca366004614668565b6114d4565b3480156105db57600080fd5b506104b56105ea366004614320565b6000546001600160a01b0391821691161490565b34801561060a57600080fd5b50604051600981526020016103f3565b34801561062657600080fd5b506103d161063536600461464f565b6115eb565b34801561064657600080fd5b506021546104b59060ff1681565b34801561066057600080fd5b506103d161066f366004614320565b611699565b34801561068057600080fd5b506104b561068f366004614320565b61178d565b3480156106a057600080fd5b506104b56106af366004614491565b61179b565b3480156106c057600080fd5b506026546104b59060ff1681565b3480156106da57600080fd5b506103d16106e936600461464f565b6117e1565b3480156106fa57600080fd5b506103d161070936600461445c565b6118b6565b34801561071a57600080fd5b506028546104b59060ff1681565b34801561073457600080fd5b506103e9610743366004614320565b6001600160a01b03166000908152600b602052604090205490565b34801561076a57600080fd5b506104b56107793660046145b8565b61198a565b34801561078a57600080fd5b506103d16107993660046144c3565b6119c9565b3480156107aa57600080fd5b506103d16107b93660046146b8565b611b5a565b3480156107ca57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103f3565b3480156107fc57600080fd5b506000546107d8906001600160a01b031681565b34801561081c57600080fd5b506103d1611cf0565b34801561083157600080fd5b50604080518082019091526005815264244d534b5960d81b6020820152610448565b34801561085f57600080fd5b506103d161086e3660046145f5565b611da8565b34801561087f57600080fd5b506103d161088e36600461464f565b611f33565b34801561089f57600080fd5b506103d1611ff1565b3480156108b457600080fd5b506103d16108c336600461445c565b6120a6565b3480156108d457600080fd5b506103d16108e3366004614320565b61218c565b3480156108f457600080fd5b506103d161090336600461435a565b61227b565b34801561091457600080fd5b506104b5610923366004614513565b612352565b34801561093457600080fd5b506103d16109433660046143d4565b61235f565b34801561095457600080fd5b506103d161096336600461453f565b61250d565b34801561097457600080fd5b506107d861098336600461464f565b6125c9565b34801561099457600080fd5b506103e960205481565b3480156109aa57600080fd5b506103d16109b9366004614320565b6125f3565b3480156109ca57600080fd5b506104b56109d93660046144c3565b6126ee565b3480156109ea57600080fd5b506019546107d8906001600160a01b031681565b348015610a0a57600080fd5b506103e9600a5481565b348015610a2057600080fd5b506103e9610a2f36600461464f565b612743565b348015610a4057600080fd5b506103e9610a4f36600461435a565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610a8657600080fd5b506103d1610a9536600461455a565b61278a565b348015610aa657600080fd5b506103e9610ab53660046145b8565b61284a565b348015610ac657600080fd5b50601a546107d8906001600160a01b031681565b348015610ae657600080fd5b506103d1612895565b348015610afb57600080fd5b506103e9610b0a36600461453f565b6128ff565b348015610b1b57600080fd5b506103d1610b2a366004614320565b612916565b348015610b3b57600080fd5b506103d1610b4a36600461453f565b612a33565b348015610b5b57600080fd5b506103d1610b6a36600461445c565b612aef565b348015610b7b57600080fd5b506103d1610b8a36600461445c565b612c81565b348015610b9b57600080fd5b50601d546107d8906001600160a01b031681565b600260008190526004602052600080516020614d7e8339815191525460ff1615610bf45760405162461bcd60e51b8152600401610beb90614a2f565b60405180910390fd5b610bfe338261179b565b60036000836009811115610c1457610c14614c27565b8152602001908152602001600020604051602001610c3291906147dc565b60405160208183030381529060405290610c5f5760405162461bcd60e51b8152600401610beb919061496a565b50601f805480610c7157610c71614c3d565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600282604051610ca8919061477b565b9081526020016040518091039020549050919050565b610cc78161284a565b4211610d295760405162461bcd60e51b815260206004820152602b60248201527f5065726d697373696f6e206973206c6f636b656420756e74696c20746865206560448201526a3c3834b93c903a34b6b29760a91b6064820152608401610beb565b6000600282604051610d3b919061477b565b9081526040805191829003602090810183205460008181526004909252919020805460ff1916905591507ffc8b383b99ea2b22b71f1093a47597b46df7078bee32a803a3bdd4a206723b8890610d94908490849061497d565b60405180910390a15050565b600260008190526004602052600080516020614d7e8339815191525460ff1615610ddc5760405162461bcd60e51b8152600401610beb90614a2f565b610de6338261179b565b60036000836009811115610dfc57610dfc614c27565b8152602001908152602001600020604051602001610e1a91906147dc565b60405160208183030381529060405290610e475760405162461bcd60e51b8152600401610beb919061496a565b506107d0600954610e589190614b45565b821015610e6457600080fd5b50600a55565b336000818152600c602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ec59086815260200190565b60405180910390a35060015b92915050565b600082610ee383612743565b119392505050565b600260008190526004602052600080516020614d7e8339815191525460ff1615610f275760405162461bcd60e51b8152600401610beb90614a2f565b610f31338261179b565b60036000836009811115610f4757610f47614c27565b8152602001908152602001600020604051602001610f6591906147dc565b60405160208183030381529060405290610f925760405162461bcd60e51b8152600401610beb919061496a565b50506021805460ff191695151595909517909455602493909355602291909155602355602555565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff16156110085760405162461bcd60e51b8152600401610beb90614a2f565b611012338261179b565b6003600083600981111561102857611028614c27565b815260200190815260200160002060405160200161104691906147dc565b604051602081830303815290604052906110735760405162461bcd60e51b8152600401610beb919061496a565b506000546001600160a01b03858116911614156110cc5760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610beb565b60005b828110156111b957600060028585848181106110ed576110ed614c53565b90506020028101906110ff9190614ab3565b60405161110d92919061476b565b9081526040805160209281900383019020546001600160a01b0389166000908152600184528281208282529093529120805460ff1916905590507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e118686868581811061117b5761117b614c53565b905060200281019061118d9190614ab3565b8460405161119e94939291906148b7565b60405180910390a150806111b181614bf6565b9150506110cf565b5050505050565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff161561120e5760405162461bcd60e51b8152600401610beb90614a2f565b611218338261179b565b6003600083600981111561122e5761122e614c27565b815260200190815260200160002060405160200161124c91906147dc565b604051602081830303815290604052906112795760405162461bcd60e51b8152600401610beb919061496a565b50600060028360405161128c919061477b565b908152604080519182900360209081018320546001600160a01b0388166000908152600180845284822083835290935292909220805460ff1916909117905591507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec643906112fe90869086908590614901565b60405180910390a150505050565b600260008190526004602052600080516020614d7e8339815191525460ff16156113485760405162461bcd60e51b8152600401610beb90614a2f565b611352338261179b565b6003600083600981111561136857611368614c27565b815260200190815260200160002060405160200161138691906147dc565b604051602081830303815290604052906113b35760405162461bcd60e51b8152600401610beb919061496a565b5050601b91909155601c55565b6001600160a01b0383166000908152600c602090815260408083203384529091528120546000191461146d576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600c82528381203382529091529190912054611448918490612d55565b6001600160a01b0385166000908152600c602090815260408083203384529091529020555b611478848484612d8f565b90505b9392505050565b6008546001600160a01b03166000908152600b60205260408120546114cf906007546001600160a01b03166000908152600b60205260409020546114c9906009549061314b565b9061314b565b905090565b600260008190526004602052600080516020614d7e8339815191525460ff16156115105760405162461bcd60e51b8152600401610beb90614a2f565b61151a338261179b565b6003600083600981111561153057611530614c27565b815260200190815260200160002060405160200161154e91906147dc565b6040516020818303038152906040529061157b5760405162461bcd60e51b8152600401610beb919061496a565b506026546040516316a4744b60e11b815260048101859052602481018490526101009091046001600160a01b031690632d48e896906044015b600060405180830381600087803b1580156115ce57600080fd5b505af11580156115e2573d6000803e3d6000fd5b50505050505050565b600260008190526004602052600080516020614d7e8339815191525460ff16156116275760405162461bcd60e51b8152600401610beb90614a2f565b611631338261179b565b6003600083600981111561164757611647614c27565b815260200190815260200160002060405160200161166591906147dc565b604051602081830303815290604052906116925760405162461bcd60e51b8152600401610beb919061496a565b5050602055565b600860008190526004602052600080516020614d5e8339815191525460ff16156116d55760405162461bcd60e51b8152600401610beb90614a2f565b6116df338261179b565b600360008360098111156116f5576116f5614c27565b815260200190815260200160002060405160200161171391906147dc565b604051602081830303815290604052906117405760405162461bcd60e51b8152600401610beb919061496a565b50506001600160a01b03166000908152600e602090815260408083208054600160ff199182168117909255600d84528285208054821683179055600f909352922080549091169091179055565b6000610ed182600019610e6a565b6001600160a01b0382166000908152600160205260408120818360098111156117c6576117c6614c27565b815260208101919091526040016000205460ff169392505050565b6001600081905260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460ff161561182f5760405162461bcd60e51b8152600401610beb90614a2f565b611839338261179b565b6003600083600981111561184f5761184f614c27565b815260200190815260200160002060405160200161186d91906147dc565b6040516020818303038152906040529061189a5760405162461bcd60e51b8152600401610beb919061496a565b506007546118b29083906001600160a01b031661318d565b5050565b600860008190526004602052600080516020614d5e8339815191525460ff16156118f25760405162461bcd60e51b8152600401610beb90614a2f565b6118fc338261179b565b6003600083600981111561191257611912614c27565b815260200190815260200160002060405160200161193091906147dc565b6040516020818303038152906040529061195d5760405162461bcd60e51b8152600401610beb919061496a565b50506001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000600460006002846040516119a0919061477b565b908152604080516020928190038301902054835290820192909252016000205460ff1692915050565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff1615611a175760405162461bcd60e51b8152600401610beb90614a2f565b611a21338261179b565b60036000836009811115611a3757611a37614c27565b8152602001908152602001600020604051602001611a5591906147dc565b60405160208183030381529060405290611a825760405162461bcd60e51b8152600401610beb919061496a565b506000546001600160a01b0384811691161415611adb5760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610beb565b6000600283604051611aed919061477b565b908152604080519182900360209081018320546001600160a01b038816600090815260018352838120828252909252919020805460ff1916905591507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e11906112fe90869086908590614901565b600260008190526004602052600080516020614d7e8339815191525460ff1615611b965760405162461bcd60e51b8152600401610beb90614a2f565b611ba0338261179b565b60036000836009811115611bb657611bb6614c27565b8152602001908152602001600020604051602001611bd491906147dc565b60405160208183030381529060405290611c015760405162461bcd60e51b8152600401610beb919061496a565b506011879055601286905560138590556014849055611c2c84611c2687818b8b6133d0565b906133d0565b6016556018829055611c4683611c26868189818d8d6133d0565b601755601854611c5890600a90614b45565b6016541115611c9c5760405162461bcd60e51b815260206004820152601060248201526f084eaf240cccaca40e8dede40d0d2ced60831b6044820152606401610beb565b6005601854611cab9190614b45565b60175411156115e25760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840cccaca40e8dede40d0d2ced607b1b6044820152606401610beb565b600260008190526004602052600080516020614d7e8339815191525460ff1615611d2c5760405162461bcd60e51b8152600401610beb90614a2f565b611d36338261179b565b60036000836009811115611d4c57611d4c614c27565b8152602001908152602001600020604051602001611d6a91906147dc565b60405160208183030381529060405290611d975760405162461bcd60e51b8152600401610beb919061496a565b50506021805460ff19166001179055565b6007600081905260046020527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5515460ff1615611df65760405162461bcd60e51b8152600401610beb90614a2f565b611e00338261179b565b60036000836009811115611e1657611e16614c27565b8152602001908152602001600020604051602001611e3491906147dc565b60405160208183030381529060405290611e615760405162461bcd60e51b8152600401610beb919061496a565b506000600284604051611e74919061477b565b9081526040519081900360200190205490506000611e928442614b19565b6040805180820182526001815267ffffffffffffffff83811660208084019182526000888152600490915284902092518354915168ffffffffffffffffff1990921690151568ffffffffffffffff001916176101009190921602179055519091507f1a64a9fcf40ce1b5dcb813e1f2ef6c6f70310b51c853865d4bfe7ca8f37d854f90611f249087908590859061499f565b60405180910390a15050505050565b600260008190526004602052600080516020614d7e8339815191525460ff1615611f6f5760405162461bcd60e51b8152600401610beb90614a2f565b611f79338261179b565b60036000836009811115611f8f57611f8f614c27565b8152602001908152602001600020604051602001611fad91906147dc565b60405160208183030381529060405290611fda5760405162461bcd60e51b8152600401610beb919061496a565b50620f4240821115611feb57600080fd5b50602755565b600260008190526004602052600080516020614d7e8339815191525460ff161561202d5760405162461bcd60e51b8152600401610beb90614a2f565b612037338261179b565b6003600083600981111561204d5761204d614c27565b815260200190815260200160002060405160200161206b91906147dc565b604051602081830303815290604052906120985760405162461bcd60e51b8152600401610beb919061496a565b50506021805460ff19169055565b6009600081905260046020527f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b9335460ff16156120f45760405162461bcd60e51b8152600401610beb90614a2f565b6120fe338261179b565b6003600083600981111561211457612114614c27565b815260200190815260200160002060405160200161213291906147dc565b6040516020818303038152906040529061215f5760405162461bcd60e51b8152600401610beb919061496a565b50506001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b600860008190526004602052600080516020614d5e8339815191525460ff16156121c85760405162461bcd60e51b8152600401610beb90614a2f565b6121d2338261179b565b600360008360098111156121e8576121e8614c27565b815260200190815260200160002060405160200161220691906147dc565b604051602081830303815290604052906122335760405162461bcd60e51b8152600401610beb919061496a565b50506001600160a01b03166000908152600e60209081526040808320805460ff19908116909155600d8352818420805482169055600f90925290912080549091166001179055565b600260008190526004602052600080516020614d7e8339815191525460ff16156122b75760405162461bcd60e51b8152600401610beb90614a2f565b6122c1338261179b565b600360008360098111156122d7576122d7614c27565b81526020019081526020016000206040516020016122f591906147dc565b604051602081830303815290604052906123225760405162461bcd60e51b8152600401610beb919061496a565b5050601980546001600160a01b039384166001600160a01b031991821617909155601a8054929093169116179055565b600061147b338484612d8f565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff16156123ad5760405162461bcd60e51b8152600401610beb90614a2f565b6123b7338261179b565b600360008360098111156123cd576123cd614c27565b81526020019081526020016000206040516020016123eb91906147dc565b604051602081830303815290604052906124185760405162461bcd60e51b8152600401610beb919061496a565b5060005b828110156111b9576000600285858481811061243a5761243a614c53565b905060200281019061244c9190614ab3565b60405161245a92919061476b565b9081526040805160209281900383019020546001600160a01b0389166000908152600180855283822083835290945291909120805460ff191690921790915590507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec643868686858181106124cf576124cf614c53565b90506020028101906124e19190614ab3565b846040516124f294939291906148b7565b60405180910390a1508061250581614bf6565b91505061241c565b600260008190526004602052600080516020614d7e8339815191525460ff16156125495760405162461bcd60e51b8152600401610beb90614a2f565b612553338261179b565b6003600083600981111561256957612569614c27565b815260200190815260200160002060405160200161258791906147dc565b604051602081830303815290604052906125b45760405162461bcd60e51b8152600401610beb919061496a565b5050602a805460ff1916911515919091179055565b601f81815481106125d957600080fd5b6000918252602090912001546001600160a01b0316905081565b600260008190526004602052600080516020614d7e8339815191525460ff161561262f5760405162461bcd60e51b8152600401610beb90614a2f565b612639338261179b565b6003600083600981111561264f5761264f614c27565b815260200190815260200160002060405160200161266d91906147dc565b6040516020818303038152906040529061269a5760405162461bcd60e51b8152600401610beb919061496a565b5050601f80546001810182556000919091527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d8070180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600160205260408082209051829060029061271990869061477b565b908152604080516020928190038301902054835290820192909252016000205460ff169392505050565b6000610ed1612750611482565b601e546001600160a01b03166000908152600b60205260409020546127849061277d906002905b9061342f565b859061342f565b906134ae565b600260008190526004602052600080516020614d7e8339815191525460ff16156127c65760405162461bcd60e51b8152600401610beb90614a2f565b6127d0338261179b565b600360008360098111156127e6576127e6614c27565b815260200190815260200160002060405160200161280491906147dc565b604051602081830303815290604052906128315760405162461bcd60e51b8152600401610beb919061496a565b50506028805460ff191692151592909217909155602955565b600060046000600284604051612860919061477b565b9081526040805160209281900383019020548352908201929092520160002054610100900467ffffffffffffffff1692915050565b602660019054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128e557600080fd5b505af11580156128f9573d6000803e3d6000fd5b50505050565b60008161290e57601654610ed1565b505060175490565b6000546001600160a01b031633146129665760405162461bcd60e51b815260206004820152601360248201527227bbb732b939b434b8103932b8bab4b932b21760691b6044820152606401610beb565b600080546001600160a01b038381166001600160a01b0319831617835516905b600a8110156129ee576001600160a01b0380831660009081526001602081815260408084208685528252808420805460ff19908116909155845490951684528282528084208685529091529091208054909216179055806129e681614bf6565b915050612986565b50600054604080516001600160a01b03808516825290921660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09101610d94565b600260008190526004602052600080516020614d7e8339815191525460ff1615612a6f5760405162461bcd60e51b8152600401610beb90614a2f565b612a79338261179b565b60036000836009811115612a8f57612a8f614c27565b8152602001908152602001600020604051602001612aad91906147dc565b60405160208183030381529060405290612ada5760405162461bcd60e51b8152600401610beb919061496a565b50506026805460ff1916911515919091179055565b600860008190526004602052600080516020614d5e8339815191525460ff1615612b2b5760405162461bcd60e51b8152600401610beb90614a2f565b612b35338261179b565b60036000836009811115612b4b57612b4b614c27565b8152602001908152602001600020604051602001612b6991906147dc565b60405160208183030381529060405290612b965760405162461bcd60e51b8152600401610beb919061496a565b506001600160a01b0383163014801590612bbe5750601e546001600160a01b03848116911614155b612bc757600080fd5b6001600160a01b0383166000908152600f60205260409020805460ff19168315801591909117909155612c3357602654604051630a5b654b60e11b81526001600160a01b03858116600483015260006024830152610100909204909116906314b6ca96906044016115b4565b6026546001600160a01b038481166000818152600b602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca96906044016115b4565b600860008190526004602052600080516020614d5e8339815191525460ff1615612cbd5760405162461bcd60e51b8152600401610beb90614a2f565b612cc7338261179b565b60036000836009811115612cdd57612cdd614c27565b8152602001908152602001600020604051602001612cfb91906147dc565b60405160208183030381529060405290612d285760405162461bcd60e51b8152600401610beb919061496a565b50506001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b60008184841115612d795760405162461bcd60e51b8152600401610beb919061496a565b506000612d868486614b86565b95945050505050565b6001600160a01b03831660009081526010602052604081205460ff1615612df15760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610beb565b602a5460ff1615612e0e57612e078484846134f0565b905061147b565b6000612e19846135d6565b90508015612e2b57612e2b858461369b565b612e33613704565b15612e5157612e51818015612e4c5750612e4c84613753565b6137a3565b602054158015612e6e5750601e546001600160a01b038581169116145b15612e9d576001600160a01b0385166000908152600b6020526040902054612e9557600080fd5b612e9d61402b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600b9091529190912054612eef918590612d55565b6001600160a01b0386166000908152600b6020526040812091909155612f158686614074565b612f1f5783612f2a565b612f2a8686866141ca565b6001600160a01b0386166000908152600b6020526040902054909150612f5090826133d0565b6001600160a01b038087166000908152600b60209081526040808320949094559189168152600f909152205460ff16612ff9576026546001600160a01b038781166000818152600b602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b158015612fe657600080fd5b505af1925050508015612ff7575060015b505b6001600160a01b0385166000908152600f602052604090205460ff1661308f576026546001600160a01b038681166000818152600b602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561307c57600080fd5b505af192505050801561308d575060015b505b6026546027546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169063ffb2c47990602401600060405180830381600087803b1580156130e057600080fd5b505af19250505080156130f1575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161313791815260200190565b60405180910390a350600195945050505050565b600061147b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d55565b602a805460ff191660011790556040805160028082526060820183526000926020830190803683375050601d54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156131ff57600080fd5b505afa158015613213573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613237919061433d565b8160008151811061324a5761324a614c53565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061327e5761327e614c53565b6001600160a01b039283166020918202929092010152601d5460405163b6f9de9560e01b815291169063b6f9de959085906132c490600090869088904290600401614935565b6000604051808303818588803b1580156132dd57600080fd5b505af1935050505080156132ef575060015b61338d576132fb614c7f565b806308c379a014156133635750613310614c9b565b8061331b5750613365565b600080516020614d3e8339815191528160405160200161333b9190614797565b60408051601f19818403018152908290526133559161496a565b60405180910390a1506133c1565b505b600080516020614d3e833981519152604051613380906149d2565b60405180910390a16133c1565b6040518381527f6ccf89310d2b248f24954171f3a0bdb9d6648b387112719ddcaabd8d33f137fe9060200160405180910390a15b5050602a805460ff1916905550565b6000806133dd8385614b01565b90508381101561147b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610beb565b60008261343e57506000610ed1565b600061344a8385614b67565b9050826134578583614b45565b1461147b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610beb565b600061147b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614269565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600b90915291822054613541918490612d55565b6001600160a01b038086166000908152600b6020526040808220939093559085168152205461357090836133d0565b6001600160a01b038085166000818152600b602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906135c49086815260200190565b60405180910390a35060019392505050565b600080601f80548060200260200160405190810160405280929190818152602001828054801561362f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613611575b5050505050905060005b81518110156136915781818151811061365457613654614c53565b60200260200101516001600160a01b0316846001600160a01b0316141561367f575060019392505050565b8061368981614bf6565b915050613639565b5060009392505050565b600a54811115806136c457506001600160a01b0382166000908152600e602052604090205460ff165b6118b25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610beb565b601e546000906001600160a01b031633148015906137255750602a5460ff16155b8015613733575060285460ff165b80156114cf575050602954306000908152600b6020526040902054101590565b60215460009060ff168015613769575060245447115b801561379357506137906023546127776022546127776064476134ae90919063ffffffff16565b47115b8015610ed1575050602554111590565b602a805460ff19166001179055601b54601c546000916137c291610ed7565b6137ce576011546137d1565b60005b905060006137f560026127846016546127848660295461342f90919063ffffffff16565b9050600061380e8260295461314b90919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061384857613848614c53565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561389c57600080fd5b505afa1580156138b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d4919061433d565b816001815181106138e7576138e7614c53565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b81524792919091169063791ac94790613931908690600090879030904290600401614a77565b600060405180830381600087803b15801561394b57600080fd5b505af192505050801561395c575060015b613a7657613968614c7f565b806308c379a014156139e2575061397d614c9b565b8061398857506139e4565b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e02816040516020016139ba9190614797565b60408051601f19818403018152908290526139d49161496a565b60405180910390a150613d8b565b505b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e02604051613a699060208082526039908201527f537761704261636b206661696c656420776974686f757420616e206572726f7260408201527f206d6573736167652066726f6d2070616e63616b655377617000000000000000606082015260800190565b60405180910390a1613d8b565b6000613a82478361314b565b90506000613a9d613a948860026134ae565b6016549061314b565b90506000613ab260026127848481878d61342f565b90506000613acf836127846013548761342f90919063ffffffff16565b90506000613aec846127846014548861342f90919063ffffffff16565b9050602660019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b3e57600080fd5b505af193505050508015613b50575060015b50601a5460405160009182916001600160a01b039091169061753090859084818181858888f193505050503d8060008114613ba7576040519150601f19603f3d011682016040523d82523d6000602084013e613bac565b606091505b50915091508115613bf5577f401e764b57e779ca741ac7eb64b9acb081259c26ce9d2634e4defb44e43f9f468382604051613be8929190614a5e565b60405180910390a1613c2f565b7f5214eebea9a0f455a27bf5a4f1fa4702aef39d3bf64773133740d405a15e0fee8382604051613c26929190614a5e565b60405180910390a15b8a15613d5057601d5460195460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c4016060604051808303818588803b158015613ca057600080fd5b505af193505050508015613cd1575060408051601f3d908101601f19168201909252613cce9181019061468a565b60015b613d135760408051600080825260208201527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a1613d50565b5050604080518d8152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6040518a81527fb39214ef4f33ea2d9d329fb67a4f17e7588bf6e00ed15a7967137ba819697a279060200160405180910390a1505050505050505b85156140195760004790506000613db260646127846022548561342f90919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683375050601d54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015613e1c57600080fd5b505afa158015613e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e54919061433d565b81600081518110613e6757613e67614c53565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613e9b57613e9b614c53565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b60235481101561401457601d5460075460405163b6f9de9560e01b81526001600160a01b039283169263b6f9de95928792613f059260009289929116904290600401614935565b6000604051808303818588803b158015613f1e57600080fd5b505af193505050508015613f30575060015b613fce57613f3c614c7f565b806308c379a01415613fa45750613f51614c9b565b80613f5c5750613fa6565b600080516020614d3e83398151915281604051602001613f7c9190614797565b60408051601f1981840301815290829052613f969161496a565b60405180910390a150614002565b505b600080516020614d3e833981519152604051613fc1906149d2565b60405180910390a1614002565b6040518381527f6ccf89310d2b248f24954171f3a0bdb9d6648b387112719ddcaabd8d33f137fe9060200160405180910390a15b8061400c81614bf6565b915050613ebe565b505050505b5050602a805460ff1916905550505050565b4360208190556040517f87dcd6626ffde0faf682a10e7b64aff36ea73a5470d5fa6cc7ebd372e4b190019161406a914290918252602082015260400190565b60405180910390a1565b6001600160a01b0382166000908152600d602052604081205460ff16806140b357506001600160a01b0382166000908152600d602052604090205460ff165b806140be5750602054155b156140cb57506000610ed1565b6000601f80548060200260200160405190810160405280929190818152602001828054801561412357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614105575b5050505050905060005b81518110156141bb5781818151811061414857614148614c53565b60200260200101516001600160a01b0316856001600160a01b03161480614199575081818151811061417c5761417c614c53565b60200260200101516001600160a01b0316846001600160a01b0316145b156141a957600192505050610ed1565b806141b381614bf6565b91505061412d565b505060265460ff169392505050565b6000806141e96018546127846141e2610b0a886135d6565b869061342f565b306000908152600b602052604090205490915061420690826133d0565b306000818152600b6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906142579085815260200190565b60405180910390a3612d86838261314b565b6000818361428a5760405162461bcd60e51b8152600401610beb919061496a565b506000612d868486614b45565b803580151581146142a757600080fd5b919050565b600082601f8301126142bd57600080fd5b813567ffffffffffffffff8111156142d7576142d7614c69565b6040516142ee601f8301601f191660200182614bc9565b81815284602083860101111561430357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561433257600080fd5b813561147b81614d25565b60006020828403121561434f57600080fd5b815161147b81614d25565b6000806040838503121561436d57600080fd5b823561437881614d25565b9150602083013561438881614d25565b809150509250929050565b6000806000606084860312156143a857600080fd5b83356143b381614d25565b925060208401356143c381614d25565b929592945050506040919091013590565b6000806000604084860312156143e957600080fd5b83356143f481614d25565b9250602084013567ffffffffffffffff8082111561441157600080fd5b818601915086601f83011261442557600080fd5b81358181111561443457600080fd5b8760208260051b850101111561444957600080fd5b6020830194508093505050509250925092565b6000806040838503121561446f57600080fd5b823561447a81614d25565b915061448860208401614297565b90509250929050565b600080604083850312156144a457600080fd5b82356144af81614d25565b91506020830135600a811061438857600080fd5b600080604083850312156144d657600080fd5b82356144e181614d25565b9150602083013567ffffffffffffffff8111156144fd57600080fd5b614509858286016142ac565b9150509250929050565b6000806040838503121561452657600080fd5b823561453181614d25565b946020939093013593505050565b60006020828403121561455157600080fd5b61147b82614297565b6000806040838503121561456d57600080fd5b61453183614297565b600080600080600060a0868803121561458e57600080fd5b61459786614297565b97602087013597506040870135966060810135965060800135945092505050565b6000602082840312156145ca57600080fd5b813567ffffffffffffffff8111156145e157600080fd5b6145ed848285016142ac565b949350505050565b6000806040838503121561460857600080fd5b823567ffffffffffffffff8082111561462057600080fd5b61462c868387016142ac565b935060208501359150808216821461464357600080fd5b50809150509250929050565b60006020828403121561466157600080fd5b5035919050565b6000806040838503121561467b57600080fd5b50508035926020909101359150565b60008060006060848603121561469f57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156146d157600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b838110156147345781516001600160a01b03168752958201959082019060010161470f565b509495945050505050565b60008151808452614757816020860160208601614b9d565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b6000825161478d818460208701614b9d565b9190910192915050565b7f537761704261636b206661696c65642077697468206572726f722000000000008152600082516147cf81601b850160208701614b9d565b91909101601b0192915050565b7f4e6f7420617574686f72697a65642e20596f75206e656564207468652070657281526000602067036b4b9b9b4b7b7160c51b8184015260286000855481600182811c91508083168061483057607f831692505b86831081141561484e57634e487b7160e01b85526022600452602485fd5b8080156148625760018114614877576148a8565b60ff1985168a880152838a01870195506148a8565b60008b81526020902060005b8581101561489e5781548c82018a0152908401908901614883565b505086848b010195505b50939998505050505050505050565b6001600160a01b038516815260606020820181905281018390528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b6001600160a01b03841681526060602082018190526000906149259083018561473f565b9050826040830152949350505050565b84815260806020820152600061494e60808301866146fb565b6001600160a01b03949094166040830152506060015292915050565b60208152600061147b602083018461473f565b604081526000614990604083018561473f565b90508260208301529392505050565b6060815260006149b2606083018661473f565b905083602083015267ffffffffffffffff83166040830152949350505050565b6020808252603d908201527f4175746f204275796261636b206661696c656420776974686f757420616e206560408201527f72726f72206d6573736167652066726f6d2070616e63616b6553776170000000606082015260800190565b6020808252601590820152742832b936b4b9b9b4b7b71034b9903637b1b5b2b21760591b604082015260600190565b828152604060208201526000611478604083018461473f565b85815284602082015260a060408201526000614a9660a08301866146fb565b6001600160a01b0394909416606083015250608001529392505050565b6000808335601e19843603018112614aca57600080fd5b83018035915067ffffffffffffffff821115614ae557600080fd5b602001915036819003821315614afa57600080fd5b9250929050565b60008219821115614b1457614b14614c11565b500190565b600067ffffffffffffffff808316818516808303821115614b3c57614b3c614c11565b01949350505050565b600082614b6257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614b8157614b81614c11565b500290565b600082821015614b9857614b98614c11565b500390565b60005b83811015614bb8578181015183820152602001614ba0565b838111156128f95750506000910152565b601f8201601f1916810167ffffffffffffffff81118282101715614bef57614bef614c69565b6040525050565b6000600019821415614c0a57614c0a614c11565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115614c985760046000803e5060005160e01c5b90565b600060443d1015614ca95790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715614cd957505050505090565b8285019150815181811115614cf15750505050505090565b843d8701016020828501011115614d0b5750505050505090565b614d1a60208286010187614bc9565b509095945050505050565b6001600160a01b0381168114614d3a57600080fd5b5056fe2e82bf63aa4d9741fcb7e5c90fd3c771125e0aa5434cfb55b7dcc48554cc959f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a491da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7a2646970667358221220447c718a54f791fd1bda34dc7bf0809a1c525b0fe06cae699af04c0109ea297464736f6c634300080600336080604052600080546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d569081179092556001805482167310ed43c718714eb63d5aa57b78b54704e256024e1790556003805490911690911790556ec097ce7bc90715b34b9f1000000000600d55610e10600e55670de0b6b3a7640000600f5534801561008a57600080fd5b506040516111173803806111178339810160408190526100a9916100fa565b6001600160a01b0381166100c8576001546001600160a01b03166100ca565b805b600480546001600160a01b03929092166001600160a01b031992831617905560028054909116331790555061012a565b60006020828403121561010c57600080fd5b81516001600160a01b038116811461012357600080fd5b9392505050565b610fde806101396000396000f3fe6080604052600436106100e85760003560e01c8063997664d71161008a578063efca2eed11610059578063efca2eed14610268578063f0fc6bca1461027e578063ffb2c47914610293578063ffd49c84146102b357600080fd5b8063997664d7146101dd578063ce7c2ac2146101f3578063d0e30db01461024a578063e2d2e2191461025257600080fd5b80632d48e896116100c65780632d48e896146101585780633a98ef39146101785780634fab0ae81461018e5780636006c7d6146101a457600080fd5b806311ce023d146100ed57806314b6ca961461011657806328fd319814610138575b600080fd5b3480156100f957600080fd5b50610103600d5481565b6040519081526020015b60405180910390f35b34801561012257600080fd5b50610136610131366004610d65565b6102c9565b005b34801561014457600080fd5b50610103610153366004610d2b565b610441565b34801561016457600080fd5b50610136610173366004610de5565b6104ca565b34801561018457600080fd5b5061010360095481565b34801561019a57600080fd5b50610103600f5481565b3480156101b057600080fd5b506101036101bf366004610d2b565b6001600160a01b031660009081526008602052604090206002015490565b3480156101e957600080fd5b50610103600a5481565b3480156101ff57600080fd5b5061022f61020e366004610d2b565b60086020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161010d565b6101366104ec565b34801561025e57600080fd5b50610103600c5481565b34801561027457600080fd5b50610103600b5481565b34801561028a57600080fd5b506101366107a5565b34801561029f57600080fd5b506101366102ae366004610db3565b6107b0565b3480156102bf57600080fd5b50610103600e5481565b6002546001600160a01b031633146102e057600080fd5b6001600160a01b0382166000908152600860205260409020541561030757610307826108b1565b60008111801561032d57506001600160a01b038216600090815260086020526040902054155b1561039357600580546001600160a01b0384166000818152600660205260408120839055600183018455929092527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b03191690911790556103c6565b801580156103b857506001600160a01b03821660009081526008602052604090205415155b156103c6576103c6826109dc565b6001600160a01b0382166000908152600860205260409020546009546103f79183916103f191610af1565b90610b3c565b6009556001600160a01b038216600090815260086020526040902081905561041e81610ba0565b6001600160a01b0390921660009081526008602052604090206001019190915550565b6001600160a01b03811660009081526008602052604081205461046657506000919050565b6001600160a01b03821660009081526008602052604081205461048890610ba0565b6001600160a01b0384166000908152600860205260409020600101549091508082116104b8575060009392505050565b6104c28282610af1565b949350505050565b6002546001600160a01b031633146104e157600080fd5b600e91909155600f55565b6002546001600160a01b0316331461050357600080fd5b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561054757600080fd5b505afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190610dcc565b6040805160028082526060820183529293506000929091602083019080368337505060048054604080516315ab88c960e31b815290519495506001600160a01b039091169363ad5c4648935081830192602092829003018186803b1580156105e657600080fd5b505afa1580156105fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061e9190610d48565b8160008151811061063157610631610f7d565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061066257610662610f7d565b6001600160a01b0392831660209182029290920101526004805460405163b6f9de9560e01b815292169163b6f9de959134916106a79160009187913091429101610e07565b6000604051808303818588803b1580156106c057600080fd5b505af11580156106d4573d6000803e3d6000fd5b50506003546040516370a0823160e01b81523060048201526000945061076393508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561072557600080fd5b505afa158015610739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075d9190610dcc565b90610af1565b600a549091506107739082610b3c565b600a55600954600d5461079d916107949161078e9085610bbd565b90610c3c565b600c5490610b3c565b600c55505050565b6107ae336108b1565b565b6002546001600160a01b031633146107c757600080fd5b600554806107d3575050565b6000805a905060005b84831080156107ea57508381105b156108a95783601054106107fe5760006010555b61083060056010548154811061081657610816610f7d565b6000918252602090912001546001600160a01b0316610c7e565b156108675761086760056010548154811061084d5761084d610f7d565b6000918252602090912001546001600160a01b03166108b1565b61087c6108755a8490610af1565b8490610b3c565b92505a60108054919350600061089183610f36565b919050555080806108a190610f36565b9150506107dc565b505050505b50565b6001600160a01b0381166000908152600860205260409020546108d15750565b60006108dc82610441565b905080156109d857600b546108f19082610b3c565b600b5560035460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561094257600080fd5b505af1158015610956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097a9190610d91565b506001600160a01b038216600090815260076020908152604080832042905560089091529020600201546109ae9082610b3c565b6001600160a01b038316600090815260086020526040902060028101919091555461041e90610ba0565b5050565b600580546109ec90600190610f1f565b815481106109fc576109fc610f7d565b60009182526020808320909101546001600160a01b0384811684526006909252604090922054600580549290931692918110610a3a57610a3a610f7d565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260069182905260408120546005805491939291610a8690600190610f1f565b81548110610a9657610a96610f7d565b60009182526020808320909101546001600160a01b031683528201929092526040019020556005805480610acc57610acc610f67565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b3383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610cc3565b90505b92915050565b600080610b498385610ec6565b905083811015610b335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610b36600d5461078e600c5485610bbd90919063ffffffff16565b600082610bcc57506000610b36565b6000610bd88385610f00565b905082610be58583610ede565b14610b335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b97565b6000610b3383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cfd565b600e546001600160a01b03821660009081526007602052604081205490914291610ca89190610ec6565b108015610b365750600f54610cbc83610441565b1192915050565b60008184841115610ce75760405162461bcd60e51b8152600401610b979190610e71565b506000610cf48486610f1f565b95945050505050565b60008183610d1e5760405162461bcd60e51b8152600401610b979190610e71565b506000610cf48486610ede565b600060208284031215610d3d57600080fd5b8135610b3381610f93565b600060208284031215610d5a57600080fd5b8151610b3381610f93565b60008060408385031215610d7857600080fd5b8235610d8381610f93565b946020939093013593505050565b600060208284031215610da357600080fd5b81518015158114610b3357600080fd5b600060208284031215610dc557600080fd5b5035919050565b600060208284031215610dde57600080fd5b5051919050565b60008060408385031215610df857600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610e515784516001600160a01b031683529383019391830191600101610e2c565b50506001600160a01b039690961660408501525050506060015292915050565b600060208083528351808285015260005b81811015610e9e57858101830151858201604001528201610e82565b81811115610eb0576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610ed957610ed9610f51565b500190565b600082610efb57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610f1a57610f1a610f51565b500290565b600082821015610f3157610f31610f51565b500390565b6000600019821415610f4a57610f4a610f51565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146108ae57600080fdfea26469706673582212207bfb50971048ebfa1134c04557691b9be1f1fc3a075686a0413f6c327cb521a064736f6c63430008060033

Deployed ByteCode Sourcemap

33754:21654:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54238:138;;;;;;;;;;;;;:::i;:::-;;35859:50;;;;;;;;;;;;;;;;;;;20333:25:1;;;20321:2;20306:18;35859:50:0;;;;;;;;24405:189;;;;;;;;;;-1:-1:-1;24405:189:0;;;;;:::i;:::-;;:::i;37347:94::-;;;;;;;;;;-1:-1:-1;37428:5:0;;;;;;;;;;;;-1:-1:-1;;;37428:5:0;;;;37347:94;;;;;;;:::i;25759:425::-;;;;;;;;;;-1:-1:-1;25759:425:0;;;;;:::i;:::-;;:::i;48670:215::-;;;;;;;;;;-1:-1:-1;48670:215:0;;;;;:::i;:::-;;:::i;37872:248::-;;;;;;;;;;-1:-1:-1;37872:248:0;;;;;:::i;:::-;;:::i;:::-;;;13778:14:1;;13771:22;13753:41;;13741:2;13726:18;37872:248:0;13708:92:1;53804:182:0;;;;;;;;;;-1:-1:-1;53804:182:0;;;;;:::i;:::-;;:::i;51960:548::-;;;;;;;;;;-1:-1:-1;51960:548:0;;;;;:::i;:::-;;:::i;37029:102::-;;;;;;;;;;-1:-1:-1;37111:12:0;;37029:102;;22690:501;;;;;;;;;;-1:-1:-1;22690:501:0;;;;;:::i;:::-;;:::i;21337:316::-;;;;;;;;;;-1:-1:-1;21337:316:0;;;;;:::i;:::-;;:::i;52516:245::-;;;;;;;;;;-1:-1:-1;52516:245:0;;;;;:::i;:::-;;:::i;38448:414::-;;;;;;;;;;-1:-1:-1;38448:414:0;;;;;:::i;:::-;;:::i;53390:142::-;;;;;;;;;;;;;:::i;52769:247::-;;;;;;;;;;-1:-1:-1;52769:247:0;;;;;:::i;:::-;;:::i;23251:103::-;;;;;;;;;;-1:-1:-1;23251:103:0;;;;;:::i;:::-;23306:4;23341:5;-1:-1:-1;;;;;23330:16:0;;;23341:5;;23330:16;;23251:103;37139:94;;;;;;;;;;-1:-1:-1;37139:94:0;;34255:1;21644:36:1;;21632:2;21617:18;37139:94:0;21599:87:1;54758:165:0;;;;;;;;;;-1:-1:-1;54758:165:0;;;;;:::i;:::-;;:::i;35321:37::-;;;;;;;;;;-1:-1:-1;35321:37:0;;;;;;;;49687:244;;;;;;;;;;-1:-1:-1;49687:244:0;;;;;:::i;:::-;;:::i;38128:116::-;;;;;;;;;;-1:-1:-1;38128:116:0;;;;;:::i;:::-;;:::i;23707:186::-;;;;;;;;;;-1:-1:-1;23707:186:0;;;;;:::i;:::-;;:::i;35694:41::-;;;;;;;;;;-1:-1:-1;35694:41:0;;;;;;;;47530:148;;;;;;;;;;-1:-1:-1;47530:148:0;;;;;:::i;:::-;;:::i;49317:173::-;;;;;;;;;;-1:-1:-1;49317:173:0;;;;;:::i;:::-;;:::i;35822:30::-;;;;;;;;;;-1:-1:-1;35822:30:0;;;;;;;;37549:119;;;;;;;;;;-1:-1:-1;37549:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;37642:18:0;37615:7;37642:18;;;:9;:18;;;;;;;37549:119;24961:179;;;;;;;;;;-1:-1:-1;24961:179:0;;;;;:::i;:::-;;:::i;22227:384::-;;;;;;;;;;-1:-1:-1;22227:384:0;;;;;:::i;:::-;;:::i;50196:902::-;;;;;;;;;;-1:-1:-1;50196:902:0;;;;;:::i;:::-;;:::i;37449:92::-;;;;;;;;;;-1:-1:-1;37501:7:0;37528:5;-1:-1:-1;;;;;37528:5:0;37449:92;;;-1:-1:-1;;;;;11124:32:1;;;11106:51;;11094:2;11079:18;37449:92:0;11061:102:1;17998:20:0;;;;;;;;;;-1:-1:-1;17998:20:0;;;;-1:-1:-1;;;;;17998:20:0;;;51632:155;;;;;;;;;;;;;:::i;37241:98::-;;;;;;;;;;-1:-1:-1;37324:7:0;;;;;;;;;;;;-1:-1:-1;;;37324:7:0;;;;37241:98;;25241:438;;;;;;;;;;-1:-1:-1;25241:438:0;;;;;:::i;:::-;;:::i;53024:200::-;;;;;;;;;;-1:-1:-1;53024:200:0;;;;;:::i;:::-;;:::i;51795:157::-;;;;;;;;;;;;;:::i;54574:176::-;;;;;;;;;;-1:-1:-1;54574:176:0;;;;;:::i;:::-;;:::i;49939:249::-;;;;;;;;;;-1:-1:-1;49939:249:0;;;;;:::i;:::-;;:::i;51106:292::-;;;;;;;;;;-1:-1:-1;51106:292:0;;;;;:::i;:::-;;:::i;38252:188::-;;;;;;;;;;-1:-1:-1;38252:188:0;;;;;:::i;:::-;;:::i;21730:433::-;;;;;;;;;;-1:-1:-1;21730:433:0;;;;;:::i;:::-;;:::i;53232:150::-;;;;;;;;;;-1:-1:-1;53232:150:0;;;;;:::i;:::-;;:::i;35223:22::-;;;;;;;;;;-1:-1:-1;35223:22:0;;;;;:::i;:::-;;:::i;35254:25::-;;;;;;;;;;;;;;;;54082:148;;;;;;;;;;-1:-1:-1;54082:148:0;;;;;:::i;:::-;;:::i;23425:211::-;;;;;;;;;;-1:-1:-1;23425:211:0;;;;;:::i;:::-;;:::i;34990:36::-;;;;;;;;;;-1:-1:-1;34990:36:0;;;;-1:-1:-1;;;;;34990:36:0;;;34335:53;;;;;;;;;;;;;;;;53540:256;;;;;;;;;;-1:-1:-1;53540:256:0;;;;;:::i;:::-;;:::i;37676:188::-;;;;;;;;;;-1:-1:-1;37676:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;37828:19:0;;;37796:7;37828:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;37676:188;51406:218;;;;;;;;;;-1:-1:-1;51406:218:0;;;;;:::i;:::-;;:::i;24662:231::-;;;;;;;;;;-1:-1:-1;24662:231:0;;;;;:::i;:::-;;:::i;35033:35::-;;;;;;;;;;-1:-1:-1;35033:35:0;;;;-1:-1:-1;;;;;35033:35:0;;;53994:80;;;;;;;;;;;;;:::i;41532:127::-;;;;;;;;;;-1:-1:-1;41532:127:0;;;;;:::i;:::-;;:::i;23984:343::-;;;;;;;;;;-1:-1:-1;23984:343:0;;;;;:::i;:::-;;:::i;54384:182::-;;;;;;;;;;-1:-1:-1;54384:182:0;;;;;:::i;:::-;;:::i;48893:416::-;;;;;;;;;;-1:-1:-1;48893:416:0;;;;;:::i;:::-;;:::i;49498:181::-;;;;;;;;;;-1:-1:-1;49498:181:0;;;;;:::i;:::-;;:::i;35161:24::-;;;;;;;;;;-1:-1:-1;35161:24:0;;;;-1:-1:-1;;;;;35161:24:0;;;54238:138;54305:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;;;;;;;;;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;;54357:5:::1;:11;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;54357:11:0;;;;;-1:-1:-1;;;;;;54357:11:0::1;::::0;;;;;-1:-1:-1;54238:138:0:o;24405:189::-;24517:7;24549:21;24571:14;24549:37;;;;;;:::i;:::-;;;;;;;;;;;;;;24542:44;;24405:189;;;:::o;25759:425::-;25881:39;25905:14;25881:23;:39::i;:::-;25863:15;:57;25841:150;;;;-1:-1:-1;;;25841:150:0;;18156:2:1;25841:150:0;;;18138:21:1;18195:2;18175:18;;;18168:30;18234:34;18214:18;;;18207:62;-1:-1:-1;;;18285:18:1;;;18278:41;18336:19;;25841:150:0;18128:233:1;25841:150:0;26002:17;26022:21;26044:14;26022:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;26110:5;26070:28;;;:17;:28;;;;;;:45;;-1:-1:-1;;26070:45:0;;;26022:37;-1:-1:-1;26131:45:0;;;;26150:14;;26022:37;;26131:45;:::i;:::-;;;;;;;;25830:354;25759:425;:::o;48670:215::-;48751:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;;48836:4:::1;48821:12;;:19;;;;:::i;:::-;48811:6;:29;;48803:38;;;::::0;::::1;;-1:-1:-1::0;48852:16:0::1;:25:::0;48670:215::o;37872:248::-;38008:10;37974:4;37996:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;37996:32:0;;;;;;;;;;:41;;;38053:37;37974:4;;37996:32;;38053:37;;;;38031:6;20333:25:1;;20321:2;20306:18;;20288:76;38053:37:0;;;;;;;;-1:-1:-1;38108:4:0;37872:248;;;;;:::o;53804:182::-;53911:4;53972:6;53940:29;53960:8;53940:19;:29::i;:::-;:38;;53804:182;-1:-1:-1;;;53804:182:0:o;51960:548::-;52183:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;52230:18:0::1;:29:::0;;-1:-1:-1;;52230:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;52270:16:::1;:29:::0;;;;52310:23:::1;:43:::0;;;;52364:20:::1;:37:::0;52412:25:::1;:48:::0;51960:548::o;22690:501::-;22827:22;20847:38;;;;;;;;;:47;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;22877:5:0::1;::::0;-1:-1:-1;;;;;22870:12:0;;::::1;22877:5:::0;::::1;22870:12;;22862:48;;;::::0;-1:-1:-1;;;22862:48:0;;17402:2:1;22862:48:0::1;::::0;::::1;17384:21:1::0;17441:2;17421:18;;;17414:30;-1:-1:-1;;;17460:18:1;;;17453:53;17523:18;;22862:48:0::1;17374:173:1::0;22862:48:0::1;22928:9;22923:261;22939:26:::0;;::::1;22923:261;;;22987:17;23007:21;23029:15;;23045:1;23029:18;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;23007:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;23063:19:0;::::1;23096:5;23063:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;:38;;-1:-1:-1;;23063:38:0::1;::::0;;23007:41;-1:-1:-1;23121:51:0::1;23063:19:::0;23142:15;;23158:1;23142:18;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;23162:9;23121:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;22967:3:0;::::1;::::0;::::1;:::i;:::-;;;;22923:261;;;;22690:501:::0;;;;:::o;21337:316::-;21441:20;20847:38;;;;:17;:38;;;:47;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;;21479:17:::1;21499:21;21521:14;21499:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;21547:19:0;::::1;;::::0;;;21580:4:::1;21547:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;21547:37:0::1;::::0;;::::1;::::0;;21499;-1:-1:-1;21600:45:0::1;::::0;::::1;::::0;21562:3;;21619:14;;21499:37;;21600:45:::1;:::i;:::-;;;;;;;;21468:185;21337:316:::0;;;:::o;52516:245::-;52624:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;52676:15:0::1;:25:::0;;;;52712:26:::1;:41:::0;52516:245::o;38448:414::-;-1:-1:-1;;;;;38603:19:0;;38582:4;38603:19;;;:11;:19;;;;;;;;38623:10;38603:31;;;;;;;;-1:-1:-1;;38603:46:0;38599:196;;38700:83;;;;;;;;;;;-1:-1:-1;;;38700:83:0;;;;;;;;-1:-1:-1;;;;;38700:19:0;;-1:-1:-1;38700:19:0;;;:11;:19;;;;;38720:10;38700:31;;;;;;;;;;:83;;38750:6;;38700:49;:83::i;:::-;-1:-1:-1;;;;;38666:19:0;;;;;;:11;:19;;;;;;;;38686:10;38666:31;;;;;;;:117;38599:196;38814:40;38828:6;38836:9;38847:6;38814:13;:40::i;:::-;38807:47;;38448:414;;;;;;:::o;53390:142::-;53518:4;;-1:-1:-1;;;;;53518:4:0;53443:7;37642:18;;;:9;:18;;;;;;53470:54;;53497:4;;-1:-1:-1;;;;;53497:4:0;37615:7;37642:18;;;:9;:18;;;;;;53470:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;53463:61;;53390:142;:::o;52769:247::-;52896:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;52943:11:0::1;::::0;:65:::1;::::0;-1:-1:-1;;;52943:65:0;;::::1;::::0;::::1;14736:25:1::0;;;14777:18;;;14770:34;;;52943:11:0::1;::::0;;::::1;-1:-1:-1::0;;;;;52943:11:0::1;::::0;:35:::1;::::0;14709:18:1;;52943:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52769:247:::0;;;:::o;54758:165::-;54841:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;54893:10:0::1;:22:::0;54758:165::o;49687:244::-;49771:25;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;49814:23:0::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:30;;49840:4:::1;-1:-1:-1::0;;49814:30:0;;::::1;::::0;::::1;::::0;;;49855:11:::1;:19:::0;;;;;:26;;;::::1;::::0;::::1;::::0;;49892:16:::1;:24:::0;;;;;:31;;;;::::1;::::0;;::::1;::::0;;49687:244::o;38128:116::-;38183:4;38207:29;38215:7;-1:-1:-1;;38207:7:0;:29::i;23707:186::-;-1:-1:-1;;;;;23845:19:0;;23816:4;23845:19;;;:14;:19;;;;;23816:4;23873:10;23865:19;;;;;;;;:::i;:::-;23845:40;;;;;;;;;;;-1:-1:-1;23845:40:0;;;;;23707:186;-1:-1:-1;;;23707:186:0:o;47530:148::-;47611:18;20847:38;;;;:17;:38;;;:47;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;47665:4:0::1;::::0;47647:23:::1;::::0;47657:6;;-1:-1:-1;;;;;47665:4:0::1;47647:9;:23::i;:::-;47530:148:::0;;:::o;49317:173::-;49411:25;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;49454:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;49454:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49317:173::o;24961:179::-;25030:4;25067:17;:56;25085:21;25107:14;25085:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;25067:56;;;;;;;;;;-1:-1:-1;25067:56:0;:65;;;;;-1:-1:-1;;24961:179:0:o;22227:384::-;22333:22;20847:38;;;;;;;;;:47;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;22388:5:0::1;::::0;-1:-1:-1;;;;;22381:12:0;;::::1;22388:5:::0;::::1;22381:12;;22373:48;;;::::0;-1:-1:-1;;;22373:48:0;;17402:2:1;22373:48:0::1;::::0;::::1;17384:21:1::0;17441:2;17421:18;;;17414:30;-1:-1:-1;;;17460:18:1;;;17453:53;17523:18;;22373:48:0::1;17374:173:1::0;22373:48:0::1;22434:17;22454:21;22476:14;22454:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;22502:19:0;::::1;22535:5;22502:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;;:38;;-1:-1:-1;;22502:38:0::1;::::0;;22454:37;-1:-1:-1;22556:47:0::1;::::0;::::1;::::0;22517:3;;22577:14;;22454:37;;22556:47:::1;:::i;50196:902::-:0;50436:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;50483:12:0::1;:28:::0;;;50522:10:::1;:24:::0;;;50557:13:::1;:30:::0;;;50598:12:::1;:28:::0;;;50651:93:::1;50613:13:::0;50651:50:::1;50573:14:::0;50651:50;50498:13;50535:11;50651:17:::1;:30::i;:::-;:34:::0;::::1;:50::i;:93::-;50637:11;:107:::0;50755:14:::1;:32:::0;;;50813:128:::1;50927:13:::0;50813:99:::1;50898:13:::0;50813:99;50868:14;50813:99;:13;50841:11;50813:27:::1;:40::i;:128::-;50798:12;:143:::0;50975:14:::1;::::0;:19:::1;::::0;50992:2:::1;::::0;50975:19:::1;:::i;:::-;50960:11;;:34;;50952:63;;;::::0;-1:-1:-1;;;50952:63:0;;16627:2:1;50952:63:0::1;::::0;::::1;16609:21:1::0;16666:2;16646:18;;;16639:30;-1:-1:-1;;;16685:18:1;;;16678:46;16741:18;;50952:63:0::1;16599:166:1::0;50952:63:0::1;51067:1;51050:14;;:18;;;;:::i;:::-;51034:12;;:34;;51026:64;;;::::0;-1:-1:-1;;;51026:64:0;;19617:2:1;51026:64:0::1;::::0;::::1;19599:21:1::0;19656:2;19636:18;;;19629:30;-1:-1:-1;;;19675:18:1;;;19668:47;19732:18;;51026:64:0::1;19589:167:1::0;51632:155:0;51702:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;51754:18:0::1;:25:::0;;-1:-1:-1;;51754:25:0::1;51775:4;51754:25;::::0;;51632:155::o;25241:438::-;25364:26;20847:38;;;;:17;:38;;;:47;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;;25408:17:::1;25428:21;25450:14;25428:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;;-1:-1:-1;25476:17:0::1;25496:30;25522:4:::0;25503:15:::1;25496:30;:::i;:::-;25568:32;::::0;;;;::::1;::::0;;25583:4:::1;25568:32:::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;25537:28:0;;;:17:::1;:28:::0;;;;;;:63;;;;;;-1:-1:-1;;25537:63:0;;;;::::1;;-1:-1:-1::0;;25537:63:0;;::::1;::::0;;;::::1;;;::::0;;25616:55;25568:32;;-1:-1:-1;25616:55:0::1;::::0;::::1;::::0;25633:14;;25537:28;;25568:32;;25616:55:::1;:::i;:::-;;;;;;;;25397:282;;25241:438:::0;;;:::o;53024:200::-;53110:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;;53177:7:::1;53170:3;:14;;53162:23;;;::::0;::::1;;-1:-1:-1::0;53196:14:0::1;:20:::0;53024:200::o;51795:157::-;51866:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;51918:18:0::1;:26:::0;;-1:-1:-1;;51918:26:0::1;::::0;;51795:157::o;54574:176::-;54672:20;20847:38;;;;:17;:38;;;:47;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;54710:18:0;;;::::1;;::::0;;;:13:::1;:18;::::0;;;;:32;;-1:-1:-1;;54710:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54574:176::o;49939:249::-;50026:25;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;50069:23:0::1;50095:5;50069:23:::0;;;:15:::1;:23;::::0;;;;;;;:31;;-1:-1:-1;;50069:31:0;;::::1;::::0;;;50111:11:::1;:19:::0;;;;;:27;;;::::1;::::0;;50149:16:::1;:24:::0;;;;;;:31;;;;::::1;50069::::0;50149::::1;::::0;;49939:249::o;51106:292::-;51242:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;51289:21:0::1;:46:::0;;-1:-1:-1;;;;;51289:46:0;;::::1;-1:-1:-1::0;;;;;;51289:46:0;;::::1;;::::0;;;51346:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;51106:292::o;38252:188::-;38359:4;38388:44;38402:10;38414:9;38425:6;38388:13;:44::i;21730:433::-;21865:20;20847:38;;;;:17;:38;;;:47;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;;21903:9:::1;21898:258;21914:26:::0;;::::1;21898:258;;;21962:17;21982:21;22004:15;;22020:1;22004:18;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;21982:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;22038:19:0;::::1;;::::0;;;22071:4:::1;22038:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;22038:37:0::1;::::0;;::::1;::::0;;;21982:41;-1:-1:-1;22095:49:0::1;22038:19:::0;22114:15;;22130:1;22114:18;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;22134:9;22095:49;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;21942:3:0;::::1;::::0;::::1;:::i;:::-;;;;21898:258;;53232:150:::0;53306:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;53358:6:0::1;:16:::0;;-1:-1:-1;;53358:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53232:150::o;35223:22::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35223:22:0;;-1:-1:-1;35223:22:0;:::o;54082:148::-;54154:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;54206:5:0::1;:16:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;54206:16:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;54206:16:0::1;-1:-1:-1::0;;;;;54206:16:0;;;::::1;::::0;;;::::1;::::0;;54082:148::o;23425:211::-;-1:-1:-1;;;;;23570:19:0;;23541:4;23570:19;;;:14;:19;;;;;;23590:37;;23541:4;;23590:21;;:37;;23612:14;;23590:37;:::i;:::-;;;;;;;;;;;;;;;;;23570:58;;;;;;;;;;-1:-1:-1;23570:58:0;;;;;23425:211;-1:-1:-1;;;23425:211:0:o;53540:256::-;53635:7;53680:108;53751:22;:20;:22::i;:::-;53703:16;;-1:-1:-1;;;;;53703:16:0;37615:7;37642:18;;;:9;:18;;;;;;53680:48;;53693:34;;53725:1;;53693:27;:31;;:34::i;:::-;53680:8;;:12;:48::i;:::-;:52;;:108::i;51406:218::-;51508:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;51560:11:0::1;:22:::0;;-1:-1:-1;;51560:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;51593:13:::1;:23:::0;51406:218::o;24662:231::-;24773:7;24818:17;:56;24836:21;24858:14;24836:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;24818:56;;;;;;;;;;-1:-1:-1;24818:56:0;:67;;;;;;;;-1:-1:-1;;24662:231:0:o;53994:80::-;54039:11;;;;;;;;;-1:-1:-1;;;;;54039:11:0;-1:-1:-1;;;;;54039:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53994:80::o;41532:127::-;41588:7;41615;:36;;41640:11;;41615:36;;;-1:-1:-1;;41625:12:0;;;41532:127::o;23984:343::-;23306:4;23341:5;-1:-1:-1;;;;;23341:5:0;20625:10;23330:16;20609:51;;;;-1:-1:-1;;;20609:51:0;;18568:2:1;20609:51:0;;;18550:21:1;18607:2;18587:18;;;18580:30;-1:-1:-1;;;18626:18:1;;;18619:49;18685:18;;20609:51:0;18540:169:1;20609:51:0;24060:16:::1;24079:5:::0;;-1:-1:-1;;;;;24095:11:0;;::::1;-1:-1:-1::0;;;;;;24095:11:0;::::1;;::::0;;24079:5:::1;::::0;24117:150:::1;18167:2;24133:1;:19;24117:150;;;-1:-1:-1::0;;;;;24174:24:0;;::::1;24204:5;24174:24:::0;;;:14:::1;:24;::::0;;;;;;;:27;;;;;;;;:35;;-1:-1:-1;;24174:35:0;;::::1;::::0;;;24239:5;;;;::::1;24224:21:::0;;;;;;;;:24;;;;;;;;;:31;;;;::::1;;::::0;;24199:1;24154:3:::1;24199:1:::0;24154:3:::1;:::i;:::-;;;;24117:150;;;-1:-1:-1::0;24313:5:0::1;::::0;24282:37:::1;::::0;;-1:-1:-1;;;;;11398:15:1;;;11380:34;;24313:5:0;;::::1;11445:2:1::0;11430:18;;11423:43;24282:37:0::1;::::0;11315:18:1;24282:37:0::1;11297:175:1::0;54384:182:0;54474:34;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;54526:21:0::1;:32:::0;;-1:-1:-1;;54526:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54384:182::o;48893:416::-;48992:25;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49043:23:0;::::1;49061:4;49043:23;::::0;::::1;::::0;:53:::1;;-1:-1:-1::0;49080:16:0::1;::::0;-1:-1:-1;;;;;49070:26:0;;::::1;49080:16:::0;::::1;49070:26;;49043:53;49035:62;;;::::0;::::1;;-1:-1:-1::0;;;;;49108:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;49108:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;49152:150:::1;;49179:11;::::0;:31:::1;::::0;-1:-1:-1;;;49179:31:0;;-1:-1:-1;;;;;11677:32:1;;;49179:31:0::1;::::0;::::1;11659:51:1::0;49208:1:0::1;11726:18:1::0;;;11719:34;49179:11:0::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;11632:18:1;;49179:31:0::1;11614:145:1::0;49152:150:0::1;49243:11;::::0;-1:-1:-1;;;;;49272:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;49243:47;;-1:-1:-1;;;49243:47:0;;::::1;::::0;::::1;11659:51:1::0;;;;11726:18;;;11719:34;49243:11:0::1;::::0;;::::1;;::::0;:20:::1;::::0;11632:18:1;;49243:47:0::1;11614:145:1::0;49498:181:0;49596:25;20847:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;20847:47:0;;;20846:48;20824:119;;;;-1:-1:-1;;;20824:119:0;;;;;;;:::i;:::-;20976:39;20992:10;21004;20976:15;:39::i;:::-;21159:21;:42;21189:10;21181:19;;;;;;;;:::i;:::-;21159:42;;;;;;;;;;;21055:165;;;;;;;;:::i;:::-;;;;;;;;;;;;;20954:292;;;;;-1:-1:-1;;;20954:292:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;49639:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;49639:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49498:181::o;13581:226::-;13701:7;13737:12;13729:6;;;;13721:29;;;;-1:-1:-1;;;13721:29:0;;;;;;;;:::i;:::-;-1:-1:-1;13761:9:0;13773:5;13777:1;13773;:5;:::i;:::-;13761:17;13581:226;-1:-1:-1;;;;;13581:226:0:o;38870:1551::-;-1:-1:-1;;;;;39022:21:0;;38996:4;39022:21;;;:13;:21;;;;;;;;39021:22;39013:57;;;;-1:-1:-1;;;39013:57:0;;18916:2:1;39013:57:0;;;18898:21:1;18955:2;18935:18;;;18928:30;-1:-1:-1;;;18974:18:1;;;18967:52;19036:18;;39013:57:0;18888:172:1;39013:57:0;39087:6;;;;39083:87;;;39117:41;39132:6;39140:9;39151:6;39117:14;:41::i;:::-;39110:48;;;;39083:87;39180:13;39196:17;39203:9;39196:6;:17::i;:::-;39180:33;;39263:8;39259:73;;;39288:32;39305:6;39313;39288:16;:32::i;:::-;39398:16;:14;:16::i;:::-;39394:92;;;39431:43;39440:8;:33;;;;;39452:21;39466:6;39452:13;:21::i;:::-;39431:8;:43::i;:::-;48505:10;;:15;;;39502:44;;-1:-1:-1;39530:16:0;;-1:-1:-1;;;;;39517:29:0;;;39530:16;;39517:29;39502:44;39498:130;;;-1:-1:-1;;;;;39571:17:0;;39591:1;39571:17;;;:9;:17;;;;;;39563:30;;;;;;39608:8;:6;:8::i;:::-;39660:90;;;;;;;;;;;-1:-1:-1;;;39660:90:0;;;;;;;;-1:-1:-1;;;;;39660:17:0;;-1:-1:-1;39660:17:0;;;:9;:17;;;;;;;;:90;;39696:6;;39660:21;:90::i;:::-;-1:-1:-1;;;;;39640:17:0;;;;;;:9;:17;;;;;:110;;;;39788:32;39650:6;39810:9;39788:13;:32::i;:::-;:104;;39886:6;39788:104;;;39836:34;39844:6;39852:9;39863:6;39836:7;:34::i;:::-;-1:-1:-1;;;;;39926:20:0;;;;;;:9;:20;;;;;;39763:129;;-1:-1:-1;39926:40:0;;39763:129;39926:24;:40::i;:::-;-1:-1:-1;;;;;39903:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;39984:24;;;;;:16;:24;;;;;;;39979:120;;40029:11;;-1:-1:-1;;;;;40058:17:0;;;;;;;:9;:17;;;;;;;;40029:47;;-1:-1:-1;;;40029:47:0;;;;;11659:51:1;;;;11726:18;;;11719:34;40029:11:0;;;;;;:20;;11632:18:1;;40029:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40025:63;;-1:-1:-1;;;;;40114:27:0;;;;;;:16;:27;;;;;;;;40109:159;;40179:11;;-1:-1:-1;;;;;40211:20:0;;;;;;;:9;:20;;;;;;;;40179:53;;-1:-1:-1;;;40179:53:0;;;;;11659:51:1;;;;11726:18;;;11719:34;40179:11:0;;;;;;:20;;11632:18:1;;40179:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40158:99;;40284:11;;40304:14;;40284:35;;-1:-1:-1;;;;;;40284:35:0;;;;;20333:25:1;;;;40284:11:0;;;;-1:-1:-1;;;;;40284:11:0;;:19;;20306:18:1;;40284:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40280:51;40365:9;-1:-1:-1;;;;;40348:43:0;40357:6;-1:-1:-1;;;;;40348:43:0;;40376:14;40348:43;;;;20333:25:1;;20321:2;20306:18;;20288:76;40348:43:0;;;;;;;;-1:-1:-1;40409:4:0;;38870:1551;-1:-1:-1;;;;;38870:1551:0:o;13437:136::-;13495:7;13522:43;13526:1;13529;13522:43;;;;;;;;;;;;;;;;;:3;:43::i;47686:744::-;35974:6;:13;;-1:-1:-1;;35974:13:0;35983:4;35974:13;;;47786:16:::1;::::0;;47800:1:::1;47786:16:::0;;;;;::::1;::::0;;-1:-1:-1;;47786:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;47823:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;47823:13:0;;;;47762:40;;-1:-1:-1;;;;;;47823:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;47823:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47813:4;47818:1;47813:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;47813:23:0::1;;;-1:-1:-1::0;;;;;47813:23:0::1;;;::::0;::::1;47865:4;47847;47852:1;47847:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47847:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;47900:6:::1;::::0;:134:::1;::::0;-1:-1:-1;;;47900:134:0;;:6;::::1;::::0;:57:::1;::::0;47983:6;;47900:134:::1;::::0;:6:::1;::::0;48008:4;;48014:2;;48018:15:::1;::::0;47900:134:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;47883:540;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;;;;;;;48241:1:0::1;48193:50;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;48193:50:0;;::::1;::::0;;;;;;;48151:108:::1;::::0;::::1;:::i;:::-;;;;;;;;48102:169;47883:540;;;;;-1:-1:-1::0;;;;;;;;;;;48298:113:0::1;;;;;:::i;:::-;;;;;;;;47883:540;;;48064:25;::::0;20333::1;;;48064::0::1;::::0;20321:2:1;20306:18;48064:25:0::1;;;;;;;47883:540;-1:-1:-1::0;;36010:6:0;:14;;-1:-1:-1;;36010:14:0;;;-1:-1:-1;47686:744:0:o;13248:181::-;13306:7;;13338:5;13342:1;13338;:5;:::i;:::-;13326:17;;13367:1;13362;:6;;13354:46;;;;-1:-1:-1;;;13354:46:0;;16271:2:1;13354:46:0;;;16253:21:1;16310:2;16290:18;;;16283:30;16349:29;16329:18;;;16322:57;16396:18;;13354:46:0;16243:177:1;13815:250:0;13873:7;13897:6;13893:47;;-1:-1:-1;13927:1:0;13920:8;;13893:47;13952:9;13964:5;13968:1;13964;:5;:::i;:::-;13952:17;-1:-1:-1;13997:1:0;13988:5;13992:1;13952:17;13988:5;:::i;:::-;:10;13980:56;;;;-1:-1:-1;;;13980:56:0;;17754:2:1;13980:56:0;;;17736:21:1;17793:2;17773:18;;;17766:30;17832:34;17812:18;;;17805:62;-1:-1:-1;;;17883:18:1;;;17876:31;17924:19;;13980:56:0;17726:223:1;14073:132:0;14131:7;14158:39;14162:1;14165;14158:39;;;;;;;;;;;;;;;;;:3;:39::i;40429:401::-;40593:90;;;;;;;;;;;-1:-1:-1;;;40593:90:0;;;;;;;;-1:-1:-1;;;;;40593:17:0;;40556:4;40593:17;;;:9;:17;;;;;;;:90;;40629:6;;40593:21;:90::i;:::-;-1:-1:-1;;;;;40573:17:0;;;;;;;:9;:17;;;;;;:110;;;;40717:20;;;;;;;:32;;40742:6;40717:24;:32::i;:::-;-1:-1:-1;;;;;40694:20:0;;;;;;;:9;:20;;;;;;;:55;;;;40765:35;;;;;;;;;;40793:6;20333:25:1;;20321:2;20306:18;;20288:76;40765:35:0;;;;;;;;-1:-1:-1;40818:4:0;40429:401;;;;;:::o;42107:263::-;42165:4;42182:25;42210:5;42182:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42182:33:0;;;;;;;;;;;;;;;;;;;;;;;42231:9;42226:114;42250:8;:15;42246:1;:19;42226:114;;;42304:8;42313:1;42304:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;42291:24:0;:9;-1:-1:-1;;;;;42291:24:0;;42287:41;;;-1:-1:-1;42324:4:0;;42107:263;-1:-1:-1;;;42107:263:0:o;42287:41::-;42267:3;;;;:::i;:::-;;;;42226:114;;;-1:-1:-1;42357:5:0;;42107:263;-1:-1:-1;;;42107:263:0:o;40838:211::-;40953:16;;40943:6;:26;;:53;;;-1:-1:-1;;;;;;40973:23:0;;;;;;:15;:23;;;;;;;;40943:53;40921:120;;;;-1:-1:-1;;;40921:120:0;;15925:2:1;40921:120:0;;;15907:21:1;15964:2;15944:18;;;15937:30;-1:-1:-1;;;15983:18:1;;;15976:47;16040:18;;40921:120:0;15897:167:1;42865:234:0;42965:16;;42914:4;;-1:-1:-1;;;;;42965:16:0;42951:10;:30;;;;:54;;-1:-1:-1;42999:6:0;;;;42998:7;42951:54;:82;;;;-1:-1:-1;43022:11:0;;;;42951:82;:140;;;;-1:-1:-1;;43078:13:0;;43068:4;43050:24;;;;:9;:24;;;;;;:41;;;42865:234::o;42378:479::-;42519:18;;42477:4;;42519:18;;:75;;;;;42578:16;;42554:21;:40;42519:75;:268;;;;;42667:105;42751:20;;42668:59;42703:23;;42668:30;42694:3;42668:21;:25;;:30;;;;:::i;42667:105::-;42611:21;:176;42519:268;:330;;;;-1:-1:-1;;42824:25:0;;-1:-1:-1;42804:45:0;;42378:479::o;43107:4415::-;35974:6;:13;;-1:-1:-1;;35974:13:0;35983:4;35974:13;;;43234:15:::1;::::0;43264:26:::1;::::0;35974:6;;43204:97:::1;::::0;:15:::1;:97::i;:::-;:142;;43334:12;;43204:142;;;43317:1;43204:142;43174:172;;43357:23;43383:92;43473:1;43383:75;43446:11;;43383:48;43411:19;43383:13;;:27;;:48;;;;:::i;:92::-;43357:118;;43486:20;43509:34;43527:15;43509:13;;:17;;:34;;;;:::i;:::-;43580:16;::::0;;43594:1:::1;43580:16:::0;;;;;::::1;::::0;;43486:57;;-1:-1:-1;43556:21:0::1;::::0;43580:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;43580:16:0::1;43556:40;;43625:4;43607;43612:1;43607:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43607:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;43651:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;43651:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;43607:7;;43651:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43641:4;43646:1;43641:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43641:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;43752:6:::1;::::0;:212:::1;::::0;-1:-1:-1;;;43752:212:0;;43701:21:::1;::::0;43752:6;;;::::1;::::0;:57:::1;::::0;:212:::1;::::0;43828:12;;43677:21:::1;::::0;43879:4;;43910::::1;::::0;43934:15:::1;::::0;43752:212:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;43735:2477;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;45948:106;46036:1;45988:50;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;45988:50:0;;::::1;::::0;;;;;;;45948:106:::1;::::0;::::1;:::i;:::-;;;;;;;;45899:167;43735:2477;;;;;46093:107;;;;;19963:2:1::0;19945:21;;;20002:2;19982:18;;;19975:30;20041:34;20036:2;20021:18;;20014:62;20112:27;20107:2;20092:18;;20085:55;20172:3;20157:19;;19935:247;46093:107:0::1;;;;;;;;43735:2477;;;43989:17;44009:40;:21;44035:13:::0;44009:25:::1;:40::i;:::-;43989:60:::0;-1:-1:-1;44066:19:0::1;44088:43;44104:26;:19:::0;44128:1:::1;44104:23;:26::i;:::-;44088:11;::::0;;:15:::1;:43::i;:::-;44066:65:::0;-1:-1:-1;44148:26:0::1;44177:100;44275:1;44177:79;44066:65:::0;44177:79;:9;44205:19;44177:27:::1;:48::i;:100::-;44148:129;;44292:27;44322:77;44373:11;44322:28;44336:13;;44322:9;:13;;:28;;;;:::i;:77::-;44292:107;;44414:26;44443:76;44493:11;44443:27;44457:12;;44443:9;:13;;:27;;;;:::i;:76::-;44414:105;;44540:11;;;;;;;;;-1:-1:-1::0;;;;;44540:11:0::1;-1:-1:-1::0;;;;;44540:19:0::1;;44567;44540:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;44744:20:0::1;::::0;44736:126:::1;::::0;44634:32:::1;::::0;;;-1:-1:-1;;;;;44744:20:0;;::::1;::::0;44838:5:::1;::::0;44796:18;;44634:32;44736:126;44634:32;44736:126;44796:18;44744:20;44838:5;44736:126:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44615:247;;;;44883:27;44879:371;;;44936:126;44982:18;45023:20;44936:126;;;;;;;:::i;:::-;;;;;;;;44879:371;;;45108:126;45154:18;45195:20;45108:126;;;;;;;:::i;:::-;;;;;;;;44879:371;45270:19:::0;;45266:570:::1;;45335:6;::::0;45549:21:::1;::::0;45335:300:::1;::::0;-1:-1:-1;;;45335:300:0;;45419:4:::1;45335:300;::::0;::::1;13342:34:1::0;13392:18;;;13385:34;;;45335:6:0::1;13435:18:1::0;;;13428:34;;;13478:18;;;13471:34;-1:-1:-1;;;;;45549:21:0;;::::1;13521:19:1::0;;;13514:44;45597:15:0::1;13574:19:1::0;;;13567:35;45335:6:0;::::1;::::0;:22:::1;::::0;45365:18;;13276:19:1;;45335:300:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;-1:-1:-1::0;45335:300:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;45335:300:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;45310:511;;45784:17;::::0;;45796:1:::1;14736:25:1::0;;;14792:2;14777:18;;14770:34;45784:17:0::1;::::0;14709:18:1;45784:17:0::1;;;;;;;45310:511;;;-1:-1:-1::0;;45681:48:0::1;::::0;;14736:25:1;;;14792:2;14777:18;;14770:34;;;45681:48:0::1;::::0;-1:-1:-1;14709:18:1;45681:48:0::1;;;;;;;45310:511;45857:29;::::0;20333:25:1;;;45857:29:0::1;::::0;20321:2:1;20306:18;45857:29:0::1;;;;;;;43974:1924;;;;;;;43735:2477;46228:13;46224:1291;;;46258:22;46283:21;46258:46;;46319:25;46347:80;46423:3;46347:57;46380:23;;46347:14;:32;;:57;;;;:::i;:80::-;46469:16;::::0;;46483:1:::1;46469:16:::0;;;;;::::1;::::0;;46319:108;;-1:-1:-1;46442:24:0::1;::::0;46469:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;46513:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;46513:13:0;;;;46442:43;;-1:-1:-1;;;;;;46513:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;46513:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46500:7;46508:1;46500:10;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;46500:26:0::1;;;-1:-1:-1::0;;;;;46500:26:0::1;;;::::0;::::1;46562:4;46541:7;46549:1;46541:10;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;46541:26:0::1;;;-1:-1:-1::0;;;;;46541:26:0::1;;;::::0;::::1;46605:18;46582:922;46659:20;;46646:10;:33;46582:922;;;46770:6;::::0;46922:4:::1;::::0;46770:175:::1;::::0;-1:-1:-1;;;46770:175:0;;-1:-1:-1;;;;;46770:6:0;;::::1;::::0;:57:::1;::::0;46861:17;;46770:175:::1;::::0;:6:::1;::::0;46905:7;;46922:4;::::1;::::0;46929:15:::1;::::0;46770:175:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;46745:744;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;;;;;;;47233:1:0::1;47185:50;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;47185:50:0;;::::1;::::0;;;;;;;47105:180:::1;::::0;::::1;:::i;:::-;;;;;;;;47048:257;46745:744;;;;;-1:-1:-1::0;;;;;;;;;;;47340:129:0::1;;;;;:::i;:::-;;;;;;;;46745:744;;;46991:36;::::0;20333:25:1;;;46991:36:0::1;::::0;20321:2:1;20306:18;46991:36:0::1;;;;;;;46745:744;46698:12:::0;::::1;::::0;::::1;:::i;:::-;;;;46582:922;;;;46243:1272;;;46224:1291;-1:-1:-1::0;;36010:6:0;:14;;-1:-1:-1;;36010:14:0;;;-1:-1:-1;;;;43107:4415:0:o;48536:126::-;48587:12;48574:10;:25;;;48615:39;;;;;;48638:15;;14736:25:1;;;14792:2;14777:18;;14770:34;14724:2;14709:18;;14691:119;48615:39:0;;;;;;;;48536:126::o;41057:467::-;-1:-1:-1;;;;;41191:19:0;;41165:4;41191:19;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;41214:22:0;;;;;;:11;:22;;;;;;;;41191:45;:60;;;-1:-1:-1;48505:10:0;;:15;41191:60;41187:91;;;-1:-1:-1;41273:5:0;41266:12;;41187:91;41291:25;41319:5;41291:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41291:33:0;;;;;;;;;;;;;;;;;;;;;;;41342:9;41337:139;41361:8;:15;41357:1;:19;41337:139;;;41412:8;41421:1;41412:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;41402:21:0;:6;-1:-1:-1;;;;;41402:21:0;;:49;;;;41440:8;41449:1;41440:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;41427:24:0;:9;-1:-1:-1;;;;;41427:24:0;;41402:49;41398:66;;;41460:4;41453:11;;;;;;41398:66;41378:3;;;;:::i;:::-;;;;41337:139;;;-1:-1:-1;;41495:21:0;;;;;41057:467;-1:-1:-1;;;41057:467:0:o;41667:432::-;41787:7;41807:17;41827:86;41888:14;;41827:42;41838:30;41850:17;41857:9;41850:6;:17::i;41838:30::-;41827:6;;:10;:42::i;:86::-;41971:4;41953:24;;;;:9;:24;;;;;;41807:106;;-1:-1:-1;41953:39:0;;41807:106;41953:28;:39::i;:::-;41944:4;41926:24;;;;:9;:24;;;;;;;:66;;;;42008:42;;-1:-1:-1;;;;;42008:42:0;;;;;;;42040:9;20333:25:1;;20321:2;20306:18;;20288:76;42008:42:0;;;;;;;;42070:21;:6;42081:9;42070:10;:21::i;14213:379::-;14333:7;14435:12;14428:5;14420:28;;;;-1:-1:-1;;;14420:28:0;;;;;;;;:::i;:::-;-1:-1:-1;14459:9:0;14471:5;14475:1;14471;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:556::-;222:5;275:3;268:4;260:6;256:17;252:27;242:2;;293:1;290;283:12;242:2;329:6;316:20;355:18;351:2;348:26;345:2;;;377:18;;:::i;:::-;426:2;420:9;438:67;493:2;474:13;;-1:-1:-1;;470:27:1;499:4;466:38;420:9;438:67;:::i;:::-;529:2;521:6;514:18;575:3;568:4;563:2;555:6;551:15;547:26;544:35;541:2;;;592:1;589;582:12;541:2;656;649:4;641:6;637:17;630:4;622:6;618:17;605:54;703:1;679:15;;;696:4;675:26;668:37;;;;683:6;232:503;-1:-1:-1;;;232:503:1:o;740:247::-;799:6;852:2;840:9;831:7;827:23;823:32;820:2;;;868:1;865;858:12;820:2;907:9;894:23;926:31;951:5;926:31;:::i;992:251::-;1062:6;1115:2;1103:9;1094:7;1090:23;1086:32;1083:2;;;1131:1;1128;1121:12;1083:2;1163:9;1157:16;1182:31;1207:5;1182:31;:::i;1508:388::-;1576:6;1584;1637:2;1625:9;1616:7;1612:23;1608:32;1605:2;;;1653:1;1650;1643:12;1605:2;1692:9;1679:23;1711:31;1736:5;1711:31;:::i;:::-;1761:5;-1:-1:-1;1818:2:1;1803:18;;1790:32;1831:33;1790:32;1831:33;:::i;:::-;1883:7;1873:17;;;1595:301;;;;;:::o;1901:456::-;1978:6;1986;1994;2047:2;2035:9;2026:7;2022:23;2018:32;2015:2;;;2063:1;2060;2053:12;2015:2;2102:9;2089:23;2121:31;2146:5;2121:31;:::i;:::-;2171:5;-1:-1:-1;2228:2:1;2213:18;;2200:32;2241:33;2200:32;2241:33;:::i;:::-;2005:352;;2293:7;;-1:-1:-1;;;2347:2:1;2332:18;;;;2319:32;;2005:352::o;2362:762::-;2469:6;2477;2485;2538:2;2526:9;2517:7;2513:23;2509:32;2506:2;;;2554:1;2551;2544:12;2506:2;2593:9;2580:23;2612:31;2637:5;2612:31;:::i;:::-;2662:5;-1:-1:-1;2718:2:1;2703:18;;2690:32;2741:18;2771:14;;;2768:2;;;2798:1;2795;2788:12;2768:2;2836:6;2825:9;2821:22;2811:32;;2881:7;2874:4;2870:2;2866:13;2862:27;2852:2;;2903:1;2900;2893:12;2852:2;2943;2930:16;2969:2;2961:6;2958:14;2955:2;;;2985:1;2982;2975:12;2955:2;3038:7;3033:2;3023:6;3020:1;3016:14;3012:2;3008:23;3004:32;3001:45;2998:2;;;3059:1;3056;3049:12;2998:2;3090;3086;3082:11;3072:21;;3112:6;3102:16;;;;;2496:628;;;;;:::o;3129:315::-;3194:6;3202;3255:2;3243:9;3234:7;3230:23;3226:32;3223:2;;;3271:1;3268;3261:12;3223:2;3310:9;3297:23;3329:31;3354:5;3329:31;:::i;:::-;3379:5;-1:-1:-1;3403:35:1;3434:2;3419:18;;3403:35;:::i;:::-;3393:45;;3213:231;;;;;:::o;3449:412::-;3531:6;3539;3592:2;3580:9;3571:7;3567:23;3563:32;3560:2;;;3608:1;3605;3598:12;3560:2;3647:9;3634:23;3666:31;3691:5;3666:31;:::i;:::-;3716:5;-1:-1:-1;3773:2:1;3758:18;;3745:32;3808:2;3796:15;;3786:2;;3825:1;3822;3815:12;3866:457;3944:6;3952;4005:2;3993:9;3984:7;3980:23;3976:32;3973:2;;;4021:1;4018;4011:12;3973:2;4060:9;4047:23;4079:31;4104:5;4079:31;:::i;:::-;4129:5;-1:-1:-1;4185:2:1;4170:18;;4157:32;4212:18;4201:30;;4198:2;;;4244:1;4241;4234:12;4198:2;4267:50;4309:7;4300:6;4289:9;4285:22;4267:50;:::i;:::-;4257:60;;;3963:360;;;;;:::o;4328:315::-;4396:6;4404;4457:2;4445:9;4436:7;4432:23;4428:32;4425:2;;;4473:1;4470;4463:12;4425:2;4512:9;4499:23;4531:31;4556:5;4531:31;:::i;:::-;4581:5;4633:2;4618:18;;;;4605:32;;-1:-1:-1;;;4415:228:1:o;4648:180::-;4704:6;4757:2;4745:9;4736:7;4732:23;4728:32;4725:2;;;4773:1;4770;4763:12;4725:2;4796:26;4812:9;4796:26;:::i;4833:248::-;4898:6;4906;4959:2;4947:9;4938:7;4934:23;4930:32;4927:2;;;4975:1;4972;4965:12;4927:2;4998:26;5014:9;4998:26;:::i;5086:454::-;5178:6;5186;5194;5202;5210;5263:3;5251:9;5242:7;5238:23;5234:33;5231:2;;;5280:1;5277;5270:12;5231:2;5303:26;5319:9;5303:26;:::i;:::-;5293:36;5376:2;5361:18;;5348:32;;-1:-1:-1;5427:2:1;5412:18;;5399:32;;5478:2;5463:18;;5450:32;;-1:-1:-1;5529:3:1;5514:19;5501:33;;-1:-1:-1;5221:319:1;-1:-1:-1;;;5221:319:1:o;5545:322::-;5614:6;5667:2;5655:9;5646:7;5642:23;5638:32;5635:2;;;5683:1;5680;5673:12;5635:2;5723:9;5710:23;5756:18;5748:6;5745:30;5742:2;;;5788:1;5785;5778:12;5742:2;5811:50;5853:7;5844:6;5833:9;5829:22;5811:50;:::i;:::-;5801:60;5625:242;-1:-1:-1;;;;5625:242:1:o;5872:499::-;5949:6;5957;6010:2;5998:9;5989:7;5985:23;5981:32;5978:2;;;6026:1;6023;6016:12;5978:2;6066:9;6053:23;6095:18;6136:2;6128:6;6125:14;6122:2;;;6152:1;6149;6142:12;6122:2;6175:50;6217:7;6208:6;6197:9;6193:22;6175:50;:::i;:::-;6165:60;;6275:2;6264:9;6260:18;6247:32;6234:45;;6319:2;6312:5;6308:14;6301:5;6298:25;6288:2;;6337:1;6334;6327:12;6288:2;;6360:5;6350:15;;;5968:403;;;;;:::o;6376:180::-;6435:6;6488:2;6476:9;6467:7;6463:23;6459:32;6456:2;;;6504:1;6501;6494:12;6456:2;-1:-1:-1;6527:23:1;;6446:110;-1:-1:-1;6446:110:1:o;6561:248::-;6629:6;6637;6690:2;6678:9;6669:7;6665:23;6661:32;6658:2;;;6706:1;6703;6696:12;6658:2;-1:-1:-1;;6729:23:1;;;6799:2;6784:18;;;6771:32;;-1:-1:-1;6648:161:1:o;6814:306::-;6902:6;6910;6918;6971:2;6959:9;6950:7;6946:23;6942:32;6939:2;;;6987:1;6984;6977:12;6939:2;7016:9;7010:16;7000:26;;7066:2;7055:9;7051:18;7045:25;7035:35;;7110:2;7099:9;7095:18;7089:25;7079:35;;6929:191;;;;;:::o;7125:523::-;7229:6;7237;7245;7253;7261;7269;7322:3;7310:9;7301:7;7297:23;7293:33;7290:2;;;7339:1;7336;7329:12;7290:2;-1:-1:-1;;7362:23:1;;;7432:2;7417:18;;7404:32;;-1:-1:-1;7483:2:1;7468:18;;7455:32;;7534:2;7519:18;;7506:32;;-1:-1:-1;7585:3:1;7570:19;;7557:33;;-1:-1:-1;7637:3:1;7622:19;7609:33;;-1:-1:-1;7280:368:1;-1:-1:-1;7280:368:1:o;7653:461::-;7706:3;7744:5;7738:12;7771:6;7766:3;7759:19;7797:4;7826:2;7821:3;7817:12;7810:19;;7863:2;7856:5;7852:14;7884:1;7894:195;7908:6;7905:1;7902:13;7894:195;;;7973:13;;-1:-1:-1;;;;;7969:39:1;7957:52;;8029:12;;;;8064:15;;;;8005:1;7923:9;7894:195;;;-1:-1:-1;8105:3:1;;7714:400;-1:-1:-1;;;;;7714:400:1:o;8119:257::-;8160:3;8198:5;8192:12;8225:6;8220:3;8213:19;8241:63;8297:6;8290:4;8285:3;8281:14;8274:4;8267:5;8263:16;8241:63;:::i;:::-;8358:2;8337:15;-1:-1:-1;;8333:29:1;8324:39;;;;8365:4;8320:50;;8168:208;-1:-1:-1;;8168:208:1:o;8381:273::-;8566:6;8558;8553:3;8540:33;8522:3;8592:16;;8617:13;;;8592:16;8530:124;-1:-1:-1;8530:124:1:o;8659:276::-;8790:3;8828:6;8822:13;8844:53;8890:6;8885:3;8878:4;8870:6;8866:17;8844:53;:::i;:::-;8913:16;;;;;8798:137;-1:-1:-1;;8798:137:1:o;8940:446::-;9202:29;9197:3;9190:42;9172:3;9261:6;9255:13;9277:62;9332:6;9327:2;9322:3;9318:12;9311:4;9303:6;9299:17;9277:62;:::i;:::-;9359:16;;;;9377:2;9355:25;;9180:206;-1:-1:-1;;9180:206:1:o;9601:1354::-;9860:34;9855:3;9848:47;9830:3;9914:2;-1:-1:-1;;;9941:2:1;9936:3;9932:12;9925:32;9976:2;9998:1;10031:6;10025:13;10061:3;10083:1;10111:9;10107:2;10103:18;10093:28;;10171:2;10160:9;10156:18;10193;10183:2;;10237:4;10229:6;10225:17;10215:27;;10183:2;10290;10282:6;10279:14;10259:18;10256:38;10253:2;;;-1:-1:-1;;;10317:33:1;;10373:4;10370:1;10363:15;10403:4;10324:3;10391:17;10253:2;10434:18;10461:122;;;;10597:1;10592:338;;;;10427:503;;10461:122;-1:-1:-1;;10503:24:1;;10489:12;;;10482:46;10552:16;;;10548:25;;;-1:-1:-1;10461:122:1;;10592:338;22291:1;22284:14;;;22328:4;22315:18;;10687:1;10701:174;10715:6;10712:1;10709:13;10701:174;;;10802:14;;10784:11;;;10780:20;;10773:44;10845:16;;;;10730:10;;10701:174;;;10705:3;;10917:2;10908:6;10903:3;10899:16;10895:25;10888:32;;10427:503;-1:-1:-1;10946:3:1;;9838:1117;-1:-1:-1;;;;;;;;;9838:1117:1:o;11764:561::-;-1:-1:-1;;;;;11979:32:1;;11961:51;;12048:2;12043;12028:18;;12021:30;;;12067:18;;12060:34;;;12087:6;12137;12131:3;12116:19;;12103:49;12202:1;12196:3;12187:6;12176:9;12172:22;12168:32;12161:43;11942:4;12272:3;12265:2;12261:7;12256:2;12248:6;12244:15;12240:29;12229:9;12225:45;12221:55;12213:63;;12312:6;12307:2;12296:9;12292:18;12285:34;11951:374;;;;;;;:::o;12330:387::-;-1:-1:-1;;;;;12535:32:1;;12517:51;;12604:2;12599;12584:18;;12577:30;;;-1:-1:-1;;12624:44:1;;12649:18;;12641:6;12624:44;:::i;:::-;12616:52;;12704:6;12699:2;12688:9;12684:18;12677:34;12507:210;;;;;;:::o;14031:510::-;14302:6;14291:9;14284:25;14345:3;14340:2;14329:9;14325:18;14318:31;14265:4;14366:57;14418:3;14407:9;14403:19;14395:6;14366:57;:::i;:::-;-1:-1:-1;;;;;14459:32:1;;;;14454:2;14439:18;;14432:60;-1:-1:-1;14523:2:1;14508:18;14501:34;14358:65;14274:267;-1:-1:-1;;14274:267:1:o;14815:219::-;14964:2;14953:9;14946:21;14927:4;14984:44;15024:2;15013:9;15009:18;15001:6;14984:44;:::i;15039:290::-;15216:2;15205:9;15198:21;15179:4;15236:44;15276:2;15265:9;15261:18;15253:6;15236:44;:::i;:::-;15228:52;;15316:6;15311:2;15300:9;15296:18;15289:34;15188:141;;;;;:::o;15334:384::-;15537:2;15526:9;15519:21;15500:4;15557:44;15597:2;15586:9;15582:18;15574:6;15557:44;:::i;:::-;15549:52;;15637:6;15632:2;15621:9;15617:18;15610:34;15692:18;15684:6;15680:31;15675:2;15664:9;15660:18;15653:59;15509:209;;;;;;:::o;16770:425::-;16972:2;16954:21;;;17011:2;16991:18;;;16984:30;17050:34;17045:2;17030:18;;17023:62;17121:31;17116:2;17101:18;;17094:59;17185:3;17170:19;;16944:251::o;19065:345::-;19267:2;19249:21;;;19306:2;19286:18;;;19279:30;-1:-1:-1;;;19340:2:1;19325:18;;19318:51;19401:2;19386:18;;19239:171::o;20369:288::-;20544:6;20533:9;20526:25;20587:2;20582;20571:9;20567:18;20560:30;20507:4;20607:44;20647:2;20636:9;20632:18;20624:6;20607:44;:::i;20662:582::-;20961:6;20950:9;20943:25;21004:6;20999:2;20988:9;20984:18;20977:34;21047:3;21042:2;21031:9;21027:18;21020:31;20924:4;21068:57;21120:3;21109:9;21105:19;21097:6;21068:57;:::i;:::-;-1:-1:-1;;;;;21161:32:1;;;;21156:2;21141:18;;21134:60;-1:-1:-1;21225:3:1;21210:19;21203:35;21060:65;20933:311;-1:-1:-1;;;20933:311:1:o;21691:522::-;21769:4;21775:6;21835:11;21822:25;21929:2;21925:7;21914:8;21898:14;21894:29;21890:43;21870:18;21866:68;21856:2;;21948:1;21945;21938:12;21856:2;21975:33;;22027:20;;;-1:-1:-1;22070:18:1;22059:30;;22056:2;;;22102:1;22099;22092:12;22056:2;22135:4;22123:17;;-1:-1:-1;22166:14:1;22162:27;;;22152:38;;22149:2;;;22203:1;22200;22193:12;22149:2;21786:427;;;;;:::o;22344:128::-;22384:3;22415:1;22411:6;22408:1;22405:13;22402:2;;;22421:18;;:::i;:::-;-1:-1:-1;22457:9:1;;22392:80::o;22477:236::-;22516:3;22544:18;22589:2;22586:1;22582:10;22619:2;22616:1;22612:10;22650:3;22646:2;22642:12;22637:3;22634:21;22631:2;;;22658:18;;:::i;:::-;22694:13;;22524:189;-1:-1:-1;;;;22524:189:1:o;22718:217::-;22758:1;22784;22774:2;;22828:10;22823:3;22819:20;22816:1;22809:31;22863:4;22860:1;22853:15;22891:4;22888:1;22881:15;22774:2;-1:-1:-1;22920:9:1;;22764:171::o;22940:168::-;22980:7;23046:1;23042;23038:6;23034:14;23031:1;23028:21;23023:1;23016:9;23009:17;23005:45;23002:2;;;23053:18;;:::i;:::-;-1:-1:-1;23093:9:1;;22992:116::o;23113:125::-;23153:4;23181:1;23178;23175:8;23172:2;;;23186:18;;:::i;:::-;-1:-1:-1;23223:9:1;;23162:76::o;23243:258::-;23315:1;23325:113;23339:6;23336:1;23333:13;23325:113;;;23415:11;;;23409:18;23396:11;;;23389:39;23361:2;23354:10;23325:113;;;23456:6;23453:1;23450:13;23447:2;;;-1:-1:-1;;23491:1:1;23473:16;;23466:27;23296:205::o;23506:249::-;23616:2;23597:13;;-1:-1:-1;;23593:27:1;23581:40;;23651:18;23636:34;;23672:22;;;23633:62;23630:2;;;23698:18;;:::i;:::-;23734:2;23727:22;-1:-1:-1;;23553:202:1:o;23760:135::-;23799:3;-1:-1:-1;;23820:17:1;;23817:2;;;23840:18;;:::i;:::-;-1:-1:-1;23887:1:1;23876:13;;23807:88::o;23900:127::-;23961:10;23956:3;23952:20;23949:1;23942:31;23992:4;23989:1;23982:15;24016:4;24013:1;24006:15;24032:127;24093:10;24088:3;24084:20;24081:1;24074:31;24124:4;24121:1;24114:15;24148:4;24145:1;24138:15;24164:127;24225:10;24220:3;24216:20;24213:1;24206:31;24256:4;24253:1;24246:15;24280:4;24277:1;24270:15;24296:127;24357:10;24352:3;24348:20;24345:1;24338:31;24388:4;24385:1;24378:15;24412:4;24409:1;24402:15;24428:127;24489:10;24484:3;24480:20;24477:1;24470:31;24520:4;24517:1;24510:15;24544:4;24541:1;24534:15;24560:179;24595:3;24637:1;24619:16;24616:23;24613:2;;;24683:1;24680;24677;24662:23;-1:-1:-1;24720:1:1;24714:8;24709:3;24705:18;24613:2;24603:136;:::o;24744:671::-;24783:3;24825:4;24807:16;24804:26;24801:2;;;24791:624;:::o;24801:2::-;24867;24861:9;-1:-1:-1;;24932:16:1;24928:25;;24925:1;24861:9;24904:50;24983:4;24977:11;25007:16;25042:18;25113:2;25106:4;25098:6;25094:17;25091:25;25086:2;25078:6;25075:14;25072:45;25069:2;;;25120:5;;;;;24791:624;:::o;25069:2::-;25157:6;25151:4;25147:17;25136:28;;25193:3;25187:10;25220:2;25212:6;25209:14;25206:2;;;25226:5;;;;;;24791:624;:::o;25206:2::-;25310;25291:16;25285:4;25281:27;25277:36;25270:4;25261:6;25256:3;25252:16;25248:27;25245:69;25242:2;;;25317:5;;;;;;24791:624;:::o;25242:2::-;25333:57;25384:4;25375:6;25367;25363:19;25359:30;25353:4;25333:57;:::i;:::-;-1:-1:-1;25406:3:1;;24791:624;-1:-1:-1;;;;;24791:624:1:o;25420:131::-;-1:-1:-1;;;;;25495:31:1;;25485:42;;25475:2;;25541:1;25538;25531:12;25475:2;25465:86;:::o

Swarm Source

ipfs://7bfb50971048ebfa1134c04557691b9be1f1fc3a075686a0413f6c327cb521a0
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.