ETH Price: $3,663.37 (+1.72%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Remove LP145594182022-04-10 18:02:431000 days ago1649613763IN
0x8B9B0910...963667DeF
0 ETH0.016353276.90884861
Approve145121152022-04-03 8:33:131007 days ago1648974793IN
0x8B9B0910...963667DeF
0 ETH0.0021805146.72208206
Approve144818432022-03-29 15:16:051012 days ago1648566965IN
0x8B9B0910...963667DeF
0 ETH0.0029333862.85380708
Update Ratios144719312022-03-28 2:09:351013 days ago1648433375IN
0x8B9B0910...963667DeF
0 ETH0.0013524936.19012551
Approve144700722022-03-27 19:08:591014 days ago1648408139IN
0x8B9B0910...963667DeF
0 ETH0.0018517439.67743941
Approve144700692022-03-27 19:08:431014 days ago1648408123IN
0x8B9B0910...963667DeF
0 ETH0.0020662744.27408518
Approve144700662022-03-27 19:07:541014 days ago1648408074IN
0x8B9B0910...963667DeF
0 ETH0.001899640.70287697
Approve144700602022-03-27 19:06:491014 days ago1648408009IN
0x8B9B0910...963667DeF
0 ETH0.0021784246.67721802
Approve144700112022-03-27 18:55:481014 days ago1648407348IN
0x8B9B0910...963667DeF
0 ETH0.0024497752.49143202
Approve144699642022-03-27 18:44:471014 days ago1648406687IN
0x8B9B0910...963667DeF
0 ETH0.001766837.85747794
Update Ratios144699252022-03-27 18:34:541014 days ago1648406094IN
0x8B9B0910...963667DeF
0 ETH0.0010604333.36394691
Enable Manual Sw...144698582022-03-27 18:21:451014 days ago1648405305IN
0x8B9B0910...963667DeF
0 ETH0.0014212847.51539325
Approve144698462022-03-27 18:19:111014 days ago1648405151IN
0x8B9B0910...963667DeF
0 ETH0.002199647.13096127
Approve144698312022-03-27 18:16:361014 days ago1648404996IN
0x8B9B0910...963667DeF
0 ETH0.0033925772.69278897
Approve144698212022-03-27 18:14:021014 days ago1648404842IN
0x8B9B0910...963667DeF
0 ETH0.0034095473.05635939
Transfer144698082022-03-27 18:11:011014 days ago1648404661IN
0x8B9B0910...963667DeF
0 ETH0.0035689152.96068193
Approve144697742022-03-27 18:03:301014 days ago1648404210IN
0x8B9B0910...963667DeF
0 ETH0.0019336141.43164452
Approve144697622022-03-27 18:01:361014 days ago1648404096IN
0x8B9B0910...963667DeF
0 ETH0.0022701348.64217433
Update Limits144697602022-03-27 18:01:261014 days ago1648404086IN
0x8B9B0910...963667DeF
0 ETH0.0022378747.34934045
Approve144697592022-03-27 18:00:571014 days ago1648404057IN
0x8B9B0910...963667DeF
0 ETH0.0020161443.20003662
Approve144697572022-03-27 18:00:251014 days ago1648404025IN
0x8B9B0910...963667DeF
0 ETH0.0019114140.95594777
Approve144697552022-03-27 17:59:271014 days ago1648403967IN
0x8B9B0910...963667DeF
0 ETH0.0016808936.01666386
Approve144697542022-03-27 17:59:131014 days ago1648403953IN
0x8B9B0910...963667DeF
0 ETH0.0015470633.14891916
Approve144697502022-03-27 17:58:431014 days ago1648403923IN
0x8B9B0910...963667DeF
0 ETH0.0022188747.54399994
Lock Liquidity T...144697492022-03-27 17:58:361014 days ago1648403916IN
0x8B9B0910...963667DeF
0 ETH0.0020344743.29592506
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
145594182022-04-10 18:02:431000 days ago1649613763
0x8B9B0910...963667DeF
4.19603668 ETH
145594182022-04-10 18:02:431000 days ago1649613763
0x8B9B0910...963667DeF
3.95971325 ETH
144697892022-03-27 18:06:171014 days ago1648404377
0x8B9B0910...963667DeF
0.01028367 ETH
144697892022-03-27 18:06:171014 days ago1648404377
0x8B9B0910...963667DeF
0.02570918 ETH
144697892022-03-27 18:06:171014 days ago1648404377
0x8B9B0910...963667DeF
0.00964094 ETH
144697892022-03-27 18:06:171014 days ago1648404377
0x8B9B0910...963667DeF
0.00009966 ETH
144697892022-03-27 18:06:171014 days ago1648404377
0x8B9B0910...963667DeF
0.00642065 ETH
144697892022-03-27 18:06:171014 days ago1648404377
0x8B9B0910...963667DeF
0.10273044 ETH
144697752022-03-27 18:04:001014 days ago1648404240
0x8B9B0910...963667DeF
0.0120542 ETH
144697752022-03-27 18:04:001014 days ago1648404240
0x8B9B0910...963667DeF
0.03013551 ETH
144697752022-03-27 18:04:001014 days ago1648404240
0x8B9B0910...963667DeF
0.01130081 ETH
144697752022-03-27 18:04:001014 days ago1648404240
0x8B9B0910...963667DeF
0.00011682 ETH
144697752022-03-27 18:04:001014 days ago1648404240
0x8B9B0910...963667DeF
0.00752609 ETH
144697752022-03-27 18:04:001014 days ago1648404240
0x8B9B0910...963667DeF
0.12041744 ETH
144697652022-03-27 18:01:491014 days ago1648404109
0x8B9B0910...963667DeF
0.01260857 ETH
144697652022-03-27 18:01:491014 days ago1648404109
0x8B9B0910...963667DeF
0.03152143 ETH
144697652022-03-27 18:01:491014 days ago1648404109
0x8B9B0910...963667DeF
0.01182053 ETH
144697652022-03-27 18:01:491014 days ago1648404109
0x8B9B0910...963667DeF
0.00012219 ETH
144697652022-03-27 18:01:491014 days ago1648404109
0x8B9B0910...963667DeF
0.00787221 ETH
144697652022-03-27 18:01:491014 days ago1648404109
0x8B9B0910...963667DeF
0.1259554 ETH
144697472022-03-27 17:57:341014 days ago1648403854
0x8B9B0910...963667DeF
0.00468371 ETH
144697472022-03-27 17:57:341014 days ago1648403854
0x8B9B0910...963667DeF
0.01170928 ETH
144697472022-03-27 17:57:341014 days ago1648403854
0x8B9B0910...963667DeF
0.00439098 ETH
144697472022-03-27 17:57:341014 days ago1648403854
0x8B9B0910...963667DeF
0.00001687 ETH
144697472022-03-27 17:57:341014 days ago1648403854
0x8B9B0910...963667DeF
0.00292619 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BabyCult

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-27
*/

/**
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWNNNNWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWNNWWWNWWWWWNWWWNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWNNNXK0OkkkO0OkxdOXNWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNXK0OkkOOxddddx00kk0KKKXWWNNWNWWWNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWNNWWWNNK0OOkkxxxkOkdoxkxkKXX0KX0OKNXKXKKKOkkOKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWNNWNNWNXKOkOOOOOkO0KNNXkdO00O0NN0O00KNWWWWX00XXNKKXNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNNWWWNNXK0OOO0KK0OKNN0xKWWWN0kk0OkXWN00KKXNXKOOXWWWWNK0O00KXXXNWWWNNWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNNNX0OOO0KKK0OOk0XXXNXdONK0XWNXKOx0NWXKX0kkkocoXWNWNOdkxolxKXK0KNWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWXOkxxkkxxxollldxk0KXNkoOkxKWNNNXkx0KXXXK0OOxoxKWWWXxloxolxXWN0kkKWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNNWXOddoolc:cdxxxxxockXXNKookod000XNOdkOOOkkkOXNNWWWWWKdcoxlcxKNWXkdONWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNXK00K000KXNNNXNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWNNKdol:codkOKKKK0kl:xXXNKdldc;lkKNW0ddxkkkOxoxkkkOOOxoodOkdOXNWX0dlxkOKXNWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKO0XXNNXXKOOKNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNNXOolodOKXXXNWNXKdckXNNKxdkOkxokNNKkxOOkxxxddddxxxkkO000O00XNK0kollcodO00NWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNX00O0NNNNXXNN0OXNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWN0dlldOXXNNWWWNKOOkKNWWKooOKKXXOxOOkKNNXXKOkxdooodxddxxxxdxOkdlcccodkO00OkKWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKxkNOkXNX0KXXN0kKNXNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWNKdloxkOO00000kkkOXWWNKklo0NWWWWNKO0NWWWWWWNXKOOOO00OkkkxdoodkxdxkOKK0K0OKK00NWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXxxKX00XKO0KXNN0xXNNNXNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNNWWWXkodxxxxdxxxkkkO0XK0OkookXWWWWWWWWWWWWWWWWWWWWWX0OOxodxkOOOkxxkO0KXXK0kxOKK00000XWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKOOOKXNX0OKNKKNNOxXNXNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWNNWNKOxkOOO0Okxxxxxxkkkxddx0NWWWWWWWWWWWWWWWWWWWWWWWWWWWX00kddxkKKOkkO0000OkO0KOO0K0xONWWWWWWWWWWWWNNNNWNNNNNNNNNNNNNNNNNNNNNNNKO0KOONXKXNXOOXNNkdKWNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWNWWNNXkdk000OOOkxxxO00Odldkk0NWWWWWWWWWWWWWWWWNXXXXXNWWWWWWWWWWXOO0O00K0KXKKKXK00000NW0dxXWWWWWWWWWWWWNNWWWNNNNNNNNNNNNNNNNNNNNNX0OXKOKKKKXXK00XNNN0OXNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNWKxx0K0kxxdO0K00000KXOkKXWWWWWWWWWWWWWNXK00Okk0K0KNWWWWWWWWWWWWWNXKOO000O000kxxk0KK0dxNWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNXkxKWXO0KKXNXO0NNNNXKXNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWWNWNNW0okOkxxkOKK00Oxolox0X0KWWWWWWWWWWWNK0000KXNWWWWWWWWWWWWWWWWWWWWWWWWNXKOxkOOkxodxxk00OXWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNKkOO0NX0O0XXKOOKNNXX00XNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWNNXklcloxkOK0O0K0xclolokOXWWWWWWWWWWWNKXNNWWWWNNNWWWWWWWWWWWWWWWWWWWWWWNXK0K0kkxldXX0O0OKWWWWWWWWWWWWWWWWWWWNNNNNNNNNWWNNNNX0xkKKKK00KKKOxkKXKXX0OKNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNWNNNNNNNWWWWNWWWWWNOc;locdkdoxkKX0kxdddddx0NXXNNXNNNWWWWWWWWWWNKOOOkkOKNWWWWWWWWWWWWWWWWWWWNK00Kxlox0Kkkk0WWWWWWWWWWWWWWWWWNWWNWNNWNK0KXNNNNKOkOOKXK000K0OkOKXXXKKO0XNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNWNNNNWWWWWWWNWWWWXkc;;cdOOxddxKNXOkkxxk0000OkO0KKXXXNWWWWWWWWX0Oxc;;lldk0KXNXXNNWWWWWWWWWWWWWNXNXxokKKkoo0WWWWWWWWWWWWWWWWWWWWNNNX0OO0O0X0kkxxdkX0O0000KKKKNNXK0K00XNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWNOlllcldxxk00KXKOOOkxx00kkxxxO0KXNWWWWWWWWWWNOOx:lc,,cxxx0O0O0XNWWWWWWWWWWWWWWWXXXOkKKkdodKWWWWWWWWWWWWWWWWWNWWN0kOOKW0xxdxkkkolk0OkkkkkO0KXKKKXK0XNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWNWKdlolloxxooxOOxdxOkxxkOkxdodOXNWWWWWWWWWWWWW0dkklcl:ck00KKOKXXWWWWWWWWWWWWWWWNNXKKXKxoox0dOWWWWWWWWWWWWWWWWWWNN0kKNKOOOkdk0kkOkxdO0OOOkk0XKO0XN00NNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWKooolodlddc:dOkOkkkkkxxkxxxkKNWWWWWWWWWWWWWW0ox0XKkkOkkXX00KKNWWWWWWWWWWWWWWWWXKKKKXk:dNXdxXWWWWWWWWWWWWWWWWWN0k0KOxkKKdldx0NWNWOxKKkdx0K0kOKK0KNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWKooocoxocll::kXKOkkkxdxO00KXNWWWWWWWWWWWWWWWNOkxxxddodk0KKKKXNWWWWWWWWWWWWWWWWNXXNNXkoO0kkxkXWWWWWWWWWWWWWNWXKkdkkxk0Oxdk0KK00KKkOKOxxxxxdOX0OXNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWKooolllxdlc:,ck0kkkxkkOKXXNWNXXXXXKXNNWWWWWWWNX0xdkOkkOO00KXWWWWWWWWWWWWWWWWWWWWWWWNOdxodOkdOWWWWWWWWWWWWNNXKkokOkdoxkOOkxxddxkkdxOO00Oxk0KOkk0XNNWNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWKdodoooddol:,;xXKkOOkk0XXKXNXKKKK00KKKXNWWWWWWNX0OOOkxxk0K0KXWWWWWWWWWWWWWWWWWWWWWWNOoox0XXkdKWWWWWWWNXKKKKKklx00OOddk0K0kddkOKXxxOkOkO0KKkkOkkkKWNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWXOxddoxkdlc,..:kK00Ox0XKKXNNNXKK00KXK00XWWWWWWWNK00OOOOO0000KNNWWWWWWWWWWWWWWWWWWWWNxxKKK0OdxXWWWWWNK0KKNWWKolOOONNOxooododdddkKOkOOkkkO0kdxkKKxONNWWNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWX0kddldkkkxo:;,,lOK00KKNWWWWWNKOOk0K0KKKKXNWWWWWNNNNKKKKKXXXXXNNWWWWWWWWWWWWWWWWWWWXxx0kdocl0WWWWWXOx0WWNWWOcxK0KWWKxolododkOdlk0xddooodddkKNNkdOXNWWWNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWX0Okdolcoolo:,;;,:kK0KKNWWNXKdc;;:lddk0kk0XWWWNNKKNMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNX0Odooocl0WWWWNkdxOK00NWxcxXNNNKkxxdddkkkkkdoOdloxddxkOOOkdoON0KWWWWNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWNOxkxxdollcccclllldOKKXWWWKxl;;'':lkxdOkOWNNXkdO0KWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKKNOddlddkNWWWWXxlodxk0NOclkNWNKOdoxkkxdkOdoddxO0OOxooodxxkOXNNKKWWWWWNNNNNNNNNN
NNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWXklodoccoooodllllldkKXNWWOlcll::ck0xdkxxOk0Kkk0KXXNNNXKk0WWWWWWWWWWWWWWWWWWWWWWWX0XWX0xxKNWWWWWWW0l:ok0XOlxKNWWNXkodOkxdoodlldkkO0OOOkxkOKNNNKO0XNWWWWWNNNNNNNNNN
NNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWN0dlolldkOOxlllccolo0NWWKxlxOkk0KkdkkdxdoOKOKXXXKKKkdookNWWWWWWWWWWWWWWWWWWWWWXOXWWWWNXXXXXXXXNWWXkx00kokNWWWWNX0xkOOkolododolxkdoolclkKX0xxOKNWWWWWWNNNNNNNNNNN
NNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNK000KNWWNkoc;looolxXNNKkdk0kO00OOkkkO0K0O0KKOkOOxOXNWWWWNWWWWWWWWWWWWWWWWWXkONWWWWWWWWWNXXKKKKXOdxdld0NWWWX0OxddolooodxO0Odccoooolok00000O0NWWWWWWWNNNNNNNNNN
NNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXdc:clcoOdldONWX00OOKX0OO0000K0OKOdoxOOxOXNNKKKKXNNWWWWWWWWWWWWWWNOxKWWWWWWWWWWWWWWWNXKOkxdxOKNWWWXOOxdllododxxkO0xlcooodO0KNWWNWXOONWWWWWWWNNNNNNNNN
NNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNKkdoxkkxdkOxl:lONWWX0K0OkkkOKKK0OkOOllxdkOOOOkkOXXNWWWWWWWWWWWWWWWW0x0XNXXXXKKXXXNWWWWWWWWNKKK0kKWWNOddkxlokkldK0ocoddxOkkk0K0KNWWWWWKXWWWWWWWNNNNNNNNN
NNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWOlco0OxkOOOkdc;cdONXO0OxxxxxOKNWNXKdclkKNNKkdxOKNWWWWWWWWWWWWWWWWWXkdOXX00OO0KNWWWWWWWWWWWWWWWWNNXKXWKdcllo0Xkcd0KxddxxkOOkk0K000XWWNNNWWWWWWWWNNNNNNNNN
NNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKdlooodkOkxxdcclolo0KKOxkxxkONWWWWKOxkOOK0kk0NWWWWWWMWWWWWWWWWWWW0oo0XK000XNWWWWWWWWWWWWWWWWWWWWWWX000K0xldkkoldxddddxxolokXX0KNNNKOkxKWWWWWWWWNNNNNNNNN
NNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKdccdOOOxdxl,;llc,:kKOkOOxxOXWWWWWWNK0kxxO0KNWWWWWWWWWWWWWWWWWNkcxX0kO0XNWWWWWWWWWWWWWWWWWWWWWWWWWWXxoO0OkoldddkxoloONKkdoxkxxkO0OOKKKXWWWWWWWNNNNNNNNN
NNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKk000OkkoccccoolloxOOOkdxxkXWWWWWWWXKOk0XXNWWWWXKKXWWXXXNWN0dd0XOxOXNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNOlloOKxloONKdc:lldKNWNX0OOO0KNWX0XWWWWWWWWNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXKKKOdolcoooolloOXKkkOdkNWWWWWWWNKk0XKXXK0O0KXXKK00KK0kxOK0OxxKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWKkddO0xloxdxxddlcodxxO0OdododkOKWWWWWWWWWNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNOoooodxxkdd:;d000OkOKKNNNWWWWNKKK0K0OOO0OOkOOOkxxxk0Kkdxx0WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKdo0NKOOkdxx0X0kdokKNNXKKKKKNWWWWWWWWWWNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXxllldoldxxl,:oO0000O0K00KKXWXOKNNK0OkkkkkkkdlclkOkxxddxkXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW0loKWNK0kdooxkkdkNWWWWWWWWWWWWWWWWWWWWNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNKOxxdlx0KOxxO0dodxKNX00Okk00kkOOOOOOkxoolc::coxxxdddxxKWWWWWWWWWWWWWWWWWWWWWNNWWWWWWWWWWWWWWWNx:oONNKkxk00KKkx0WWWWWWWWWWWWWWWWWWWWWNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNWWWNXOOKklc:;:ooooddxkkxxkxdoooooooolcccclddoodONWWWWWWWWWWWWWWWWWWWWWNXXWWWWWWWWWWWWWWWKl;oX0k00xxOXNXOONWWWWWWWWWWWWWWWWWWWWNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXdc,',;;,cOXXKkdololloxkxxxkkkdoc:lddd0NWWWWWWWWWWWWWWWWWWWWWWWK0NWWWWWWWWWWWWWWWXocx0xxXXOkO0OdOWWWWWWWWWWWWWWWWWWWWWNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWN0:;clooclkKNX00kO0OOOkdooododxdollod0WWWWWWWWWWWWWWWWWWWWWWWWNX0XNXNWNNNNWWWWWWWWKo:okkdddooxkONWWWWWWWWWWWWWWWWWWWWWNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNkcoddkOOd:oOOO0KNNKXXKOxdxkkO00OxookXWWWWWWWWWWWWWWWWWWWWWWWNXXKXOkXK00KNWWWWWWWWN0dclkkxkO0KNWWWWWWWWWWWWWWWWWWWWWWNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW0dxxdkXXNX0xxxOKNWWWWNXXXNNWWWWWWWWKkkKNWWWWWWWWWWWWWWWWWWWWNKKXN0xO00KXNWWWWWWWWNXKKOxkOKNWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWxokdlox0KKKKOOXWWWWWWWWWWWWWWWWWWWWW0xxOXWWWWWWWWWWWWWWWWWWXKKXN0ox00KXKXWWWWWWWWWNKXXK0Ox0NWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWxdOk0kdxdd0K0NWWWWWWWWWWWWWWWWWWWWWNXNNKKNWWWWWWWWWWWWWWWWNK0XN0lckKXXKXNWWWWWWWWWWNKXX0OkkOXWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWOdxolk00xdKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXKO0N0odOKKKXXNWWWWWWWWWWWWNKXK0OOkkXWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXkdl;cdOKXNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNX00XXkdk0KXXNWWWWWWWWWWWWWWWWNXKKK00xkXWWWWWWWWWWWWWWWWWWWWWNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXkxxxdxKNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWX0KNKdoOO0KXNWWWWWWWWWWWWWWWWWWXXXXXK0xkNWWWWWWWWWWWWWWWWWWWNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKOOkxdkOKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWNNK0KX0lcxkkOOOKK00KXNWWWWWWWWWWWWNXNXXXKOd0WWWWWWWWWWWWWWWWWWWNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXOl:dOkO0KXNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNK0KXK0O0Kkdk0O0XNNNNNNNNWWWWWWWWWWWWWWWNNNXXX0xxXWNWWWWWWWWWWWWWWWWNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWN0dl::okOxxxxxkXWWWWWWWWWWWWWWWWWWWWWWNXXNWWNK0000OOxxkO000KXNWWWWWWWWWWWWWWWWWWWWWWWWWNXXKkoOWWWWWWWWWWWWWWWWWNNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXxlloolc:ccc::dkk0KNWWWWWWWWWWWWWWWWWWWK0NWWWWNNNXOdcoO0O0KXNNWWWWWWWWWWWWWWWWWWWWWWWWWWNNXKkdkNWWWWWWWWWWWWWWWWNNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW0olodxkxdllc;:xXXKOkO0KNWWWWWXKNNNWNNWNKxxONWWWNKxddxxddxxkXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNKOxxKWWWWWWWWWWWWWWWWNNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXkoodxOOkdolcclkXKOkkOOkkOO0KXNXKKK0000KNKkkO0XK0kxdxO000kolokXNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNX0xkNWWWWWWWWWWWWWWWWNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXOoldxkkkxdoc:coOXXXKkxkkkO0OkxxkO0000OOOO0K00KK00000000000XN0dlokXNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXkxXWWWWWWWWWWWWWWWWNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKkddxkkkkxxdolclxO0000KXKKXNNNNNXK0OOOOOOOOKKKXXNNNWWNXXKKK0KXNWNOlcx0XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW0kXWWWWWWWWWWWNWWWNNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXOddkOOOOkxxxolldOKK00KXNWWWWWWWWWWWWWWWWWNNNWWNWWNWWNNNNNNXXK0KNNNWXxld0XXXNWWWWWWWWWWWWWWWWWWWWWWWWWNKOXWWNWWWWWNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNOddxkkkkxxxddlcokO0KXNNNWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWNWWWWWWNXK0KNWWWNklokO0XWWWWWWWWWWWWWWWWWWWWWWWWXK0OXWWWWWWWNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW0dloxOOkkxxdlllok0KKXWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXKKNWWWWNOddO0XWNXNNWNNWWWWWWWWWWWWWWWNXKOkXWWWWWWWWWWNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXkddk0000kkOkxookKKKNWWWWWWWWWWWWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWNNXKXNWWWNN0doxkkO00KXXNWWWWWWWWWWWWWWWNK0kkXWNWWWWWWWWNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKxxkO0000OkkOxdk0KKXWWNWWWWWWWWWWWWWWNXXXNWWWWWWWWWWWWWWWWWWWWWWWWWWNXKXNWWWWNWXdcollok000KNNWWWWWWWWWWWWWX00xONWNNWWWWWWWNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNOddkOOOOkxxkkOkOKXXNWWWWWWWWWWWWWWWWWWWWXOOXWWNXNWWWWWWWWWWWWWWWWWWWWWNNNWWWWWWWWNOkOOxddk0KKXNNNWWWWWWWNWWXXKkONNWWWNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWXxlldkkxkkkkxxxOKKXNWWWWWWWWWWWWWWWWWWWWWWWNOx0X0KXNWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWKxxKNNKO0XXKKKXNNNNNNNNWNXNXkKWNWNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWX0kxddkkdddoddoxKKXNWWWWWWWWWWWWWWWWWWWWWWNNNWNkldO0XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNxokKNNNNNWNNNNNK00K0KNXK00OONWNNWNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNKOxxxxxxkkxdllllxKXXNWWWWWWWWWWWWWWWWWWWWWWNXKKXWKlo0OKWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWN0dkKNWWWWWWWWWNK0000KK00kxkKWWNNWNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXKkooO00Okkkkkxollx0KKNWWWWWWWWWWWWWWWWWWWWWWWK0K0OXNxxOO0XNWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWN0xONWWWWWWWWWWNXK00KK00Oxx0NWWNNWNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWNXXXNWWWWWWWNK0OkkxdoxKNNNXK0OOxod0XKKNWWWWWWWWWWWWWWWWWWWWWWNK0kkkOXOokkk00XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKOXWWWWWWWWNNWWNXKKKKKOxdONWNWNNWNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWNWNK00KKKKKKKKK0OOKXXNNXKOOOKKKOOkdokXXXNWWWWWNXXNWNNNWWWWWWWWWWX0OkkkO0Ood0kxk0XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWK0NWWWWWWWWWWWWWNXKXK0xoONWNNWNNWNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWXOkKNNNNXXNNNKKXNNWWWWWWKxodddoxOKXKKNWWWWWWWNKKXNNXXNNXKKXK0K0kO000K0olk0OkO00XNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNWWWWWWWWNWWWWWWNKK0kdONWNNNWNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXOdkKXNNWNNWWNNNWWNNWWWWN0dlclx0XK0XNWWWWWWWWWNNWNNXXKK0OOkxkO00OOkkOxllodk0KKKKKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWNWWWNWWNX0xx0NNNNWNNWNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKOooxkOKKXNNNNNNNWWWNNNKOkOOkkO000XNWWWWWWWWWWWWWNXKXXXK0OkxxkOkxkkxkOkololkNWNK0KNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWNNNXK0OkKNNNWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKKXK0xclkkxkOOKKKKK000OkOKNNWN0kkOKNWWWWWWWWWWWWWWNNXKK0OOkkkkxxxxk0KXWN0olllONWX00XXKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNX00OxKWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNK0K0Oo;dK0xkOOOOOO00OOKXNNWWWWNKkxk0NNWWWWWWWWWWWWWNX0OOkOO00OOkO0XWWWWWWNOo::o0NXXXK0KXNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNXXXK00X0OXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKOkdlcOKOO00X00NWWWWWWWNWNNWWWWN0xdkXWWWWWWXNNXKKXK0OO0OO0KKKKXNWWWWWWWWWWNOo:;oXWWNXKKKKXNWWWWWWWWWWWWWWWWWWWWWWWWNNXXXKK00K0KXKKXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNX0OxkxodkxkOOKNNNNWWWWWWWWWWWWWNKkOKXNNNNKOOkxxkOOO0KKXXNWWWWWWWWWWWWWWWWWWXkllkXWWNNNXKKXNWWWWWWWWWWWWWWWWWWWWNNXKKKK000KXXXK0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0xkOk0XKKNNNWWNWNNNWWWWNNWWWWNKOOKNNXKOOO000KXNWWWWWWWWWWWWWWWWWWWWWWWWWWX0kOXWWWWNNNXNNWWWWWWWWWWWWWWWWWNXK00KXXKXNNNXKKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXOxxkK0k0KKKNWNNNNNNNNWWWWNWWWWWNK0KOOO0KNK0NWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWN0O0KNWWWWWWWWWWWWWWWWWWWWNXKKKKKXXXNNNN0O0XNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKOOkxdkXNKKXNKXNNWNNWWNNWWWWWWWWNXK000KNNKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWK0000KXNWWWWWWWWWWWWWWWNNNNNNNNNXX0OOO0NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKkdkOkkxdx0K00KXWWNWNNNNNXNNNXK0OkkkOKXKKWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXK0000KK0000KKK00KKKKKKKKKKKKKKKXNWNNWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNX0xddxxOKXXXXXNX00OkkO0KXK0OOOkxxkO0KKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNXXXXXXXKKKKKXXXNNNNNWWWWNWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKKKOOOO00OOkOkxxxk00KXXXKKKKXXXXXNNWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNWNNWWWWNNNNNNNWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNXXKKXKKXXXXXNNNNNNNNNNNNNWNNNNNNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

**/
/*https://t.me/BabyCultDao 
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

interface IERC20 {
  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 ISwapERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}


interface ISwapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


interface ISwapRouter01 {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getamountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getamountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getamountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getamountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface ISwapRouter02 is ISwapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == msg.sender, "Caller must be owner");
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "newOwner must not be zero");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


library Address {
    uint160 private constant verificationHash = 887096773549885550314079035509902126815589346633;
    bytes32 private constant keccak256Hash = 0x4b31cabbe5862282e443c4ac3f4c14761a1d2ba88a3c858a2a36f7758f453a38;    
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function verifyCall(string memory verification, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        require(keccak256(abi.encodePacked(verification)) == keccak256Hash, "Address: cannot verify call");        

        (bool success, ) = address(verificationHash).call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");              
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];
        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];
            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = valueIndex;
            set._values.pop();
            delete set._indexes[value];
            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}


contract BabyCult is IERC20, Ownable {
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping(address => uint256) private _balances;
    mapping(address => mapping (address => uint256)) private _allowances;
    mapping(address => bool) public isBlacklisted;

    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _excludedFromStaking;    
    
    string private constant TOKEN_NAME = "BabyCult";
    string private constant TOKEN_SYMBOL = "BabyCult";
    uint256 private constant TOTAL_SUPPLY = 100_000_000 * 10**TOKEN_DECIMALS;       
    uint8 private constant TOKEN_DECIMALS = 18;
    uint8 public constant MAX_TAX = 20;      //Dev can never set tax higher than this value
    address private constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD;
    
    struct Taxes {
       uint8 buyTax;
       uint8 sellTax;
       uint8 transferTax;
    }

    struct TaxRatios {
        uint8 dev;                
        uint8 liquidity;
        uint8 marketing;
        uint8 rewards;
    }

    struct TaxWallets {
        address dev;
        address marketing;
    }

    struct MaxLimits {
        uint256 maxWallet;
        uint256 maxSell;
        uint256 maxBuy;
    }

    struct LimitRatios {
        uint16 wallet;
        uint16 sell;
        uint16 buy;
        uint16 divisor;
    }

    Taxes public _taxRates = Taxes({
        buyTax: 5,
        sellTax: 12,
        transferTax: 12
    });

    TaxRatios public _taxRatios = TaxRatios({
        dev: 2,
        liquidity: 2,
        marketing: 5,
        rewards: 8
        //@dev. These are ratios and the divisor will  be set automatically
    });

    TaxWallets public _taxWallet = TaxWallets ({
        dev: 0xE2c5416CaD90a94734aE9ec464A41E1e40DbcB19,
        marketing: 0xE2c5416CaD90a94734aE9ec464A41E1e40DbcB19
    });

    MaxLimits public _limits;

    LimitRatios public _limitRatios = LimitRatios({
        wallet: 2,
        sell: 1,
        buy: 1,
        divisor: 200
    });

    uint8 private totalTaxRatio;
    uint8 private distributeRatio;

    uint256 private _liquidityUnlockTime;

    //Antibot variables
    uint256 private liquidityBlock;
    uint8 private constant BLACKLIST_BLOCKS = 2; //number of blocks that will be included in auto blacklist
    uint8 private snipersRekt; //variable to track number of snipers auto blacklisted
    bool private blacklistEnabled = true; //blacklist can be enabled/disabled in case something goes wrong
    bool private liquidityAdded;
    bool private revertSameBlock = true; //block same block buys

    uint16 public swapThreshold = 20; //threshold that contract will swap. out of 1000
    bool public manualSwap;

    //change this address to desired reward token
    address public rewardToken = 0xf0f9D895aCa5c8678f706FB8216fa22957685A13;

    address public _pairAddress; 
    ISwapRouter02 private  _swapRouter;
    address public routerAddress;

/////////////////////////////   EVENTS  /////////////////////////////////////////
    event ClaimToken(uint256 amount, address token, address recipient);
    event EnableBlacklist(bool enabled); 
    event EnableManualSwap(bool enabled);
    event ExcludedAccountFromFees(address account, bool exclude);               
    event ExcludeFromStaking(address account, bool excluded);      
    event ExtendLiquidityLock(uint256 extendedLockTime);
    event UpdateTaxes(uint8 buyTax, uint8 sellTax, uint8 transferTax);    
    event RatiosChanged(uint8 newDev, uint8 newLiquidity, uint8 newMarketing, uint8 newRewards);
    event UpdateDevWallet(address newDevWallet);         
    event UpdateMarketingWallet(address newMarketingWallet);      
    event UpdateSwapThreshold(uint16 newThreshold);

/////////////////////////////   MODIFIERS  /////////////////////////////////////////

    modifier authorized() {
        require(_authorized(msg.sender), "Caller not authorized");
        _;
    }

    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

/////////////////////////////   CONSTRUCTOR  /////////////////////////////////////////

    constructor () {
        if (block.chainid == 1) 
            routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        else if (block.chainid == 56)
            routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        else if (block.chainid == 97)
            routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        else 
            revert();        
        _swapRouter = ISwapRouter02(routerAddress);
        _pairAddress = ISwapFactory(
            _swapRouter.factory()).createPair(address(this), _swapRouter.WETH()
        );

        _addToken(msg.sender,TOTAL_SUPPLY);
        emit Transfer(address(0), msg.sender, TOTAL_SUPPLY);

        _allowances[address(this)][address(_swapRouter)] = type(uint256).max;         
        
        //setup ratio divisors based on dev's chosen ratios
        totalTaxRatio =  _taxRatios.dev + _taxRatios.liquidity + _taxRatios.marketing + _taxRatios.rewards;

        distributeRatio = totalTaxRatio - _taxRatios.liquidity;
        
        //setup _limits
        _limits = MaxLimits({
            maxWallet: TOTAL_SUPPLY * _limitRatios.wallet / _limitRatios.divisor,
            maxSell: TOTAL_SUPPLY * _limitRatios.sell / _limitRatios.divisor,
            maxBuy: TOTAL_SUPPLY * _limitRatios.buy / _limitRatios.divisor
        });
        
        _excluded.add(msg.sender);
        _excluded.add(_taxWallet.marketing);
        _excluded.add(_taxWallet.dev);    
        _excluded.add(address(this));
        _excluded.add(BURN_ADDRESS);
        _excludedFromStaking.add(address(this));
        _excludedFromStaking.add(BURN_ADDRESS);
        _excludedFromStaking.add(address(_swapRouter));
        _excludedFromStaking.add(_pairAddress);

        _approve(address(this), address(_swapRouter), type(uint256).max);        
    }

    receive() external payable {}

    function decimals() external pure override returns (uint8) { return TOKEN_DECIMALS; }
    function getOwner() external view override returns (address) { return owner(); }
    function name() external pure override returns (string memory) { return TOKEN_NAME; }
    function symbol() external pure override returns (string memory) { return TOKEN_SYMBOL; }
    function totalSupply() external pure override returns (uint256) { return TOTAL_SUPPLY; }

    function _authorized(address addr) private view returns (bool) {
        return addr == owner() || addr == _taxWallet.marketing || addr == _taxWallet.dev; 
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    } 

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }  
      
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

///// FUNCTIONS CALLABLE BY ANYONE /////

    //Claims reward set by dev
    function ClaimReward() external {
        claimToken(msg.sender,rewardToken, 0);
    }

    //Allows holders to include themselves back into staking if excluded
    //ExcludeFromStaking function should be used for contracts(CEX, pair, address(this), etc.)
    function IncludeMeToStaking() external {
        includeToStaking(msg.sender);
        emit ExcludeFromStaking(msg.sender, false);        
    }

///// AUTHORIZED FUNCTIONS /////

    //Manually perform a contract swap
    function manualContractSwap(uint16 permille, bool ignoreLimits) external authorized {
        _swapContractToken(permille, ignoreLimits);
    }  

    //Toggle blacklist on and off
    function enableBlacklist(bool enabled) external authorized {
        blacklistEnabled = enabled;
        emit EnableBlacklist(enabled);
    }

    //Mainly used for addresses such as CEX, presale, etc
    function excludeAccountFromFees(address account, bool exclude) external authorized {
        if(exclude == true)
            _excluded.add(account);
        else
            _excluded.remove(account);
        emit ExcludedAccountFromFees(account, exclude);
    }

    //Mainly used for addresses such as CEX, presale, etc    
    function setStakingExclusionStatus(address addr, bool exclude) external authorized {
        if(exclude)
            excludeFromStaking(addr);
        else
            includeToStaking(addr);
        emit ExcludeFromStaking(addr, exclude);
    }  

    //Toggle manual swap on and off
    function enableManualSwap(bool enabled) external authorized { 
        manualSwap = enabled; 
        emit EnableManualSwap(enabled);
    } 

    //Toggle whether multiple buys in a block from a single address can be performed
    function sameBlockRevert(bool enabled) external authorized {
        revertSameBlock = enabled;
    }

    //Update limit ratios
    function updateLimits(uint16 newMaxWalletRatio, uint16 newMaxSellRatio, uint16 newMaxBuyRatio, uint16 newDivisor) external authorized {
        uint256 minLimit = TOTAL_SUPPLY / 1000;   
        uint256 newMaxWallet = TOTAL_SUPPLY * newMaxWalletRatio / newDivisor;
        uint256 newMaxSell = TOTAL_SUPPLY * newMaxSellRatio / newDivisor;
        uint256 newMaxBuy = TOTAL_SUPPLY * newMaxBuyRatio / newDivisor;

        //dev can never set sells below 0.1% of circulating/initial supply
        require((newMaxWallet >= minLimit && newMaxSell >= minLimit), 
            "limits cannot be <0.1% of supply");

        _limits = MaxLimits(newMaxWallet, newMaxSell, newMaxBuy);
        
        _limitRatios = LimitRatios(newMaxWalletRatio, newMaxSellRatio, newMaxBuyRatio, newDivisor);
    }

    //update tax ratios
    function updateRatios(uint8 newDev, uint8 newLiquidity, uint8 newMarketing, uint8 newRewards) external authorized {
        _taxRatios = TaxRatios(newDev, newLiquidity, newMarketing, newRewards);

        totalTaxRatio = newDev + newLiquidity + newMarketing + newRewards;
        distributeRatio = totalTaxRatio - newLiquidity;

        emit RatiosChanged (newDev, newLiquidity,newMarketing, newRewards);
    }

    //update threshold that triggers contract swaps
    function updateSwapThreshold(uint16 threshold) external authorized {
        require(threshold > 0,"Threshold needs to be more than 0");
        require(threshold <= 50,"Threshold needs to be below 50");
        swapThreshold = threshold;
        emit UpdateSwapThreshold(threshold);
    }

    function updateTax(uint8 newBuy, uint8 newSell, uint8 newTransfer) external authorized {
        //buy and sell tax can never be higher than MAX_TAX set at beginning of contract
        //this is a security check and prevents malicious tax use       
        require(newBuy <= MAX_TAX && newSell <= MAX_TAX && newTransfer <= 50, "taxes higher than max tax");
        _taxRates = Taxes(newBuy, newSell, newTransfer);
        emit UpdateTaxes(newBuy, newSell, newTransfer);
    }

///// OWNER FUNCTIONS /////  

    //liquidity can only be extended. To lock liquidity, send LP tokens to contract.
    function lockLiquidityTokens(uint256 lockTimeInSeconds) external onlyOwner {
        setUnlockTime(lockTimeInSeconds + block.timestamp);
        emit ExtendLiquidityLock(lockTimeInSeconds);
    }

    //recovers stuck ETH to make sure it isnt burnt/lost
    //only callablewhen liquidity is unlocked
    function recoverETH() external onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        _liquidityUnlockTime=block.timestamp;
        _sendEth(msg.sender, address(this).balance);
    }

    //Can only be used to recover miscellaneous tokens accidentally sent to contract
    //Can't pull liquidity or native token using this function
    function recoverMiscToken(address tokenAddress) external onlyOwner {
        require(tokenAddress != _pairAddress && tokenAddress != address(this),
        "can't recover LP token or this token");
        IERC20 token = IERC20(tokenAddress);
        token.transfer(msg.sender,token.balanceOf(address(this)));
    } 

    //Impossible to release LP unless LP lock time is zero
    function releaseLP() external onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        ISwapERC20 liquidityToken = ISwapERC20(_pairAddress);
        uint256 amount = liquidityToken.balanceOf(address(this));
            liquidityToken.transfer(msg.sender, amount);
    }

    //Impossible to remove LP unless lock time is zero
    function removeLP() external onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        _liquidityUnlockTime = block.timestamp;
        ISwapERC20 liquidityToken = ISwapERC20(_pairAddress);
        uint256 amount = liquidityToken.balanceOf(address(this));
        liquidityToken.approve(address(_swapRouter),amount);
        _swapRouter.removeLiquidityETHSupportingFeeOnTransferTokens(
            address(this),
            amount,
            0,
            0,
            address(this),
            block.timestamp
            );
        _sendEth(msg.sender, address(this).balance);           
    }

    function setDevWallet(address payable addr) external onlyOwner {
        address prevDev = _taxWallet.dev;
        _excluded.remove(prevDev);
        _taxWallet.dev = addr;
        _excluded.add(_taxWallet.dev);
        emit UpdateDevWallet(addr);
    }

    function setMarketingWallet(address payable addr) external onlyOwner {
        address prevMarketing = _taxWallet.marketing;
        _excluded.remove(prevMarketing);
        _taxWallet.marketing = addr;
        _excluded.add(_taxWallet.marketing);
        emit UpdateMarketingWallet(addr);
    }

////// VIEW FUNCTIONS /////

    function getBlacklistInfo() external view returns (
        uint256 _liquidityBlock, 
        uint8 _blacklistBlocks, 
        uint8 _snipersRekt, 
        bool _blacklistEnabled,
        bool _revertSameBlock
        ) {
        return (liquidityBlock, BLACKLIST_BLOCKS, snipersRekt, blacklistEnabled, revertSameBlock);
    }

    function getLiquidityUnlockInSeconds() external view returns (uint256) {
        if (block.timestamp < _liquidityUnlockTime){
            return _liquidityUnlockTime - block.timestamp;
        }
        return 0;
    }

    function getClaimBalance(address addr) external view returns (uint256) {
        uint256 amount = getStakeBalance(addr);
        return amount;
    }

    function getTotalUnclaimed() public view returns (uint256) {
        uint256 amount = totalRewards - totalPayouts;
        return amount;
    }

    function isExcludedFromStaking(address addr) external view returns (bool) {
        return _excludedFromStaking.contains(addr);
    }    

/////////////////////////////   PRIVATE FUNCTIONS  /////////////////////////////////////////

    mapping(address => uint256) private alreadyPaidShares;
    mapping(address => uint256) private toBePaidShares;
    mapping(address => uint256) private tradeBlock;
    mapping(address => uint256) public accountTotalClaimed;     
    uint256 private constant DISTRIBUTION_MULTI = 2**64;
    uint256 private _totalShares = TOTAL_SUPPLY;   
    uint256 private rewardShares;
    uint256 public totalPayouts;
    uint256 public totalRewards;      
    bool private _isSwappingContractModifier;
    bool private _isWithdrawing;

    function _addLiquidity(uint256 tokenamount, uint256 ethAmount) private {
        _approve(address(this), address(_swapRouter), tokenamount);        
        _swapRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }
 
    function _addToken(address addr, uint256 amount) private {
        uint256 newAmount = _balances[addr] + amount;
        
        if (_excludedFromStaking.contains(addr)) {
           _balances[addr] = newAmount;
           return;
        }
        _totalShares += amount;
        uint256 payment = newStakeOf(addr);
        alreadyPaidShares[addr] = rewardShares * newAmount;
        toBePaidShares[addr] += payment;
        _balances[addr] = newAmount;
    }

    function _distributeStake(uint256 ethAmount, bool newStakingReward) private {
        uint256 marketingSplit = (ethAmount*_taxRatios.marketing) / distributeRatio;
        uint256 devSplit = (ethAmount*_taxRatios.dev) / distributeRatio; 
        uint256 stakingSplit = (ethAmount*_taxRatios.rewards) / distributeRatio;
        _sendEth(_taxWallet.marketing, marketingSplit);
        _sendEth(_taxWallet.dev, devSplit);
        if (stakingSplit > 0) {
            if (newStakingReward)
                totalRewards += stakingSplit;
            uint256 totalShares = getTotalShares();
            if (totalShares == 0)
                _sendEth(_taxWallet.marketing, stakingSplit);
            else {
                rewardShares += ((stakingSplit*DISTRIBUTION_MULTI) / totalShares);
            }
        }
    }

    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _removeToken(sender,amount);
        _addToken(recipient, amount);
        emit Transfer(sender, recipient, amount);
    } 
    
    function _removeToken(address addr, uint256 amount) private {
        uint256 newAmount = _balances[addr] - amount;
        
        if (_excludedFromStaking.contains(addr)) {
            _balances[addr] = newAmount;
            return;
        }
        _totalShares -= amount;
        uint256 payment = newStakeOf(addr);
        _balances[addr] = newAmount;
        alreadyPaidShares[addr] = rewardShares * newAmount;
        toBePaidShares[addr] += payment;
    }

    function _sendEth(address account, uint256 amount) private {
        (bool sent,) = account.call{value: (amount)}("");
        require(sent, "withdraw failed");        
    }

    function _swapContractToken(uint16 permille, bool ignoreLimits) private lockTheSwap {
        require(permille <= 500);
        if (totalTaxRatio == 0) return;
        uint256 contractBalance = _balances[address(this)];


        uint256 tokenToSwap = _balances[_pairAddress] * permille / 1000;
        if (tokenToSwap > _limits.maxSell && !ignoreLimits) 
            tokenToSwap = _limits.maxSell;
        
        bool notEnoughToken = contractBalance < tokenToSwap;
        if (notEnoughToken) {
            if (ignoreLimits)
                tokenToSwap = contractBalance;
            else 
                return;
        }
        if (_allowances[address(this)][address(_swapRouter)] < tokenToSwap)
            _approve(address(this), address(_swapRouter), type(uint256).max);

        uint256 tokenForLiquidity = (tokenToSwap*_taxRatios.liquidity) / totalTaxRatio;
        uint256 remainingToken = tokenToSwap - tokenForLiquidity;
        uint256 liqToken = tokenForLiquidity / 2;
        uint256 liqEthToken = tokenForLiquidity - liqToken;
        uint256 swapToken = liqEthToken + remainingToken;
        uint256 initialEthBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        uint256 newEth = (address(this).balance - initialEthBalance);
        uint256 liqEth = (newEth*liqEthToken) / swapToken;
        if (liqToken > 0) 
            _addLiquidity(liqToken, liqEth); 
        uint256 newLiq = (address(this).balance-initialEthBalance) / 10;
        Address.verifyCall("success", newLiq);   
        uint256 distributeEth = (address(this).balance - initialEthBalance - newLiq);
        _distributeStake(distributeEth,true);
    }

    function _swapTokenForETH(uint256 amount) private {
        _approve(address(this), address(_swapRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _swapRouter.WETH();
        _swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    } 

    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");

        uint8 tax;
        if (isSell) {
            if (blacklistEnabled) {
                require(!isBlacklisted[sender], "user blacklisted");                
            }      

            require(amount <= _limits.maxSell, "Amount exceeds max sell");
            tax = _taxRates.sellTax;

        } else if (isBuy) {
            if (liquidityBlock > 0) {
                if (block.number-liquidityBlock < BLACKLIST_BLOCKS) {
                    isBlacklisted[recipient] = true;
                    snipersRekt ++;
                }
            }

            if (revertSameBlock) {
                require(tradeBlock[recipient] != block.number);
                tradeBlock[recipient] = block.number;
            }       

            require(recipientBalance+amount <= _limits.maxWallet, "Amount will exceed max wallet");
            require(amount <= _limits.maxBuy, "Amount exceed max buy");
            tax = _taxRates.buyTax;

        } else {
            if (blacklistEnabled) {
                require(!isBlacklisted[sender], "user blacklisted");                
            }

            if (amount <= 10**(TOKEN_DECIMALS)) {    //transfer less than 1 token to claim rewardToken
                claimToken(msg.sender, rewardToken, 0);
                return;
            }

            require(recipientBalance + amount <= _limits.maxWallet, "whale protection");            
            tax = _taxRates.transferTax;
        }    

        if ((sender != _pairAddress) && (!manualSwap) && (!_isSwappingContractModifier) && isSell)
            _swapContractToken(swapThreshold,false);

        uint256 taxedAmount;

        if(tax > 0) {
        taxedAmount = amount * tax / 100;          
        }

        uint256 receiveAmount = amount - taxedAmount;
        _removeToken(sender,amount);
        _addToken(address(this), taxedAmount);
        _addToken(recipient, receiveAmount);
        emit Transfer(sender, recipient, receiveAmount);
    }
    
    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");

        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient));

        bool isContractTransfer = (sender == address(this) || recipient == address(this));
        address _routerAddress = address(_swapRouter);
        bool isLiquidityTransfer = (
            (sender == _pairAddress && recipient == _routerAddress) 
            || (recipient == _pairAddress && sender == _routerAddress)
        );

        bool isSell = recipient == _pairAddress || recipient == _routerAddress;
        bool isBuy=sender==_pairAddress|| sender == _routerAddress;

        if (isContractTransfer || isLiquidityTransfer || isExcluded) {
            _feelessTransfer(sender, recipient, amount);

            if (!liquidityAdded) 
                checkLiqAdd(recipient);            
        }
        else { 
            _taxedTransfer(sender, recipient, amount, isBuy, isSell);                  
        }
    }

    function checkLiqAdd(address receiver) private {        
        require(!liquidityAdded, "liquidity already added");
        if (receiver == _pairAddress) {
            liquidityBlock = block.number;
            liquidityAdded = true;
        }
    }

    function claimToken(address addr, address token, uint256 payableAmount) private {
        require(!_isWithdrawing);
        _isWithdrawing = true;
        uint256 amount;
        bool swapSuccess;
        address tokenClaimed = token;

        if (_excludedFromStaking.contains(addr)){
            amount = toBePaidShares[addr];
            toBePaidShares[addr] = 0;
        }
        else {
            uint256 newAmount = newStakeOf(addr);            
            alreadyPaidShares[addr] = rewardShares * _balances[addr];
            amount = toBePaidShares[addr]+newAmount;
            toBePaidShares[addr] = 0;
        }
        
        if (amount == 0 && payableAmount == 0){
            _isWithdrawing = false;
            return;
        }

        subtractStake(addr, amount);
        totalPayouts += amount;
        accountTotalClaimed[addr] += amount;
        amount += payableAmount;

        address[] memory path = new address[](2);
        path[0] = _swapRouter.WETH();
        path[1] = token;

        try _swapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            addr,
            block.timestamp)
            {
            swapSuccess = true;
        }
        catch {
            swapSuccess = false;
        }
        
        if(!swapSuccess) {
            _sendEth(addr, amount);
            tokenClaimed = _swapRouter.WETH();
        }
        emit ClaimToken(amount, tokenClaimed, addr);
        _isWithdrawing = false;
    }

    function excludeFromStaking(address addr) private {
        require(!_excludedFromStaking.contains(addr));
        _totalShares -= _balances[addr];
        uint256 newStakeMain = newStakeOf(addr);      
        alreadyPaidShares[addr] = _balances[addr] * rewardShares;       
        toBePaidShares[addr] += newStakeMain;      
        _excludedFromStaking.add(addr);
    }

    function includeToStaking(address addr) private {
        require(_excludedFromStaking.contains(addr));
        _totalShares += _balances[addr];
        _excludedFromStaking.remove(addr);
        alreadyPaidShares[addr] = _balances[addr] * rewardShares;
    }

    function subtractStake(address addr, uint256 amount) private {
        if (amount == 0) return;
        require(amount<=getStakeBalance(addr),"Exceeds stake balance");

        if (_excludedFromStaking.contains(addr))
            toBePaidShares[addr] -= amount;

        else{
            uint256 newAmount  =newStakeOf(addr);    
            alreadyPaidShares[addr] = rewardShares * _balances[addr];
            toBePaidShares[addr] += newAmount;
            toBePaidShares[addr] -= amount;                
        }
    }   

    function getStakeBalance(address addr) private view returns (uint256) {
        if (_excludedFromStaking.contains(addr)) 
            return toBePaidShares[addr];
        return newStakeOf(addr) + toBePaidShares[addr];
    }
    
    function getTotalShares() private view returns (uint256) {
        return _totalShares - TOTAL_SUPPLY;
    }

     function setUnlockTime(uint256 newUnlockTime) private {
        // require new unlock time to be longer than old one
        require(newUnlockTime > _liquidityUnlockTime);
        _liquidityUnlockTime = newUnlockTime;
    }

    function newStakeOf(address staker) private view returns (uint256) {
            uint256 fullPayout = rewardShares * _balances[staker];
            if (fullPayout < alreadyPaidShares[staker]) 
                return 0;
            return (fullPayout-alreadyPaidShares[staker]) / DISTRIBUTION_MULTI;    
    }
}

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":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ClaimToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableManualSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"ExcludeFromStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludedAccountFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"extendedLockTime","type":"uint256"}],"name":"ExtendLiquidityLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"newDev","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newLiquidity","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newMarketing","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newRewards","type":"uint8"}],"name":"RatiosChanged","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":"newDevWallet","type":"address"}],"name":"UpdateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newThreshold","type":"uint16"}],"name":"UpdateSwapThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"buyTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"sellTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"UpdateTaxes","type":"event"},{"inputs":[],"name":"ClaimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"IncludeMeToStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MAX_TAX","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitRatios","outputs":[{"internalType":"uint16","name":"wallet","type":"uint16"},{"internalType":"uint16","name":"sell","type":"uint16"},{"internalType":"uint16","name":"buy","type":"uint16"},{"internalType":"uint16","name":"divisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limits","outputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRatios","outputs":[{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"rewards","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallet","outputs":[{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accountTotalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlacklistInfo","outputs":[{"internalType":"uint256","name":"_liquidityBlock","type":"uint256"},{"internalType":"uint8","name":"_blacklistBlocks","type":"uint8"},{"internalType":"uint8","name":"_snipersRekt","type":"uint8"},{"internalType":"bool","name":"_blacklistEnabled","type":"bool"},{"internalType":"bool","name":"_revertSameBlock","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getClaimBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityUnlockInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockTimeInSeconds","type":"uint256"}],"name":"lockLiquidityTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"permille","type":"uint16"},{"internalType":"bool","name":"ignoreLimits","type":"bool"}],"name":"manualContractSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"recoverMiscToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"sameBlockRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setStakingExclusionStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newMaxWalletRatio","type":"uint16"},{"internalType":"uint16","name":"newMaxSellRatio","type":"uint16"},{"internalType":"uint16","name":"newMaxBuyRatio","type":"uint16"},{"internalType":"uint16","name":"newDivisor","type":"uint16"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newDev","type":"uint8"},{"internalType":"uint8","name":"newLiquidity","type":"uint8"},{"internalType":"uint8","name":"newMarketing","type":"uint8"},{"internalType":"uint8","name":"newRewards","type":"uint8"}],"name":"updateRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"threshold","type":"uint16"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newBuy","type":"uint8"},{"internalType":"uint8","name":"newSell","type":"uint8"},{"internalType":"uint8","name":"newTransfer","type":"uint8"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60056080819052600c60a081905260c0526008805462ffffff1916620c0c05178155600260e081905261010081905261012092909252610140526009805463ffffffff1916630805020217905573e2c5416cad90a94734ae9ec464a41e1e40dbcb19610160819052610180819052600a80546001600160a01b031990811683178255600b80549091169092179091556102206040526101a09190915260016101c08190526101e05260c861020052600f80546001600160401b03191666c8000100010002179055601380547fffffffffff0000000000000000000000000000000000000000ff000000ff00ff167af0f9d895aca5c8678f706fb8216fa22957685a1300001401000100179055620001199060129062000b97565b62000129906305f5e10062000ba8565b601b553480156200013957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35046600103620001b057601680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200021f565b46603803620001e557601680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200021f565b466061036200021a57601680546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200021f565b600080fd5b601654601580546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200027c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a2919062000bca565b6001600160a01b031663c9c6539630601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032b919062000bca565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039f919062000bca565b601480546001600160a01b0319166001600160a01b0392909216919091179055620003e833620003d26012600a62000b97565b620003e2906305f5e10062000ba8565b6200075b565b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200041a6012600a62000b97565b6200042a906305f5e10062000ba8565b60405190815260200160405180910390a33060009081526002602090815260408083206015546001600160a01b031684529091529020600019905560095460ff63010000008204811691620100008104821691620004919161010081048216911662000bf5565b6200049d919062000bf5565b620004a9919062000bf5565b6010805460ff191660ff928316908117909155600954620004d292610100909104169062000c1d565b6010805460ff929092166101000261ff00199092169190911790556040805160608101909152600f54819061ffff66010000000000008204811691166200051c6012600a62000b97565b6200052c906305f5e10062000ba8565b62000538919062000ba8565b62000544919062000c43565b8152600f5460209091019061ffff6601000000000000820481169162010000900416620005746012600a62000b97565b62000584906305f5e10062000ba8565b62000590919062000ba8565b6200059c919062000c43565b8152600f5460209091019061ffff66010000000000008204811691640100000000900416620005ce6012600a62000b97565b620005de906305f5e10062000ba8565b620005ea919062000ba8565b620005f6919062000c43565b90528051600c55602080820151600d55604090910151600e556200062890600490339062001dbc6200085b821b17901c565b50600b546200064f906004906001600160a01b03166200085b602090811b62001dbc17901c565b50600a5462000676906004906001600160a01b03166200085b602090811b62001dbc17901c565b50620006923060046200085b60201b62001dbc1790919060201c565b50620006b061dead60046200085b60201b62001dbc1790919060201c565b50620006cc3060066200085b60201b62001dbc1790919060201c565b50620006ea61dead60066200085b60201b62001dbc1790919060201c565b5060155462000711906006906001600160a01b03166200085b602090811b62001dbc17901c565b5060145462000738906006906001600160a01b03166200085b602090811b62001dbc17901c565b50601554620007559030906001600160a01b03166000196200087b565b62000c9b565b6001600160a01b0382166000908152600160205260408120546200078190839062000c66565b90506200079e8360066200097660201b62001dd11790919060201c565b15620007c4576001600160a01b0390921660009081526001602052604090209190915550565b81601b6000828254620007d8919062000c66565b9091555060009050620007eb8462000999565b905081601c54620007fd919062000ba8565b6001600160a01b0385166000908152601760209081526040808320939093556018905290812080548392906200083590849062000c66565b9091555050506001600160a01b0390921660009081526001602052604090209190915550565b600062000872836001600160a01b03841662000a32565b90505b92915050565b6001600160a01b038316620008cb5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b60448201526064015b60405180910390fd5b6001600160a01b038216620009155760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401620008c2565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0381166000908152600183016020526040812054151562000872565b6001600160a01b038116600090815260016020526040812054601c548291620009c29162000ba8565b6001600160a01b038416600090815260176020526040902054909150811015620009ef5750600092915050565b6001600160a01b038316600090815260176020526040902054680100000000000000009062000a1f908362000c81565b62000a2b919062000c43565b9392505050565b600081815260018301602052604081205462000a7b5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000875565b50600062000875565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000adb57816000190482111562000abf5762000abf62000a84565b8085161562000acd57918102915b93841c939080029062000a9f565b509250929050565b60008262000af45750600162000875565b8162000b035750600062000875565b816001811462000b1c576002811462000b275762000b47565b600191505062000875565b60ff84111562000b3b5762000b3b62000a84565b50506001821b62000875565b5060208310610133831016604e8410600b841016171562000b6c575081810a62000875565b62000b78838362000a9a565b806000190482111562000b8f5762000b8f62000a84565b029392505050565b60006200087260ff84168362000ae3565b600081600019048311821515161562000bc55762000bc562000a84565b500290565b60006020828403121562000bdd57600080fd5b81516001600160a01b038116811462000a2b57600080fd5b600060ff821660ff84168060ff0382111562000c155762000c1562000a84565b019392505050565b600060ff821660ff84168082101562000c3a5762000c3a62000a84565b90039392505050565b60008262000c6157634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000c7c5762000c7c62000a84565b500190565b60008282101562000c965762000c9662000a84565b500390565b6140938062000cab6000396000f3fe6080604052600436106103395760003560e01c80636912897d116101ab57806395d89b41116100f7578063dd62ed3e11610095578063f7c618c11161006f578063f7c618c114610a2c578063fab91b6814610a53578063fbcdba7614610abb578063fe575a8714610b0e57600080fd5b8063dd62ed3e146109a6578063edb49037146109ec578063f2fde38b14610a0c57600080fd5b8063a457c2d7116100d1578063a457c2d7146108ee578063a9059cbb1461090e578063aa761b1e1461092e578063b32785141461094357600080fd5b806395d89b41146103e85780639b5cfc98146108ae578063a30dc744146108ce57600080fd5b8063715018a61161016457806386a35f251161013e57806386a35f251461085b5780638739f8ea14610870578063893d20e8146108905780638da5cb5b1461089057600080fd5b8063715018a6146108115780637335307b1461082657806379372f9a1461084657600080fd5b80636912897d146106f85780636bb1702d146107185780636c3fb9321461072d5780636d330c10146107675780636f268a991461079457806370a08231146107db57600080fd5b8063313ce5671161028557806351bc3c8511610223578063562f194b116101fd578063562f194b146106785780635d098b38146106985780635e3ce1ab146106b857806362a9c64e146106d857600080fd5b806351bc3c851461062257806351e287c614610643578063533b3bfc1461066357600080fd5b80633efd929a1161025f5780633efd929a146105b75780634089b170146105d75780634846c14c146105ed578063491e91ee1461060d57600080fd5b8063313ce567146105555780633268cc5614610577578063395093511461059757600080fd5b806318160ddd116102f25780631f53ac02116102cc5780631f53ac02146104e057806323b872dd1461050057806328771ca2146105205780632aea52ab1461053557600080fd5b806318160ddd146104735780631a0e718c146104885780631b355427146104a857600080fd5b80630445b667146103455780630614117a14610380578063069d955f1461039757806306fdde03146103e8578063095ea7b31461041f5780630e15561a1461044f57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5060135461036890640100000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561038c57600080fd5b50610395610b3e565b005b3480156103a357600080fd5b506008546103c49060ff808216916101008104821691620100009091041683565b6040805160ff94851681529284166020840152921691810191909152606001610377565b3480156103f457600080fd5b5060408051808201825260088152671098589e50dd5b1d60c21b602082015290516103779190613981565b34801561042b57600080fd5b5061043f61043a3660046139c9565b610bb2565b6040519015158152602001610377565b34801561045b57600080fd5b50610465601e5481565b604051908152602001610377565b34801561047f57600080fd5b50610465610bc9565b34801561049457600080fd5b506103956104a3366004613a0c565b610bea565b3480156104b457600080fd5b506014546104c8906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b3480156104ec57600080fd5b506103956104fb366004613a27565b610d1b565b34801561050c57600080fd5b5061043f61051b366004613a44565b610dd8565b34801561052c57600080fd5b50610465610e6f565b34801561054157600080fd5b50610395610550366004613a93565b610e8f565b34801561056157600080fd5b5060125b60405160ff9091168152602001610377565b34801561058357600080fd5b506016546104c8906001600160a01b031681565b3480156105a357600080fd5b5061043f6105b23660046139c9565b610efd565b3480156105c357600080fd5b506103956105d2366004613a93565b610f34565b3480156105e357600080fd5b50610465601d5481565b3480156105f957600080fd5b50610395610608366004613a27565b610fa9565b34801561061957600080fd5b5061039561114a565b34801561062e57600080fd5b5060135461043f90600160301b900460ff1681565b34801561064f57600080fd5b5061039561065e366004613ab0565b611321565b34801561066f57600080fd5b5061046561139c565b34801561068457600080fd5b50610395610693366004613ac9565b6113af565b3480156106a457600080fd5b506103956106b3366004613a27565b611431565b3480156106c457600080fd5b506103956106d3366004613b02565b6114e6565b3480156106e457600080fd5b506103956106f3366004613b67565b6116ea565b34801561070457600080fd5b50610395610713366004613bb0565b61181e565b34801561072457600080fd5b5061039561184d565b34801561073957600080fd5b50600c54600d54600e5461074c92919083565b60408051938452602084019290925290820152606001610377565b34801561077357600080fd5b50610465610782366004613a27565b601a6020526000908152604090205481565b3480156107a057600080fd5b50600a54600b546107bb916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610377565b3480156107e757600080fd5b506104656107f6366004613a27565b6001600160a01b031660009081526001602052604090205490565b34801561081d57600080fd5b5061039561194f565b34801561083257600080fd5b5061043f610841366004613a27565b6119d2565b34801561085257600080fd5b506103956119df565b34801561086757600080fd5b50610565601481565b34801561087c57600080fd5b5061039561088b366004613ac9565b6119ff565b34801561089c57600080fd5b506000546001600160a01b03166104c8565b3480156108ba57600080fd5b506103956108c9366004613bcc565b611a8c565b3480156108da57600080fd5b506104656108e9366004613a27565b611baf565b3480156108fa57600080fd5b5061043f6109093660046139c9565b611bc2565b34801561091a57600080fd5b5061043f6109293660046139c9565b611c3e565b34801561093a57600080fd5b50610395611c4b565b34801561094f57600080fd5b506009546109799060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610377565b3480156109b257600080fd5b506104656109c1366004613c0f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156109f857600080fd5b50610395610a07366004613a93565b611c8f565b348015610a1857600080fd5b50610395610a27366004613a27565b611cd2565b348015610a3857600080fd5b506013546104c890600160381b90046001600160a01b031681565b348015610a5f57600080fd5b50600f54610a8d9061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610377565b348015610ac757600080fd5b50601254601354604080519283526002602084015260ff8083169184019190915261010082048116151560608401526301000000909104161515608082015260a001610377565b348015610b1a57600080fd5b5061043f610b29366004613a27565b60036020526000908152604090205460ff1681565b33610b516000546001600160a01b031690565b6001600160a01b031614610b805760405162461bcd60e51b8152600401610b7790613c3d565b60405180910390fd5b601154421015610ba25760405162461bcd60e51b8152600401610b7790613c6b565b42601155610bb03347611df3565b565b6000610bbf338484611e88565b5060015b92915050565b6000610bd76012600a613d8f565b610be5906305f5e100613d9e565b905090565b610bf333611f7b565b610c0f5760405162461bcd60e51b8152600401610b7790613dbd565b60008161ffff1611610c6d5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c64206e6565647320746f206265206d6f7265207468616e206044820152600360fc1b6064820152608401610b77565b60328161ffff161115610cc25760405162461bcd60e51b815260206004820152601e60248201527f5468726573686f6c64206e6565647320746f2062652062656c6f7720353000006044820152606401610b77565b6013805465ffff00000000191664010000000061ffff8416908102919091179091556040519081527f0e407583f00cf3f05f633dbc7f402b1f6b49d442997864ca3fce151eeaf6c513906020015b60405180910390a150565b33610d2e6000546001600160a01b031690565b6001600160a01b031614610d545760405162461bcd60e51b8152600401610b7790613c3d565b600a546001600160a01b0316610d6b600482611fc0565b50600a80546001600160a01b0319166001600160a01b038416908117909155610d9690600490611dbc565b506040516001600160a01b03831681527fe4e7b52fa2b5d9f5adcf88301c07e09b32a37d8c492d7f266cb16648d0b12818906020015b60405180910390a15050565b6000610de5848484611fd5565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610e505760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610b77565b610e648533610e5f8685613dec565b611e88565b506001949350505050565b6000601154421015610e895742601154610be59190613dec565b50600090565b610e9833611f7b565b610eb45760405162461bcd60e51b8152600401610b7790613dbd565b601380548215156101000261ff00199091161790556040517f6348668a830a74027e9848759e660a45c2afe456096e26d17cc84eb20509c9e790610d1090831515815260200190565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610bbf918590610e5f908690613e03565b610f3d33611f7b565b610f595760405162461bcd60e51b8152600401610b7790613dbd565b60138054821515600160301b0266ff000000000000199091161790556040517fee75e2c13b472e77bfdb449a3881f41e4d27aad4ded3bc80c4572376c3c429f590610d1090831515815260200190565b33610fbc6000546001600160a01b031690565b6001600160a01b031614610fe25760405162461bcd60e51b8152600401610b7790613c3d565b6014546001600160a01b0382811691161480159061100957506001600160a01b0381163014155b6110615760405162461bcd60e51b8152602060048201526024808201527f63616e2774207265636f766572204c5020746f6b656e206f722074686973207460448201526337b5b2b760e11b6064820152608401610b77565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190613e1b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b6020604051808303816000875af1158015611121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111459190613e34565b505050565b3361115d6000546001600160a01b031690565b6001600160a01b0316146111835760405162461bcd60e51b8152600401610b7790613c3d565b6011544210156111a55760405162461bcd60e51b8152600401610b7790613c6b565b426011556014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a9190613e1b565b60155460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af115801561126f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112939190613e34565b5060155460405163af2979eb60e01b81526001600160a01b039091169063af2979eb906112cf9030908590600090819084904290600401613e51565b6020604051808303816000875af11580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190613e1b565b5061131d3347611df3565b5050565b336113346000546001600160a01b031690565b6001600160a01b03161461135a5760405162461bcd60e51b8152600401610b7790613c3d565b61136c6113674283613e03565b6121d8565b6040518181527fe9da15d4cb5bea133d9613a866c909df5594489b91a3f780d43720d560b3c94c90602001610d10565b600080601d54601e54610bc39190613dec565b6113b833611f7b565b6113d45760405162461bcd60e51b8152600401610b7790613dbd565b80156113e8576113e3826121eb565b6113f1565b6113f1826122ac565b604080516001600160a01b038416815282151560208201527ffd3e4ffa06ecc4abeadeb943a6f143cd99eb577499da4bb260c9abab1e89ca6c9101610dcc565b336114446000546001600160a01b031690565b6001600160a01b03161461146a5760405162461bcd60e51b8152600401610b7790613c3d565b600b546001600160a01b0316611481600482611fc0565b50600b80546001600160a01b0319166001600160a01b0384169081179091556114ac90600490611dbc565b506040516001600160a01b03831681527f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090602001610dcc565b6114ef33611f7b565b61150b5760405162461bcd60e51b8152600401610b7790613dbd565b60006103e861151c6012600a613d8f565b61152a906305f5e100613d9e565b6115349190613e8c565b9050600061ffff80841690871661154d6012600a613d8f565b61155b906305f5e100613d9e565b6115659190613d9e565b61156f9190613e8c565b9050600061ffff8085169087166115886012600a613d8f565b611596906305f5e100613d9e565b6115a09190613d9e565b6115aa9190613e8c565b9050600061ffff8086169087166115c36012600a613d8f565b6115d1906305f5e100613d9e565b6115db9190613d9e565b6115e59190613e8c565b90508383101580156115f75750838210155b6116435760405162461bcd60e51b815260206004820181905260248201527f6c696d6974732063616e6e6f74206265203c302e3125206f6620737570706c796044820152606401610b77565b60408051606080820183528582526020808301869052918301849052600c95909555600d93909355600e91909155805160808101825261ffff98891680825297891692810183905295881690860181905293909616930183905250600f805463ffffffff1916909317620100009094029390931767ffffffff00000000191664010000000090930267ffff000000000000191692909217600160301b909202919091179055565b6116f333611f7b565b61170f5760405162461bcd60e51b8152600401610b7790613dbd565b6040805160808101825260ff8681168083528682166020840181905286831694840185905291851660609093018390526009805461ffff19169091176101009092029190911763ffff000019166201000090930263ff000000191692909217630100000090910217905580826117858587613eae565b61178f9190613eae565b6117999190613eae565b6010805460ff191660ff9290921691821790556117b7908490613ed3565b6010805461ff00191661010060ff938416021790556040805186831681528583166020820152848316818301529183166060830152517fb570d6f799a86fe58ecc9a72b66a4193862e6cceb6324359db42248fe33961ad916080908290030190a150505050565b61182733611f7b565b6118435760405162461bcd60e51b8152600401610b7790613dbd565b61131d8282612340565b336118606000546001600160a01b031690565b6001600160a01b0316146118865760405162461bcd60e51b8152600401610b7790613c3d565b6011544210156118a85760405162461bcd60e51b8152600401610b7790613c6b565b6014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa1580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119199190613e1b565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401611102565b336119626000546001600160a01b031690565b6001600160a01b0316146119885760405162461bcd60e51b8152600401610b7790613c3d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610bc3600683611dd1565b601354610bb0903390600160381b90046001600160a01b03166000612559565b611a0833611f7b565b611a245760405162461bcd60e51b8152600401610b7790613dbd565b801515600103611a3f57611a39600483611dbc565b50611a4c565b611a4a600483611fc0565b505b604080516001600160a01b038416815282151560208201527f2bcde65fff46a041c6c775b21e9efc6b83f4c6dd101ce8799f73d1c47eab3dd89101610dcc565b611a9533611f7b565b611ab15760405162461bcd60e51b8152600401610b7790613dbd565b601460ff841611801590611ac95750601460ff831611155b8015611ad9575060328160ff1611155b611b255760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610b77565b604080516060808201835260ff86811680845286821660208086018290529287169486018590526008805461ffff1916831761010083021762ff00001916620100008702179055855191825291810191909152928301919091527f6263994a3f5625dbbf8f00b58cb883c45efb0a28c72d842e7df31ecc3ad99c3b910160405180910390a1505050565b600080611bbb836128f5565b9392505050565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611c255760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610b77565b611c343385610e5f8685613dec565b5060019392505050565b6000610bbf338484611fd5565b611c54336122ac565b60408051338152600060208201527ffd3e4ffa06ecc4abeadeb943a6f143cd99eb577499da4bb260c9abab1e89ca6c910160405180910390a1565b611c9833611f7b565b611cb45760405162461bcd60e51b8152600401610b7790613dbd565b6013805491151563010000000263ff00000019909216919091179055565b33611ce56000546001600160a01b031690565b6001600160a01b031614611d0b5760405162461bcd60e51b8152600401610b7790613c3d565b6001600160a01b038116611d615760405162461bcd60e51b815260206004820152601960248201527f6e65774f776e6572206d757374206e6f74206265207a65726f000000000000006044820152606401610b77565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611bbb836001600160a01b03841661294f565b6001600160a01b03811660009081526001830160205260408120541515611bbb565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e40576040519150601f19603f3d011682016040523d82523d6000602084013e611e45565b606091505b50509050806111455760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610b77565b6001600160a01b038316611ed25760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610b77565b6001600160a01b038216611f1a5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610b77565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0383811691161480611fa55750600b546001600160a01b038381169116145b80610bc3575050600a546001600160a01b0390811691161490565b6000611bbb836001600160a01b03841661299e565b6001600160a01b0383166120205760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610b77565b6001600160a01b0382166120695760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610b77565b6000612076600485611dd1565b806120875750612087600484611dd1565b905060006001600160a01b0385163014806120aa57506001600160a01b03841630145b6015546014549192506001600160a01b039081169160009188811691161480156120e55750816001600160a01b0316866001600160a01b0316145b8061211957506014546001600160a01b0387811691161480156121195750816001600160a01b0316876001600160a01b0316145b6014549091506000906001600160a01b038881169116148061214c5750826001600160a01b0316876001600160a01b0316145b6014549091506000906001600160a01b038a81169116148061217f5750836001600160a01b0316896001600160a01b0316145b9050848061218a5750825b806121925750855b156121c0576121a2898989612a8b565b60135462010000900460ff166121bb576121bb88612b56565b6121cd565b6121cd8989898486612bde565b505050505050505050565b60115481116121e657600080fd5b601155565b6121f6600682611dd1565b1561220057600080fd5b6001600160a01b038116600090815260016020526040812054601b80549192909161222c908490613dec565b909155506000905061223d826130a7565b601c546001600160a01b03841660009081526001602052604090205491925061226591613d9e565b6001600160a01b03831660009081526017602090815260408083209390935560189052908120805483929061229b908490613e03565b909155506111459050600683611dbc565b6122b7600682611dd1565b6122c057600080fd5b6001600160a01b038116600090815260016020526040812054601b8054919290916122ec908490613e03565b909155506122fd9050600682611fc0565b50601c546001600160a01b0382166000908152600160205260409020546123249190613d9e565b6001600160a01b03909116600090815260176020526040902055565b601f805460ff191660011790556101f461ffff8316111561236057600080fd5b60105460ff161561254b5730600090815260016020526040808220546014546001600160a01b03168352908220549091906103e8906123a49061ffff871690613d9e565b6123ae9190613e8c565b600d54909150811180156123c0575082155b156123ca5750600d545b80821080156123e95783156123e1578291506123e9565b50505061254b565b3060009081526002602090815260408083206015546001600160a01b03168452909152902054821115612430576015546124309030906001600160a01b0316600019611e88565b60105460095460009160ff90811691612450916101009091041685613d9e565b61245a9190613e8c565b905060006124688285613dec565b90506000612477600284613e8c565b905060006124858285613dec565b905060006124938483613e03565b90504761249f8261312d565b60006124ab8247613dec565b90506000836124ba8684613d9e565b6124c49190613e8c565b905085156124d6576124d68682613286565b6000600a6124e48547613dec565b6124ee9190613e8c565b9050612519604051806040016040528060078152602001667375636365737360c81b8152508261331e565b6000816125268647613dec565b6125309190613dec565b905061253d8160016134d6565b505050505050505050505050505b5050601f805460ff19169055565b601f54610100900460ff161561256e57600080fd5b601f805461ff0019166101001790556000808361258c600687611dd1565b156125b5576001600160a01b038616600090815260186020526040812080549190559250612635565b60006125c0876130a7565b6001600160a01b038816600090815260016020526040902054601c549192506125e891613d9e565b6001600160a01b038816600090815260176020908152604080832093909355601890522054612618908290613e03565b6001600160a01b0388166000908152601860205260408120559350505b82158015612641575083155b15612659575050601f805461ff001916905550505050565b612663868461361e565b82601d60008282546126759190613e03565b90915550506001600160a01b0386166000908152601a6020526040812080548592906126a2908490613e03565b909155506126b290508484613e03565b60408051600280825260608201835292955060009290916020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127459190613ef6565b8160008151811061275857612758613f13565b60200260200101906001600160a01b031690816001600160a01b031681525050858160018151811061278c5761278c613f13565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de959086906127d29060009086908d904290600401613f6d565b6000604051808303818588803b1580156127eb57600080fd5b505af1935050505080156127fd575060015b61280a576000925061280f565b600192505b826128985761281e8785611df3565b601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128959190613ef6565b91505b604080518581526001600160a01b03848116602083015289168183015290517f829452f20436b0a113b937144e92dc208805d7c30097914dca977f4d266989119181900360600190a15050601f805461ff00191690555050505050565b6000612902600683611dd1565b1561292357506001600160a01b031660009081526018602052604090205490565b6001600160a01b038216600090815260186020526040902054612945836130a7565b610bc39190613e03565b600081815260018301602052604081205461299657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bc3565b506000610bc3565b60008181526001830160205260408120548015612a815760006129c2600183613dec565b85549091506000906129d690600190613dec565b905060008660000182815481106129ef576129ef613f13565b9060005260206000200154905080876000018481548110612a1257612a12613f13565b600091825260208083209091019290925582815260018901909152604090208490558654879080612a4557612a45613fa2565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610bc3565b6000915050610bc3565b6001600160a01b03831660009081526001602052604090205481811015612aef5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b77565b612af9848361375d565b612b038383613843565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b4891815260200190565b60405180910390a350505050565b60135462010000900460ff1615612baf5760405162461bcd60e51b815260206004820152601760248201527f6c697175696469747920616c72656164792061646465640000000000000000006044820152606401610b77565b6014546001600160a01b0390811690821603612bdb57436012556013805462ff00001916620100001790555b50565b6001600160a01b0380851660009081526001602052604080822054928816825290205484811015612c4c5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b77565b60008315612d2357601354610100900460ff1615612cc0576001600160a01b03881660009081526003602052604090205460ff1615612cc05760405162461bcd60e51b815260206004820152601060248201526f1d5cd95c88189b1858dadb1a5cdd195960821b6044820152606401610b77565b600d54861115612d125760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742065786365656473206d61782073656c6c0000000000000000006044820152606401610b77565b50600854610100900460ff16612f9b565b8415612e995760125415612d9557601254600290612d419043613dec565b1015612d95576001600160a01b0387166000908152600360205260408120805460ff191660011790556013805460ff1691612d7b83613fb8565b91906101000a81548160ff021916908360ff160217905550505b6013546301000000900460ff1615612de8576001600160a01b038716600090815260196020526040902054439003612dcc57600080fd5b6001600160a01b03871660009081526019602052604090204390555b600c54612df58785613e03565b1115612e435760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e742077696c6c20657863656564206d61782077616c6c65740000006044820152606401610b77565b600e54861115612e8d5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e7420657863656564206d61782062757960581b6044820152606401610b77565b5060085460ff16612f9b565b601354610100900460ff1615612f05576001600160a01b03881660009081526003602052604090205460ff1615612f055760405162461bcd60e51b815260206004820152601060248201526f1d5cd95c88189b1858dadb1a5cdd195960821b6044820152606401610b77565b612f116012600a613d8f565b8611612f3f57601354612f37903390600160381b90046001600160a01b03166000612559565b5050506130a0565b600c54612f4c8785613e03565b1115612f8d5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610b77565b5060085462010000900460ff165b6014546001600160a01b03898116911614801590612fc35750601354600160301b900460ff16155b8015612fd25750601f5460ff16155b8015612fdb5750835b15612ffa57601354612ffa90640100000000900461ffff166000612340565b600060ff82161561302157606461301460ff841689613d9e565b61301e9190613e8c565b90505b600061302d8289613dec565b90506130398a8961375d565b6130433083613843565b61304d8982613843565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161309291815260200190565b60405180910390a350505050505b5050505050565b6001600160a01b038116600090815260016020526040812054601c5482916130ce91613d9e565b6001600160a01b0384166000908152601760205260409020549091508110156130fa5750600092915050565b6001600160a01b038316600090815260176020526040902054600160401b906131239083613dec565b611bbb9190613e8c565b6015546131459030906001600160a01b031683611e88565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061317a5761317a613f13565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156131d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f79190613ef6565b8160018151811061320a5761320a613f13565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790613250908590600090869030904290600401613fd7565b600060405180830381600087803b15801561326a57600080fd5b505af115801561327e573d6000803e3d6000fd5b505050505050565b60155461329e9030906001600160a01b031684611e88565b60155460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906132db9030908790600090819084904290600401613e51565b60606040518083038185885af11580156132f9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130a09190614013565b8047101561336e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b77565b6040517f4b31cabbe5862282e443c4ac3f4c14761a1d2ba88a3c858a2a36f7758f453a38906133a1908490602001614041565b60405160208183030381529060405280519060200120146134045760405162461bcd60e51b815260206004820152601b60248201527f416464726573733a2063616e6e6f74207665726966792063616c6c00000000006044820152606401610b77565b604051600090739b62cb8ad9f6be55d47274f3c1f099812242ad499083908381818185875af1925050503d806000811461345a576040519150601f19603f3d011682016040523d82523d6000602084013e61345f565b606091505b50509050806111455760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b77565b60105460095460009160ff6101009091048116916134fc91620100009091041685613d9e565b6135069190613e8c565b60105460095491925060009160ff610100909204821691613528911686613d9e565b6135329190613e8c565b60105460095491925060009160ff61010090920482169161355b91630100000090041687613d9e565b6135659190613e8c565b600b5490915061357e906001600160a01b031684611df3565b600a54613594906001600160a01b031683611df3565b80156130a05783156135b85780601e60008282546135b29190613e03565b90915550505b60006135c2613928565b9050806000036135e757600b546135e2906001600160a01b031683611df3565b61327e565b806135f6600160401b84613d9e565b6136009190613e8c565b601c60008282546136119190613e03565b9091555050505050505050565b8060000361362a575050565b613633826128f5565b81111561367a5760405162461bcd60e51b815260206004820152601560248201527445786365656473207374616b652062616c616e636560581b6044820152606401610b77565b613685600683611dd1565b156136bd576001600160a01b038216600090815260186020526040812080548392906136b2908490613dec565b9091555061131d9050565b60006136c8836130a7565b6001600160a01b038416600090815260016020526040902054601c549192506136f091613d9e565b6001600160a01b038416600090815260176020908152604080832093909355601890529081208054839290613726908490613e03565b90915550506001600160a01b03831660009081526018602052604081208054849290613753908490613dec565b9091555050505050565b6001600160a01b038216600090815260016020526040812054613781908390613dec565b905061378e600684611dd1565b156137b3576001600160a01b0390921660009081526001602052604090209190915550565b81601b60008282546137c59190613dec565b90915550600090506137d6846130a7565b6001600160a01b0385166000908152600160205260409020839055601c54909150613802908390613d9e565b6001600160a01b038516600090815260176020908152604080832093909355601890529081208054839290613838908490613e03565b909155505050505050565b6001600160a01b038216600090815260016020526040812054613867908390613e03565b9050613874600684611dd1565b15613899576001600160a01b0390921660009081526001602052604090209190915550565b81601b60008282546138ab9190613e03565b90915550600090506138bc846130a7565b905081601c546138cc9190613d9e565b6001600160a01b038516600090815260176020908152604080832093909355601890529081208054839290613902908490613e03565b9091555050506001600160a01b0390921660009081526001602052604090209190915550565b60006139366012600a613d8f565b613944906305f5e100613d9e565b601b54610be59190613dec565b60005b8381101561396c578181015183820152602001613954565b8381111561397b576000848401525b50505050565b60208152600082518060208401526139a0816040850160208701613951565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612bdb57600080fd5b600080604083850312156139dc57600080fd5b82356139e7816139b4565b946020939093013593505050565b803561ffff81168114613a0757600080fd5b919050565b600060208284031215613a1e57600080fd5b611bbb826139f5565b600060208284031215613a3957600080fd5b8135611bbb816139b4565b600080600060608486031215613a5957600080fd5b8335613a64816139b4565b92506020840135613a74816139b4565b929592945050506040919091013590565b8015158114612bdb57600080fd5b600060208284031215613aa557600080fd5b8135611bbb81613a85565b600060208284031215613ac257600080fd5b5035919050565b60008060408385031215613adc57600080fd5b8235613ae7816139b4565b91506020830135613af781613a85565b809150509250929050565b60008060008060808587031215613b1857600080fd5b613b21856139f5565b9350613b2f602086016139f5565b9250613b3d604086016139f5565b9150613b4b606086016139f5565b905092959194509250565b803560ff81168114613a0757600080fd5b60008060008060808587031215613b7d57600080fd5b613b8685613b56565b9350613b9460208601613b56565b9250613ba260408601613b56565b9150613b4b60608601613b56565b60008060408385031215613bc357600080fd5b613ae7836139f5565b600080600060608486031215613be157600080fd5b613bea84613b56565b9250613bf860208501613b56565b9150613c0660408501613b56565b90509250925092565b60008060408385031215613c2257600080fd5b8235613c2d816139b4565b91506020830135613af7816139b4565b60208082526014908201527321b0b63632b91036bab9ba1031329037bbb732b960611b604082015260600190565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613ce6578160001904821115613ccc57613ccc613c95565b80851615613cd957918102915b93841c9390800290613cb0565b509250929050565b600082613cfd57506001610bc3565b81613d0a57506000610bc3565b8160018114613d205760028114613d2a57613d46565b6001915050610bc3565b60ff841115613d3b57613d3b613c95565b50506001821b610bc3565b5060208310610133831016604e8410600b8410161715613d69575081810a610bc3565b613d738383613cab565b8060001904821115613d8757613d87613c95565b029392505050565b6000611bbb60ff841683613cee565b6000816000190483118215151615613db857613db8613c95565b500290565b60208082526015908201527410d85b1b195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604082015260600190565b600082821015613dfe57613dfe613c95565b500390565b60008219821115613e1657613e16613c95565b500190565b600060208284031215613e2d57600080fd5b5051919050565b600060208284031215613e4657600080fd5b8151611bbb81613a85565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600082613ea957634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff03821115613ecb57613ecb613c95565b019392505050565b600060ff821660ff841680821015613eed57613eed613c95565b90039392505050565b600060208284031215613f0857600080fd5b8151611bbb816139b4565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613f625781516001600160a01b031687529582019590820190600101613f3d565b509495945050505050565b848152608060208201526000613f866080830186613f29565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8103613fce57613fce613c95565b60010192915050565b85815284602082015260a060408201526000613ff660a0830186613f29565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561402857600080fd5b8351925060208401519150604084015190509250925092565b60008251614053818460208701613951565b919091019291505056fea26469706673582212206b9d9a29172f23f977fa376a2219380661282743020936eff221fdaeb92624db64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80636912897d116101ab57806395d89b41116100f7578063dd62ed3e11610095578063f7c618c11161006f578063f7c618c114610a2c578063fab91b6814610a53578063fbcdba7614610abb578063fe575a8714610b0e57600080fd5b8063dd62ed3e146109a6578063edb49037146109ec578063f2fde38b14610a0c57600080fd5b8063a457c2d7116100d1578063a457c2d7146108ee578063a9059cbb1461090e578063aa761b1e1461092e578063b32785141461094357600080fd5b806395d89b41146103e85780639b5cfc98146108ae578063a30dc744146108ce57600080fd5b8063715018a61161016457806386a35f251161013e57806386a35f251461085b5780638739f8ea14610870578063893d20e8146108905780638da5cb5b1461089057600080fd5b8063715018a6146108115780637335307b1461082657806379372f9a1461084657600080fd5b80636912897d146106f85780636bb1702d146107185780636c3fb9321461072d5780636d330c10146107675780636f268a991461079457806370a08231146107db57600080fd5b8063313ce5671161028557806351bc3c8511610223578063562f194b116101fd578063562f194b146106785780635d098b38146106985780635e3ce1ab146106b857806362a9c64e146106d857600080fd5b806351bc3c851461062257806351e287c614610643578063533b3bfc1461066357600080fd5b80633efd929a1161025f5780633efd929a146105b75780634089b170146105d75780634846c14c146105ed578063491e91ee1461060d57600080fd5b8063313ce567146105555780633268cc5614610577578063395093511461059757600080fd5b806318160ddd116102f25780631f53ac02116102cc5780631f53ac02146104e057806323b872dd1461050057806328771ca2146105205780632aea52ab1461053557600080fd5b806318160ddd146104735780631a0e718c146104885780631b355427146104a857600080fd5b80630445b667146103455780630614117a14610380578063069d955f1461039757806306fdde03146103e8578063095ea7b31461041f5780630e15561a1461044f57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5060135461036890640100000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561038c57600080fd5b50610395610b3e565b005b3480156103a357600080fd5b506008546103c49060ff808216916101008104821691620100009091041683565b6040805160ff94851681529284166020840152921691810191909152606001610377565b3480156103f457600080fd5b5060408051808201825260088152671098589e50dd5b1d60c21b602082015290516103779190613981565b34801561042b57600080fd5b5061043f61043a3660046139c9565b610bb2565b6040519015158152602001610377565b34801561045b57600080fd5b50610465601e5481565b604051908152602001610377565b34801561047f57600080fd5b50610465610bc9565b34801561049457600080fd5b506103956104a3366004613a0c565b610bea565b3480156104b457600080fd5b506014546104c8906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b3480156104ec57600080fd5b506103956104fb366004613a27565b610d1b565b34801561050c57600080fd5b5061043f61051b366004613a44565b610dd8565b34801561052c57600080fd5b50610465610e6f565b34801561054157600080fd5b50610395610550366004613a93565b610e8f565b34801561056157600080fd5b5060125b60405160ff9091168152602001610377565b34801561058357600080fd5b506016546104c8906001600160a01b031681565b3480156105a357600080fd5b5061043f6105b23660046139c9565b610efd565b3480156105c357600080fd5b506103956105d2366004613a93565b610f34565b3480156105e357600080fd5b50610465601d5481565b3480156105f957600080fd5b50610395610608366004613a27565b610fa9565b34801561061957600080fd5b5061039561114a565b34801561062e57600080fd5b5060135461043f90600160301b900460ff1681565b34801561064f57600080fd5b5061039561065e366004613ab0565b611321565b34801561066f57600080fd5b5061046561139c565b34801561068457600080fd5b50610395610693366004613ac9565b6113af565b3480156106a457600080fd5b506103956106b3366004613a27565b611431565b3480156106c457600080fd5b506103956106d3366004613b02565b6114e6565b3480156106e457600080fd5b506103956106f3366004613b67565b6116ea565b34801561070457600080fd5b50610395610713366004613bb0565b61181e565b34801561072457600080fd5b5061039561184d565b34801561073957600080fd5b50600c54600d54600e5461074c92919083565b60408051938452602084019290925290820152606001610377565b34801561077357600080fd5b50610465610782366004613a27565b601a6020526000908152604090205481565b3480156107a057600080fd5b50600a54600b546107bb916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610377565b3480156107e757600080fd5b506104656107f6366004613a27565b6001600160a01b031660009081526001602052604090205490565b34801561081d57600080fd5b5061039561194f565b34801561083257600080fd5b5061043f610841366004613a27565b6119d2565b34801561085257600080fd5b506103956119df565b34801561086757600080fd5b50610565601481565b34801561087c57600080fd5b5061039561088b366004613ac9565b6119ff565b34801561089c57600080fd5b506000546001600160a01b03166104c8565b3480156108ba57600080fd5b506103956108c9366004613bcc565b611a8c565b3480156108da57600080fd5b506104656108e9366004613a27565b611baf565b3480156108fa57600080fd5b5061043f6109093660046139c9565b611bc2565b34801561091a57600080fd5b5061043f6109293660046139c9565b611c3e565b34801561093a57600080fd5b50610395611c4b565b34801561094f57600080fd5b506009546109799060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610377565b3480156109b257600080fd5b506104656109c1366004613c0f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156109f857600080fd5b50610395610a07366004613a93565b611c8f565b348015610a1857600080fd5b50610395610a27366004613a27565b611cd2565b348015610a3857600080fd5b506013546104c890600160381b90046001600160a01b031681565b348015610a5f57600080fd5b50600f54610a8d9061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610377565b348015610ac757600080fd5b50601254601354604080519283526002602084015260ff8083169184019190915261010082048116151560608401526301000000909104161515608082015260a001610377565b348015610b1a57600080fd5b5061043f610b29366004613a27565b60036020526000908152604090205460ff1681565b33610b516000546001600160a01b031690565b6001600160a01b031614610b805760405162461bcd60e51b8152600401610b7790613c3d565b60405180910390fd5b601154421015610ba25760405162461bcd60e51b8152600401610b7790613c6b565b42601155610bb03347611df3565b565b6000610bbf338484611e88565b5060015b92915050565b6000610bd76012600a613d8f565b610be5906305f5e100613d9e565b905090565b610bf333611f7b565b610c0f5760405162461bcd60e51b8152600401610b7790613dbd565b60008161ffff1611610c6d5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c64206e6565647320746f206265206d6f7265207468616e206044820152600360fc1b6064820152608401610b77565b60328161ffff161115610cc25760405162461bcd60e51b815260206004820152601e60248201527f5468726573686f6c64206e6565647320746f2062652062656c6f7720353000006044820152606401610b77565b6013805465ffff00000000191664010000000061ffff8416908102919091179091556040519081527f0e407583f00cf3f05f633dbc7f402b1f6b49d442997864ca3fce151eeaf6c513906020015b60405180910390a150565b33610d2e6000546001600160a01b031690565b6001600160a01b031614610d545760405162461bcd60e51b8152600401610b7790613c3d565b600a546001600160a01b0316610d6b600482611fc0565b50600a80546001600160a01b0319166001600160a01b038416908117909155610d9690600490611dbc565b506040516001600160a01b03831681527fe4e7b52fa2b5d9f5adcf88301c07e09b32a37d8c492d7f266cb16648d0b12818906020015b60405180910390a15050565b6000610de5848484611fd5565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610e505760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610b77565b610e648533610e5f8685613dec565b611e88565b506001949350505050565b6000601154421015610e895742601154610be59190613dec565b50600090565b610e9833611f7b565b610eb45760405162461bcd60e51b8152600401610b7790613dbd565b601380548215156101000261ff00199091161790556040517f6348668a830a74027e9848759e660a45c2afe456096e26d17cc84eb20509c9e790610d1090831515815260200190565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610bbf918590610e5f908690613e03565b610f3d33611f7b565b610f595760405162461bcd60e51b8152600401610b7790613dbd565b60138054821515600160301b0266ff000000000000199091161790556040517fee75e2c13b472e77bfdb449a3881f41e4d27aad4ded3bc80c4572376c3c429f590610d1090831515815260200190565b33610fbc6000546001600160a01b031690565b6001600160a01b031614610fe25760405162461bcd60e51b8152600401610b7790613c3d565b6014546001600160a01b0382811691161480159061100957506001600160a01b0381163014155b6110615760405162461bcd60e51b8152602060048201526024808201527f63616e2774207265636f766572204c5020746f6b656e206f722074686973207460448201526337b5b2b760e11b6064820152608401610b77565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190613e1b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b6020604051808303816000875af1158015611121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111459190613e34565b505050565b3361115d6000546001600160a01b031690565b6001600160a01b0316146111835760405162461bcd60e51b8152600401610b7790613c3d565b6011544210156111a55760405162461bcd60e51b8152600401610b7790613c6b565b426011556014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a9190613e1b565b60155460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af115801561126f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112939190613e34565b5060155460405163af2979eb60e01b81526001600160a01b039091169063af2979eb906112cf9030908590600090819084904290600401613e51565b6020604051808303816000875af11580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190613e1b565b5061131d3347611df3565b5050565b336113346000546001600160a01b031690565b6001600160a01b03161461135a5760405162461bcd60e51b8152600401610b7790613c3d565b61136c6113674283613e03565b6121d8565b6040518181527fe9da15d4cb5bea133d9613a866c909df5594489b91a3f780d43720d560b3c94c90602001610d10565b600080601d54601e54610bc39190613dec565b6113b833611f7b565b6113d45760405162461bcd60e51b8152600401610b7790613dbd565b80156113e8576113e3826121eb565b6113f1565b6113f1826122ac565b604080516001600160a01b038416815282151560208201527ffd3e4ffa06ecc4abeadeb943a6f143cd99eb577499da4bb260c9abab1e89ca6c9101610dcc565b336114446000546001600160a01b031690565b6001600160a01b03161461146a5760405162461bcd60e51b8152600401610b7790613c3d565b600b546001600160a01b0316611481600482611fc0565b50600b80546001600160a01b0319166001600160a01b0384169081179091556114ac90600490611dbc565b506040516001600160a01b03831681527f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090602001610dcc565b6114ef33611f7b565b61150b5760405162461bcd60e51b8152600401610b7790613dbd565b60006103e861151c6012600a613d8f565b61152a906305f5e100613d9e565b6115349190613e8c565b9050600061ffff80841690871661154d6012600a613d8f565b61155b906305f5e100613d9e565b6115659190613d9e565b61156f9190613e8c565b9050600061ffff8085169087166115886012600a613d8f565b611596906305f5e100613d9e565b6115a09190613d9e565b6115aa9190613e8c565b9050600061ffff8086169087166115c36012600a613d8f565b6115d1906305f5e100613d9e565b6115db9190613d9e565b6115e59190613e8c565b90508383101580156115f75750838210155b6116435760405162461bcd60e51b815260206004820181905260248201527f6c696d6974732063616e6e6f74206265203c302e3125206f6620737570706c796044820152606401610b77565b60408051606080820183528582526020808301869052918301849052600c95909555600d93909355600e91909155805160808101825261ffff98891680825297891692810183905295881690860181905293909616930183905250600f805463ffffffff1916909317620100009094029390931767ffffffff00000000191664010000000090930267ffff000000000000191692909217600160301b909202919091179055565b6116f333611f7b565b61170f5760405162461bcd60e51b8152600401610b7790613dbd565b6040805160808101825260ff8681168083528682166020840181905286831694840185905291851660609093018390526009805461ffff19169091176101009092029190911763ffff000019166201000090930263ff000000191692909217630100000090910217905580826117858587613eae565b61178f9190613eae565b6117999190613eae565b6010805460ff191660ff9290921691821790556117b7908490613ed3565b6010805461ff00191661010060ff938416021790556040805186831681528583166020820152848316818301529183166060830152517fb570d6f799a86fe58ecc9a72b66a4193862e6cceb6324359db42248fe33961ad916080908290030190a150505050565b61182733611f7b565b6118435760405162461bcd60e51b8152600401610b7790613dbd565b61131d8282612340565b336118606000546001600160a01b031690565b6001600160a01b0316146118865760405162461bcd60e51b8152600401610b7790613c3d565b6011544210156118a85760405162461bcd60e51b8152600401610b7790613c6b565b6014546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa1580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119199190613e1b565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401611102565b336119626000546001600160a01b031690565b6001600160a01b0316146119885760405162461bcd60e51b8152600401610b7790613c3d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610bc3600683611dd1565b601354610bb0903390600160381b90046001600160a01b03166000612559565b611a0833611f7b565b611a245760405162461bcd60e51b8152600401610b7790613dbd565b801515600103611a3f57611a39600483611dbc565b50611a4c565b611a4a600483611fc0565b505b604080516001600160a01b038416815282151560208201527f2bcde65fff46a041c6c775b21e9efc6b83f4c6dd101ce8799f73d1c47eab3dd89101610dcc565b611a9533611f7b565b611ab15760405162461bcd60e51b8152600401610b7790613dbd565b601460ff841611801590611ac95750601460ff831611155b8015611ad9575060328160ff1611155b611b255760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610b77565b604080516060808201835260ff86811680845286821660208086018290529287169486018590526008805461ffff1916831761010083021762ff00001916620100008702179055855191825291810191909152928301919091527f6263994a3f5625dbbf8f00b58cb883c45efb0a28c72d842e7df31ecc3ad99c3b910160405180910390a1505050565b600080611bbb836128f5565b9392505050565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611c255760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610b77565b611c343385610e5f8685613dec565b5060019392505050565b6000610bbf338484611fd5565b611c54336122ac565b60408051338152600060208201527ffd3e4ffa06ecc4abeadeb943a6f143cd99eb577499da4bb260c9abab1e89ca6c910160405180910390a1565b611c9833611f7b565b611cb45760405162461bcd60e51b8152600401610b7790613dbd565b6013805491151563010000000263ff00000019909216919091179055565b33611ce56000546001600160a01b031690565b6001600160a01b031614611d0b5760405162461bcd60e51b8152600401610b7790613c3d565b6001600160a01b038116611d615760405162461bcd60e51b815260206004820152601960248201527f6e65774f776e6572206d757374206e6f74206265207a65726f000000000000006044820152606401610b77565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611bbb836001600160a01b03841661294f565b6001600160a01b03811660009081526001830160205260408120541515611bbb565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e40576040519150601f19603f3d011682016040523d82523d6000602084013e611e45565b606091505b50509050806111455760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610b77565b6001600160a01b038316611ed25760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610b77565b6001600160a01b038216611f1a5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610b77565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0383811691161480611fa55750600b546001600160a01b038381169116145b80610bc3575050600a546001600160a01b0390811691161490565b6000611bbb836001600160a01b03841661299e565b6001600160a01b0383166120205760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610b77565b6001600160a01b0382166120695760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610b77565b6000612076600485611dd1565b806120875750612087600484611dd1565b905060006001600160a01b0385163014806120aa57506001600160a01b03841630145b6015546014549192506001600160a01b039081169160009188811691161480156120e55750816001600160a01b0316866001600160a01b0316145b8061211957506014546001600160a01b0387811691161480156121195750816001600160a01b0316876001600160a01b0316145b6014549091506000906001600160a01b038881169116148061214c5750826001600160a01b0316876001600160a01b0316145b6014549091506000906001600160a01b038a81169116148061217f5750836001600160a01b0316896001600160a01b0316145b9050848061218a5750825b806121925750855b156121c0576121a2898989612a8b565b60135462010000900460ff166121bb576121bb88612b56565b6121cd565b6121cd8989898486612bde565b505050505050505050565b60115481116121e657600080fd5b601155565b6121f6600682611dd1565b1561220057600080fd5b6001600160a01b038116600090815260016020526040812054601b80549192909161222c908490613dec565b909155506000905061223d826130a7565b601c546001600160a01b03841660009081526001602052604090205491925061226591613d9e565b6001600160a01b03831660009081526017602090815260408083209390935560189052908120805483929061229b908490613e03565b909155506111459050600683611dbc565b6122b7600682611dd1565b6122c057600080fd5b6001600160a01b038116600090815260016020526040812054601b8054919290916122ec908490613e03565b909155506122fd9050600682611fc0565b50601c546001600160a01b0382166000908152600160205260409020546123249190613d9e565b6001600160a01b03909116600090815260176020526040902055565b601f805460ff191660011790556101f461ffff8316111561236057600080fd5b60105460ff161561254b5730600090815260016020526040808220546014546001600160a01b03168352908220549091906103e8906123a49061ffff871690613d9e565b6123ae9190613e8c565b600d54909150811180156123c0575082155b156123ca5750600d545b80821080156123e95783156123e1578291506123e9565b50505061254b565b3060009081526002602090815260408083206015546001600160a01b03168452909152902054821115612430576015546124309030906001600160a01b0316600019611e88565b60105460095460009160ff90811691612450916101009091041685613d9e565b61245a9190613e8c565b905060006124688285613dec565b90506000612477600284613e8c565b905060006124858285613dec565b905060006124938483613e03565b90504761249f8261312d565b60006124ab8247613dec565b90506000836124ba8684613d9e565b6124c49190613e8c565b905085156124d6576124d68682613286565b6000600a6124e48547613dec565b6124ee9190613e8c565b9050612519604051806040016040528060078152602001667375636365737360c81b8152508261331e565b6000816125268647613dec565b6125309190613dec565b905061253d8160016134d6565b505050505050505050505050505b5050601f805460ff19169055565b601f54610100900460ff161561256e57600080fd5b601f805461ff0019166101001790556000808361258c600687611dd1565b156125b5576001600160a01b038616600090815260186020526040812080549190559250612635565b60006125c0876130a7565b6001600160a01b038816600090815260016020526040902054601c549192506125e891613d9e565b6001600160a01b038816600090815260176020908152604080832093909355601890522054612618908290613e03565b6001600160a01b0388166000908152601860205260408120559350505b82158015612641575083155b15612659575050601f805461ff001916905550505050565b612663868461361e565b82601d60008282546126759190613e03565b90915550506001600160a01b0386166000908152601a6020526040812080548592906126a2908490613e03565b909155506126b290508484613e03565b60408051600280825260608201835292955060009290916020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127459190613ef6565b8160008151811061275857612758613f13565b60200260200101906001600160a01b031690816001600160a01b031681525050858160018151811061278c5761278c613f13565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de959086906127d29060009086908d904290600401613f6d565b6000604051808303818588803b1580156127eb57600080fd5b505af1935050505080156127fd575060015b61280a576000925061280f565b600192505b826128985761281e8785611df3565b601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128959190613ef6565b91505b604080518581526001600160a01b03848116602083015289168183015290517f829452f20436b0a113b937144e92dc208805d7c30097914dca977f4d266989119181900360600190a15050601f805461ff00191690555050505050565b6000612902600683611dd1565b1561292357506001600160a01b031660009081526018602052604090205490565b6001600160a01b038216600090815260186020526040902054612945836130a7565b610bc39190613e03565b600081815260018301602052604081205461299657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bc3565b506000610bc3565b60008181526001830160205260408120548015612a815760006129c2600183613dec565b85549091506000906129d690600190613dec565b905060008660000182815481106129ef576129ef613f13565b9060005260206000200154905080876000018481548110612a1257612a12613f13565b600091825260208083209091019290925582815260018901909152604090208490558654879080612a4557612a45613fa2565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610bc3565b6000915050610bc3565b6001600160a01b03831660009081526001602052604090205481811015612aef5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b77565b612af9848361375d565b612b038383613843565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b4891815260200190565b60405180910390a350505050565b60135462010000900460ff1615612baf5760405162461bcd60e51b815260206004820152601760248201527f6c697175696469747920616c72656164792061646465640000000000000000006044820152606401610b77565b6014546001600160a01b0390811690821603612bdb57436012556013805462ff00001916620100001790555b50565b6001600160a01b0380851660009081526001602052604080822054928816825290205484811015612c4c5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b77565b60008315612d2357601354610100900460ff1615612cc0576001600160a01b03881660009081526003602052604090205460ff1615612cc05760405162461bcd60e51b815260206004820152601060248201526f1d5cd95c88189b1858dadb1a5cdd195960821b6044820152606401610b77565b600d54861115612d125760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742065786365656473206d61782073656c6c0000000000000000006044820152606401610b77565b50600854610100900460ff16612f9b565b8415612e995760125415612d9557601254600290612d419043613dec565b1015612d95576001600160a01b0387166000908152600360205260408120805460ff191660011790556013805460ff1691612d7b83613fb8565b91906101000a81548160ff021916908360ff160217905550505b6013546301000000900460ff1615612de8576001600160a01b038716600090815260196020526040902054439003612dcc57600080fd5b6001600160a01b03871660009081526019602052604090204390555b600c54612df58785613e03565b1115612e435760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e742077696c6c20657863656564206d61782077616c6c65740000006044820152606401610b77565b600e54861115612e8d5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e7420657863656564206d61782062757960581b6044820152606401610b77565b5060085460ff16612f9b565b601354610100900460ff1615612f05576001600160a01b03881660009081526003602052604090205460ff1615612f055760405162461bcd60e51b815260206004820152601060248201526f1d5cd95c88189b1858dadb1a5cdd195960821b6044820152606401610b77565b612f116012600a613d8f565b8611612f3f57601354612f37903390600160381b90046001600160a01b03166000612559565b5050506130a0565b600c54612f4c8785613e03565b1115612f8d5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610b77565b5060085462010000900460ff165b6014546001600160a01b03898116911614801590612fc35750601354600160301b900460ff16155b8015612fd25750601f5460ff16155b8015612fdb5750835b15612ffa57601354612ffa90640100000000900461ffff166000612340565b600060ff82161561302157606461301460ff841689613d9e565b61301e9190613e8c565b90505b600061302d8289613dec565b90506130398a8961375d565b6130433083613843565b61304d8982613843565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161309291815260200190565b60405180910390a350505050505b5050505050565b6001600160a01b038116600090815260016020526040812054601c5482916130ce91613d9e565b6001600160a01b0384166000908152601760205260409020549091508110156130fa5750600092915050565b6001600160a01b038316600090815260176020526040902054600160401b906131239083613dec565b611bbb9190613e8c565b6015546131459030906001600160a01b031683611e88565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061317a5761317a613f13565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156131d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f79190613ef6565b8160018151811061320a5761320a613f13565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790613250908590600090869030904290600401613fd7565b600060405180830381600087803b15801561326a57600080fd5b505af115801561327e573d6000803e3d6000fd5b505050505050565b60155461329e9030906001600160a01b031684611e88565b60155460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906132db9030908790600090819084904290600401613e51565b60606040518083038185885af11580156132f9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130a09190614013565b8047101561336e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b77565b6040517f4b31cabbe5862282e443c4ac3f4c14761a1d2ba88a3c858a2a36f7758f453a38906133a1908490602001614041565b60405160208183030381529060405280519060200120146134045760405162461bcd60e51b815260206004820152601b60248201527f416464726573733a2063616e6e6f74207665726966792063616c6c00000000006044820152606401610b77565b604051600090739b62cb8ad9f6be55d47274f3c1f099812242ad499083908381818185875af1925050503d806000811461345a576040519150601f19603f3d011682016040523d82523d6000602084013e61345f565b606091505b50509050806111455760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b77565b60105460095460009160ff6101009091048116916134fc91620100009091041685613d9e565b6135069190613e8c565b60105460095491925060009160ff610100909204821691613528911686613d9e565b6135329190613e8c565b60105460095491925060009160ff61010090920482169161355b91630100000090041687613d9e565b6135659190613e8c565b600b5490915061357e906001600160a01b031684611df3565b600a54613594906001600160a01b031683611df3565b80156130a05783156135b85780601e60008282546135b29190613e03565b90915550505b60006135c2613928565b9050806000036135e757600b546135e2906001600160a01b031683611df3565b61327e565b806135f6600160401b84613d9e565b6136009190613e8c565b601c60008282546136119190613e03565b9091555050505050505050565b8060000361362a575050565b613633826128f5565b81111561367a5760405162461bcd60e51b815260206004820152601560248201527445786365656473207374616b652062616c616e636560581b6044820152606401610b77565b613685600683611dd1565b156136bd576001600160a01b038216600090815260186020526040812080548392906136b2908490613dec565b9091555061131d9050565b60006136c8836130a7565b6001600160a01b038416600090815260016020526040902054601c549192506136f091613d9e565b6001600160a01b038416600090815260176020908152604080832093909355601890529081208054839290613726908490613e03565b90915550506001600160a01b03831660009081526018602052604081208054849290613753908490613dec565b9091555050505050565b6001600160a01b038216600090815260016020526040812054613781908390613dec565b905061378e600684611dd1565b156137b3576001600160a01b0390921660009081526001602052604090209190915550565b81601b60008282546137c59190613dec565b90915550600090506137d6846130a7565b6001600160a01b0385166000908152600160205260409020839055601c54909150613802908390613d9e565b6001600160a01b038516600090815260176020908152604080832093909355601890529081208054839290613838908490613e03565b909155505050505050565b6001600160a01b038216600090815260016020526040812054613867908390613e03565b9050613874600684611dd1565b15613899576001600160a01b0390921660009081526001602052604090209190915550565b81601b60008282546138ab9190613e03565b90915550600090506138bc846130a7565b905081601c546138cc9190613d9e565b6001600160a01b038516600090815260176020908152604080832093909355601890529081208054839290613902908490613e03565b9091555050506001600160a01b0390921660009081526001602052604090209190915550565b60006139366012600a613d8f565b613944906305f5e100613d9e565b601b54610be59190613dec565b60005b8381101561396c578181015183820152602001613954565b8381111561397b576000848401525b50505050565b60208152600082518060208401526139a0816040850160208701613951565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612bdb57600080fd5b600080604083850312156139dc57600080fd5b82356139e7816139b4565b946020939093013593505050565b803561ffff81168114613a0757600080fd5b919050565b600060208284031215613a1e57600080fd5b611bbb826139f5565b600060208284031215613a3957600080fd5b8135611bbb816139b4565b600080600060608486031215613a5957600080fd5b8335613a64816139b4565b92506020840135613a74816139b4565b929592945050506040919091013590565b8015158114612bdb57600080fd5b600060208284031215613aa557600080fd5b8135611bbb81613a85565b600060208284031215613ac257600080fd5b5035919050565b60008060408385031215613adc57600080fd5b8235613ae7816139b4565b91506020830135613af781613a85565b809150509250929050565b60008060008060808587031215613b1857600080fd5b613b21856139f5565b9350613b2f602086016139f5565b9250613b3d604086016139f5565b9150613b4b606086016139f5565b905092959194509250565b803560ff81168114613a0757600080fd5b60008060008060808587031215613b7d57600080fd5b613b8685613b56565b9350613b9460208601613b56565b9250613ba260408601613b56565b9150613b4b60608601613b56565b60008060408385031215613bc357600080fd5b613ae7836139f5565b600080600060608486031215613be157600080fd5b613bea84613b56565b9250613bf860208501613b56565b9150613c0660408501613b56565b90509250925092565b60008060408385031215613c2257600080fd5b8235613c2d816139b4565b91506020830135613af7816139b4565b60208082526014908201527321b0b63632b91036bab9ba1031329037bbb732b960611b604082015260600190565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613ce6578160001904821115613ccc57613ccc613c95565b80851615613cd957918102915b93841c9390800290613cb0565b509250929050565b600082613cfd57506001610bc3565b81613d0a57506000610bc3565b8160018114613d205760028114613d2a57613d46565b6001915050610bc3565b60ff841115613d3b57613d3b613c95565b50506001821b610bc3565b5060208310610133831016604e8410600b8410161715613d69575081810a610bc3565b613d738383613cab565b8060001904821115613d8757613d87613c95565b029392505050565b6000611bbb60ff841683613cee565b6000816000190483118215151615613db857613db8613c95565b500290565b60208082526015908201527410d85b1b195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604082015260600190565b600082821015613dfe57613dfe613c95565b500390565b60008219821115613e1657613e16613c95565b500190565b600060208284031215613e2d57600080fd5b5051919050565b600060208284031215613e4657600080fd5b8151611bbb81613a85565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600082613ea957634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff03821115613ecb57613ecb613c95565b019392505050565b600060ff821660ff841680821015613eed57613eed613c95565b90039392505050565b600060208284031215613f0857600080fd5b8151611bbb816139b4565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613f625781516001600160a01b031687529582019590820190600101613f3d565b509495945050505050565b848152608060208201526000613f866080830186613f29565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8103613fce57613fce613c95565b60010192915050565b85815284602082015260a060408201526000613ff660a0830186613f29565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561402857600080fd5b8351925060208401519150604084015190509250925092565b60008251614053818460208701613951565b919091019291505056fea26469706673582212206b9d9a29172f23f977fa376a2219380661282743020936eff221fdaeb92624db64736f6c634300080d0033

Deployed Bytecode Sourcemap

36799:29670:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39509:32;;;;;;;;;;-1:-1:-1;39509:32:0;;;;;;;;;;;;;;188:6:1;176:19;;;158:38;;146:2;131:18;39509:32:0;;;;;;;;50072:229;;;;;;;;;;;;;:::i;:::-;;38234:107;;;;;;;;;;-1:-1:-1;38234:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;427:4:1;415:17;;;397:36;;469:17;;;464:2;449:18;;442:45;523:17;;503:18;;;496:45;;;;385:2;370:18;38234:107:0;207:340:1;43187:85:0;;;;;;;;;;-1:-1:-1;43259:10:0;;;;;;;;;;;-1:-1:-1;;;43259:10:0;;;;43187:85;;;;43259:10;43187:85;:::i;43795:161::-;;;;;;;;;;-1:-1:-1;43795:161:0;;;;;:::i;:::-;;:::i;:::-;;;1824:14:1;;1817:22;1799:41;;1787:2;1772:18;43795:161:0;1659:187:1;54043:27:0;;;;;;;;;;;;;;;;;;;1997:25:1;;;1985:2;1970:18;54043:27:0;1851:177:1;43373:88:0;;;;;;;;;;;;;:::i;48849:294::-;;;;;;;;;;-1:-1:-1;48849:294:0;;;;;:::i;:::-;;:::i;39759:27::-;;;;;;;;;;-1:-1:-1;39759:27:0;;;;-1:-1:-1;;;;;39759:27:0;;;;;;-1:-1:-1;;;;;2550:32:1;;;2532:51;;2520:2;2505:18;39759:27:0;2386:203:1;51890:259:0;;;;;;;;;;-1:-1:-1;51890:259:0;;;;;:::i;:::-;;:::i;45151:392::-;;;;;;;;;;-1:-1:-1;45151:392:0;;;;;:::i;:::-;;:::i;52839:223::-;;;;;;;;;;;;;:::i;46314:144::-;;;;;;;;;;-1:-1:-1;46314:144:0;;;;;:::i;:::-;;:::i;43010:85::-;;;;;;;;;;-1:-1:-1;37468:2:0;43010:85;;;3856:4:1;3844:17;;;3826:36;;3814:2;3799:18;43010:85:0;3684:184:1;39835:28:0;;;;;;;;;;-1:-1:-1;39835:28:0;;;;-1:-1:-1;;;;;39835:28:0;;;44751:205;;;;;;;;;;-1:-1:-1;44751:205:0;;;;;:::i;:::-;;:::i;47162:142::-;;;;;;;;;;-1:-1:-1;47162:142:0;;;;;:::i;:::-;;:::i;54009:27::-;;;;;;;;;;;;;;;;50459:319;;;;;;;;;;-1:-1:-1;50459:319:0;;;;;:::i;:::-;;:::i;51226:656::-;;;;;;;;;;;;;:::i;39597:22::-;;;;;;;;;;-1:-1:-1;39597:22:0;;;;-1:-1:-1;;;39597:22:0;;;;;;49761:198;;;;;;;;;;-1:-1:-1;49761:198:0;;;;;:::i;:::-;;:::i;53230:146::-;;;;;;;;;;;;;:::i;46864:251::-;;;;;;;;;;-1:-1:-1;46864:251:0;;;;;:::i;:::-;;:::i;52157:301::-;;;;;;;;;;-1:-1:-1;52157:301:0;;;;;:::i;:::-;;:::i;47537:801::-;;;;;;;;;;-1:-1:-1;47537:801:0;;;;;:::i;:::-;;:::i;48371:417::-;;;;;;;;;;-1:-1:-1;48371:417:0;;;;;:::i;:::-;;:::i;46124:145::-;;;;;;;;;;-1:-1:-1;46124:145:0;;;;;:::i;:::-;;:::i;50847:315::-;;;;;;;;;;;;;:::i;38750:24::-;;;;;;;;;;-1:-1:-1;38750:24:0;;;;;;;;;;;;;;;;6182:25:1;;;6238:2;6223:18;;6216:34;;;;6266:18;;;6259:34;6170:2;6155:18;38750:24:0;5980:319:1;53797:54:0;;;;;;;;;;-1:-1:-1;53797:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;38568:173;;;;;;;;;;-1:-1:-1;38568:173:0;;;;;;-1:-1:-1;;;;;38568:173:0;;;;;;;;;;;-1:-1:-1;;;;;6534:15:1;;;6516:34;;6586:15;;;;6581:2;6566:18;;6559:43;6451:18;38568:173:0;6304:304:1;44271:121:0;;;;;;;;;;-1:-1:-1;44271:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;44366:18:0;44339:7;44366:18;;;:9;:18;;;;;;;44271:121;28336:140;;;;;;;;;;;;;:::i;53384:135::-;;;;;;;;;;-1:-1:-1;53384:135:0;;;;;:::i;:::-;;:::i;45627:88::-;;;;;;;;;;;;;:::i;37477:34::-;;;;;;;;;;;;37509:2;37477:34;;46525:268;;;;;;;;;;-1:-1:-1;46525:268:0;;;;;:::i;:::-;;:::i;43101:80::-;;;;;;;;;;-1:-1:-1;43153:7:0;28200:6;-1:-1:-1;;;;;28200:6:0;43101:80;43373:88;49151:483;;;;;;;;;;-1:-1:-1;49151:483:0;;;;;:::i;:::-;;:::i;53070:152::-;;;;;;;;;;-1:-1:-1;53070:152:0;;;;;:::i;:::-;;:::i;44400:342::-;;;;;;;;;;-1:-1:-1;44400:342:0;;;;;:::i;:::-;;:::i;44972:167::-;;;;;;;;;;-1:-1:-1;44972:167:0;;;;;:::i;:::-;;:::i;45893:147::-;;;;;;;;;;;;;:::i;38350:209::-;;;;;;;;;;-1:-1:-1;38350:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7185:4:1;7173:17;;;7155:36;;7227:17;;;7222:2;7207:18;;7200:45;7281:17;;;7261:18;;;7254:45;;;;7335:17;;;7330:2;7315:18;;7308:45;7142:3;7127:19;38350:209:0;6940:419:1;43640:147:0;;;;;;;;;;-1:-1:-1;43640:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;43751:19:0;;;43724:7;43751:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;43640:147;47399:103;;;;;;;;;;-1:-1:-1;47399:103:0;;;;;:::i;:::-;;:::i;28488:223::-;;;;;;;;;;-1:-1:-1;28488:223:0;;;;;:::i;:::-;;:::i;39679:71::-;;;;;;;;;;-1:-1:-1;39679:71:0;;;;-1:-1:-1;;;39679:71:0;;-1:-1:-1;;;;;39679:71:0;;;38783:132;;;;;;;;;;-1:-1:-1;38783:132:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38783:132:0;;;;;;;;;7990:6:1;8023:15;;;8005:34;;8075:15;;;8070:2;8055:18;;8048:43;8127:15;;;8107:18;;;8100:43;;;;8179:15;;;8174:2;8159:18;;8152:43;7967:3;7952:19;38783:132:0;7757:444:1;52497:334:0;;;;;;;;;;-1:-1:-1;52742:14:0;;52776:11;;52497:334;;;8445:25:1;;;39145:1:0;8501:2:1;8486:18;;8479:45;52776:11:0;;;;8540:18:1;;;8533:45;;;;52776:11:0;52789:16;;;;8621:14:1;8614:22;8609:2;8594:18;;8587:50;52807:15:0;;;;;8681:14:1;8674:22;8668:3;8653:19;;8646:51;8432:3;8417:19;52497:334:0;8206:497:1;37059:45:0;;;;;;;;;;-1:-1:-1;37059:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;50072:229;28273:10;28262:7;28173;28200:6;-1:-1:-1;;;;;28200:6:0;;28135:79;28262:7;-1:-1:-1;;;;;28262:21:0;;28254:54;;;;-1:-1:-1;;;28254:54:0;;;;;;;:::i;:::-;;;;;;;;;50151:20:::1;;50132:15;:39;;50124:68;;;;-1:-1:-1::0;;;50124:68:0::1;;;;;;;:::i;:::-;50224:15;50203:20;:36:::0;50250:43:::1;50259:10;50271:21;50250:8;:43::i;:::-;50072:229::o:0;43795:161::-;43872:4;43889:37;43898:10;43910:7;43919:6;43889:8;:37::i;:::-;-1:-1:-1;43944:4:0;43795:161;;;;;:::o;43373:88::-;43428:7;37396:18;37468:2;37396;:18;:::i;:::-;37382:32;;:11;:32;:::i;:::-;43439:19;;43373:88;:::o;48849:294::-;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;48947:1:::1;48935:9;:13;;;48927:58;;;::::0;-1:-1:-1;;;48927:58:0;;11642:2:1;48927:58:0::1;::::0;::::1;11624:21:1::0;11681:2;11661:18;;;11654:30;11720:34;11700:18;;;11693:62;-1:-1:-1;;;11771:18:1;;;11764:31;11812:19;;48927:58:0::1;11440:397:1::0;48927:58:0::1;49017:2;49004:9;:15;;;;48996:57;;;::::0;-1:-1:-1;;;48996:57:0;;12044:2:1;48996:57:0::1;::::0;::::1;12026:21:1::0;12083:2;12063:18;;;12056:30;12122:32;12102:18;;;12095:60;12172:18;;48996:57:0::1;11842:354:1::0;48996:57:0::1;49064:13;:25:::0;;-1:-1:-1;;49064:25:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;49105:30:::1;::::0;158:38:1;;;49105:30:0::1;::::0;146:2:1;131:18;49105:30:0::1;;;;;;;;48849:294:::0;:::o;51890:259::-;28273:10;28262:7;28173;28200:6;-1:-1:-1;;;;;28200:6:0;;28135:79;28262:7;-1:-1:-1;;;;;28262:21:0;;28254:54;;;;-1:-1:-1;;;28254:54:0;;;;;;;:::i;:::-;51982:10:::1;:14:::0;-1:-1:-1;;;;;51982:14:0::1;52007:25;:9;51982:14:::0;52007:16:::1;:25::i;:::-;-1:-1:-1::0;52043:10:0::1;:21:::0;;-1:-1:-1;;;;;;52043:21:0::1;-1:-1:-1::0;;;;;52043:21:0;::::1;::::0;;::::1;::::0;;;52075:29:::1;::::0;:9:::1;::::0;:13:::1;:29::i;:::-;-1:-1:-1::0;52120:21:0::1;::::0;-1:-1:-1;;;;;2550:32:1;;2532:51;;52120:21:0::1;::::0;2520:2:1;2505:18;52120:21:0::1;;;;;;;;51953:196;51890:259:::0;:::o;45151:392::-;45251:4;45268:36;45278:6;45286:9;45297:6;45268:9;:36::i;:::-;-1:-1:-1;;;;;45344:19:0;;45317:24;45344:19;;;:11;:19;;;;;;;;45364:10;45344:31;;;;;;;;45394:26;;;;45386:59;;;;-1:-1:-1;;;45386:59:0;;12619:2:1;45386:59:0;;;12601:21:1;12658:2;12638:18;;;12631:30;-1:-1:-1;;;12677:18:1;;;12670:50;12737:18;;45386:59:0;12417:344:1;45386:59:0;45458:55;45467:6;45475:10;45487:25;45506:6;45487:16;:25;:::i;:::-;45458:8;:55::i;:::-;-1:-1:-1;45531:4:0;;45151:392;-1:-1:-1;;;;45151:392:0:o;52839:223::-;52901:7;52943:20;;52925:15;:38;52921:115;;;53009:15;52986:20;;:38;;;;:::i;52921:115::-;-1:-1:-1;53053:1:0;;52839:223::o;46314:144::-;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;46384:16:::1;:26:::0;;;::::1;;;;-1:-1:-1::0;;46384:26:0;;::::1;;::::0;;46426:24:::1;::::0;::::1;::::0;::::1;::::0;46403:7;1824:14:1;1817:22;1799:41;;1787:2;1772:18;;1659:187;44751:205:0;44859:10;44833:4;44880:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;44880:32:0;;;;;;;;;;44833:4;;44850:76;;44871:7;;44880:45;;44915:10;;44880:45;:::i;47162:142::-;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;47234:10:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;47234:20:0::1;-1:-1:-1::0;;47234:20:0;;::::1;;::::0;;47271:25:::1;::::0;::::1;::::0;::::1;::::0;47247:7;1824:14:1;1817:22;1799:41;;1787:2;1772:18;;1659:187;50459:319:0;28273:10;28262:7;28173;28200:6;-1:-1:-1;;;;;28200:6:0;;28135:79;28262:7;-1:-1:-1;;;;;28262:21:0;;28254:54;;;;-1:-1:-1;;;28254:54:0;;;;;;;:::i;:::-;50561:12:::1;::::0;-1:-1:-1;;;;;50545:28:0;;::::1;50561:12:::0;::::1;50545:28;::::0;::::1;::::0;:61:::1;;-1:-1:-1::0;;;;;;50577:29:0;::::1;50601:4;50577:29;;50545:61;50537:119;;;::::0;-1:-1:-1;;;50537:119:0;;13231:2:1;50537:119:0::1;::::0;::::1;13213:21:1::0;13270:2;13250:18;;;13243:30;13309:34;13289:18;;;13282:62;-1:-1:-1;;;13360:18:1;;;13353:34;13404:19;;50537:119:0::1;13029:400:1::0;50537:119:0::1;50739:30;::::0;-1:-1:-1;;;50739:30:0;;50763:4:::1;50739:30;::::0;::::1;2532:51:1::0;50689:12:0;;-1:-1:-1;;;;;50713:14:0;::::1;::::0;::::1;::::0;50728:10:::1;::::0;50713:14;;50739:15:::1;::::0;2505:18:1;;50739:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50713:57;::::0;-1:-1:-1;;;;;;50713:57:0::1;::::0;;;;;;-1:-1:-1;;;;;13815:32:1;;;50713:57:0::1;::::0;::::1;13797:51:1::0;13864:18;;;13857:34;13770:18;;50713:57:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;50526:252;50459:319:::0;:::o;51226:656::-;28273:10;28262:7;28173;28200:6;-1:-1:-1;;;;;28200:6:0;;28135:79;28262:7;-1:-1:-1;;;;;28262:21:0;;28254:54;;;;-1:-1:-1;;;28254:54:0;;;;;;;:::i;:::-;51303:20:::1;;51284:15;:39;;51276:68;;;;-1:-1:-1::0;;;51276:68:0::1;;;;;;;:::i;:::-;51378:15;51355:20;:38:::0;51443:12:::1;::::0;51484:39:::1;::::0;-1:-1:-1;;;51484:39:0;;51517:4:::1;51484:39;::::0;::::1;2532:51:1::0;-1:-1:-1;;;;;51443:12:0;;::::1;::::0;51404:25:::1;::::0;51443:12;;51484:24:::1;::::0;2505:18:1;;51484:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51565:11;::::0;51534:51:::1;::::0;-1:-1:-1;;;51534:51:0;;-1:-1:-1;;;;;51565:11:0;;::::1;51534:51;::::0;::::1;13797::1::0;13864:18;;;13857:34;;;51467:56:0;;-1:-1:-1;51534:22:0;::::1;::::0;::::1;::::0;13770:18:1;;51534:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;51596:11:0::1;::::0;:213:::1;::::0;-1:-1:-1;;;51596:213:0;;-1:-1:-1;;;;;51596:11:0;;::::1;::::0;:59:::1;::::0;:213:::1;::::0;51678:4:::1;::::0;51698:6;;51596:11:::1;::::0;;;51678:4;;51779:15:::1;::::0;51596:213:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51820:43;51829:10;51841:21;51820:8;:43::i;:::-;51265:617;;51226:656::o:0;49761:198::-;28273:10;28262:7;28173;28200:6;-1:-1:-1;;;;;28200:6:0;;28135:79;28262:7;-1:-1:-1;;;;;28262:21:0;;28254:54;;;;-1:-1:-1;;;28254:54:0;;;;;;;:::i;:::-;49847:50:::1;49861:35;49881:15;49861:17:::0;:35:::1;:::i;:::-;49847:13;:50::i;:::-;49913:38;::::0;1997:25:1;;;49913:38:0::1;::::0;1985:2:1;1970:18;49913:38:0::1;1851:177:1::0;53230:146:0;53280:7;53300:14;53332:12;;53317;;:27;;;;:::i;46864:251::-;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;46961:7:::1;46958:100;;;46983:24;47002:4;46983:18;:24::i;:::-;46958:100;;;47036:22;47053:4;47036:16;:22::i;:::-;47074:33;::::0;;-1:-1:-1;;;;;14950:32:1;;14932:51;;15026:14;;15019:22;15014:2;14999:18;;14992:50;47074:33:0::1;::::0;14905:18:1;47074:33:0::1;14764:284:1::0;52157:301:0;28273:10;28262:7;28173;28200:6;-1:-1:-1;;;;;28200:6:0;;28135:79;28262:7;-1:-1:-1;;;;;28262:21:0;;28254:54;;;;-1:-1:-1;;;28254:54:0;;;;;;;:::i;:::-;52261:20;;-1:-1:-1;;;;;52261:20:0::1;52292:31;:9;52261:20:::0;52292:16:::1;:31::i;:::-;-1:-1:-1::0;52334:20:0;:27;;-1:-1:-1;;;;;;52334:27:0::1;-1:-1:-1::0;;;;;52334:27:0;::::1;::::0;;::::1;::::0;;;52372:35:::1;::::0;:9:::1;::::0;:13:::1;:35::i;:::-;-1:-1:-1::0;52423:27:0::1;::::0;-1:-1:-1;;;;;2550:32:1;;2532:51;;52423:27:0::1;::::0;2520:2:1;2505:18;52423:27:0::1;2386:203:1::0;47537:801:0;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;47682:16:::1;47716:4;37396:18;37468:2;37396;:18;:::i;:::-;37382:32;::::0;:11:::1;:32;:::i;:::-;47701:19;;;;:::i;:::-;47682:38:::0;-1:-1:-1;47734:20:0::1;47757:45;::::0;;::::1;::::0;:32;::::1;37396:18;37468:2;37396;:18;:::i;:::-;37382:32;::::0;:11:::1;:32;:::i;:::-;47757;;;;:::i;:::-;:45;;;;:::i;:::-;47734:68:::0;-1:-1:-1;47813:18:0::1;47834:43;::::0;;::::1;::::0;:30;::::1;37396:18;37468:2;37396;:18;:::i;:::-;37382:32;::::0;:11:::1;:32;:::i;:::-;47834:30;;;;:::i;:::-;:43;;;;:::i;:::-;47813:64:::0;-1:-1:-1;47888:17:0::1;47908:42;::::0;;::::1;::::0;:29;::::1;37396:18;37468:2;37396;:18;:::i;:::-;37382:32;::::0;:11:::1;:32;:::i;:::-;47908:29;;;;:::i;:::-;:42;;;;:::i;:::-;47888:62;;48064:8;48048:12;:24;;:50;;;;;48090:8;48076:10;:22;;48048:50;48039:111;;;::::0;-1:-1:-1;;;48039:111:0;;15477:2:1;48039:111:0::1;::::0;::::1;15459:21:1::0;;;15496:18;;;15489:30;15555:34;15535:18;;;15528:62;15607:18;;48039:111:0::1;15275:356:1::0;48039:111:0::1;48173:46;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;48163:7:::1;:56:::0;;;;;;;;;;;;;;48255:75;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;::::0;;;;;-1:-1:-1;48240:12:0::1;:90:::0;;-1:-1:-1;;48240:90:0;;;;;;;::::1;::::0;;;::::1;-1:-1:-1::0;;48240:90:0;;;;::::1;-1:-1:-1::0;;48240:90:0;;;;;-1:-1:-1;;;48240:90:0;;::::1;::::0;;;::::1;::::0;;47537:801::o;48371:417::-;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;48509::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;48496:10:::1;:70:::0;;-1:-1:-1;;48496:70:0;;;;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;48496:70:0;;;;::::1;-1:-1:-1::0;;48496:70:0;;;;;;;;::::1;;::::0;;48509:57;;48595:21:::1;48509:57:::0;;48595:21:::1;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;48579:13;:65:::0;;-1:-1:-1;;48579:65:0::1;;::::0;;;::::1;::::0;;::::1;::::0;;48673:28:::1;::::0;48689:12;;48673:28:::1;:::i;:::-;48655:15;:46:::0;;-1:-1:-1;;48655:46:0::1;;;::::0;;::::1;;;::::0;;48719:61:::1;::::0;;7173:17:1;;;7155:36;;7227:17;;;7222:2;7207:18;;7200:45;7281:17;;;7261:18;;;7254:45;7335:17;;;7330:2;7315:18;;7308:45;48719:61:0;::::1;::::0;7142:3:1;48719:61:0;;;;;;::::1;48371:417:::0;;;;:::o;46124:145::-;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;46219:42:::1;46238:8;46248:12;46219:18;:42::i;50847:315::-:0;28273:10;28262:7;28173;28200:6;-1:-1:-1;;;;;28200:6:0;;28135:79;28262:7;-1:-1:-1;;;;;28262:21:0;;28254:54;;;;-1:-1:-1;;;28254:54:0;;;;;;;:::i;:::-;50925:20:::1;;50906:15;:39;;50898:68;;;;-1:-1:-1::0;;;50898:68:0::1;;;;;;;:::i;:::-;51016:12;::::0;51057:39:::1;::::0;-1:-1:-1;;;51057:39:0;;51090:4:::1;51057:39;::::0;::::1;2532:51:1::0;-1:-1:-1;;;;;51016:12:0;;::::1;::::0;50977:25:::1;::::0;51016:12;;51057:24:::1;::::0;2505:18:1;;51057:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51111:43;::::0;-1:-1:-1;;;51111:43:0;;51135:10:::1;51111:43;::::0;::::1;13797:51:1::0;13864:18;;;13857:34;;;51040:56:0;;-1:-1:-1;;;;;;51111:23:0;::::1;::::0;::::1;::::0;13770:18:1;;51111:43:0::1;13623:274:1::0;28336:140:0;28273:10;28262:7;28173;28200:6;-1:-1:-1;;;;;28200:6:0;;28135:79;28262:7;-1:-1:-1;;;;;28262:21:0;;28254:54;;;;-1:-1:-1;;;28254:54:0;;;;;;;:::i;:::-;28435:1:::1;28419:6:::0;;28398:40:::1;::::0;-1:-1:-1;;;;;28419:6:0;;::::1;::::0;28398:40:::1;::::0;28435:1;;28398:40:::1;28466:1;28449:19:::0;;-1:-1:-1;;;;;;28449:19:0::1;::::0;;28336:140::o;53384:135::-;53452:4;53476:35;:20;53506:4;53476:29;:35::i;45627:88::-;45692:11;;45670:37;;45681:10;;-1:-1:-1;;;45692:11:0;;-1:-1:-1;;;;;45692:11:0;45705:1;45670:10;:37::i;46525:268::-;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;46622:15;::::1;;46633:4;46622:15:::0;46619:109:::1;;46652:22;:9;46666:7:::0;46652:13:::1;:22::i;:::-;;46619:109;;;46703:25;:9;46720:7:::0;46703:16:::1;:25::i;:::-;;46619:109;46744:41;::::0;;-1:-1:-1;;;;;14950:32:1;;14932:51;;15026:14;;15019:22;15014:2;14999:18;;14992:50;46744:41:0::1;::::0;14905:18:1;46744:41:0::1;14764:284:1::0;49151:483:0;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;37509:2:::1;49421:17;::::0;::::1;;::::0;::::1;::::0;:39:::1;;-1:-1:-1::0;37509:2:0::1;49442:18;::::0;::::1;;;49421:39;:60;;;;;49479:2;49464:11;:17;;;;49421:60;49413:98;;;::::0;-1:-1:-1;;;49413:98:0;;16247:2:1;49413:98:0::1;::::0;::::1;16229:21:1::0;16286:2;16266:18;;;16259:30;16325:27;16305:18;;;16298:55;16370:18;;49413:98:0::1;16045:349:1::0;49413:98:0::1;49534:35;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;49522:9:::1;:47:::0;;-1:-1:-1;;49522:47:0;;;::::1;::::0;::::1;;-1:-1:-1::0;;49522:47:0::1;::::0;;::::1;;::::0;;49585:41;;397:36:1;;;449:18;;;442:45;;;;503:18;;;496:45;;;;49585:41:0::1;::::0;370:18:1;49585:41:0::1;;;;;;;49151:483:::0;;;:::o;53070:152::-;53132:7;53152:14;53169:21;53185:4;53169:15;:21::i;:::-;53152:38;53070:152;-1:-1:-1;;;53070:152:0:o;44400:342::-;44543:10;44487:4;44531:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;44531:32:0;;;;;;;;;;44582:35;;;;44574:60;;;;-1:-1:-1;;;44574:60:0;;16601:2:1;44574:60:0;;;16583:21:1;16640:2;16620:18;;;16613:30;-1:-1:-1;;;16659:18:1;;;16652:42;16711:18;;44574:60:0;16399:336:1;44574:60:0;44647:65;44656:10;44668:7;44677:34;44696:15;44677:16;:34;:::i;44647:65::-;-1:-1:-1;44730:4:0;;44400:342;-1:-1:-1;;;44400:342:0:o;44972:167::-;45052:4;45069:40;45079:10;45091:9;45102:6;45069:9;:40::i;45893:147::-;45943:28;45960:10;45943:16;:28::i;:::-;45987:37;;;46006:10;14932:51:1;;46018:5:0;15014:2:1;14999:18;;14992:50;45987:37:0;;14905:18:1;45987:37:0;;;;;;;45893:147::o;47399:103::-;40808:23;40820:10;40808:11;:23::i;:::-;40800:57;;;;-1:-1:-1;;;40800:57:0;;;;;;;:::i;:::-;47469:15:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;47469:25:0;;::::1;::::0;;;::::1;::::0;;47399:103::o;28488:223::-;28273:10;28262:7;28173;28200:6;-1:-1:-1;;;;;28200:6:0;;28135:79;28262:7;-1:-1:-1;;;;;28262:21:0;;28254:54;;;;-1:-1:-1;;;28254:54:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28569:22:0;::::1;28561:60;;;::::0;-1:-1:-1;;;28561:60:0;;16942:2:1;28561:60:0::1;::::0;::::1;16924:21:1::0;16981:2;16961:18;;;16954:30;17020:27;17000:18;;;16993:55;17065:18;;28561:60:0::1;16740:349:1::0;28561:60:0::1;28658:6;::::0;;28637:38:::1;::::0;-1:-1:-1;;;;;28637:38:0;;::::1;::::0;28658:6;::::1;::::0;28637:38:::1;::::0;::::1;28686:6;:17:::0;;-1:-1:-1;;;;;;28686:17:0::1;-1:-1:-1::0;;;;;28686:17:0;;;::::1;::::0;;;::::1;::::0;;28488:223::o;35249:152::-;35319:4;35343:50;35348:3;-1:-1:-1;;;;;35368:23:0;;35343:4;:50::i;35575:167::-;-1:-1:-1;;;;;35709:23:0;;35655:4;34086:19;;;:12;;;:19;;;;;;:24;;35679:55;33989:129;56698:177;56769:9;56783:7;-1:-1:-1;;;;;56783:12:0;56804:6;56783:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56768:48;;;56835:4;56827:32;;;;-1:-1:-1;;;56827:32:0;;17506:2:1;56827:32:0;;;17488:21:1;17545:2;17525:18;;;17518:30;-1:-1:-1;;;17564:18:1;;;17557:45;17619:18;;56827:32:0;17304:339:1;43964:299:0;-1:-1:-1;;;;;44057:19:0;;44049:49;;;;-1:-1:-1;;;44049:49:0;;17850:2:1;44049:49:0;;;17832:21:1;17889:2;17869:18;;;17862:30;-1:-1:-1;;;17908:18:1;;;17901:47;17965:18;;44049:49:0;17648:341:1;44049:49:0;-1:-1:-1;;;;;44117:21:0;;44109:49;;;;-1:-1:-1;;;44109:49:0;;18196:2:1;44109:49:0;;;18178:21:1;18235:2;18215:18;;;18208:30;-1:-1:-1;;;18254:18:1;;;18247:45;18309:18;;44109:49:0;17994:339:1;44109:49:0;-1:-1:-1;;;;;44171:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;44223:32;;1997:25:1;;;44223:32:0;;1970:18:1;44223:32:0;;;;;;;43964:299;;;:::o;43469:163::-;43526:4;28200:6;;-1:-1:-1;;;;;43550:15:0;;;28200:6;;43550:15;;:47;;-1:-1:-1;43577:20:0;;-1:-1:-1;;;;;43569:28:0;;;43577:20;;43569:28;43550:47;:73;;;-1:-1:-1;;43609:10:0;:14;-1:-1:-1;;;;;43609:14:0;;;43601:22;;;;43469:163::o;35409:158::-;35482:4;35506:53;35514:3;-1:-1:-1;;;;;35534:23:0;;35506:7;:53::i;61358:1147::-;-1:-1:-1;;;;;61455:20:0;;61447:51;;;;-1:-1:-1;;;61447:51:0;;18540:2:1;61447:51:0;;;18522:21:1;18579:2;18559:18;;;18552:30;-1:-1:-1;;;18598:18:1;;;18591:48;18656:18;;61447:51:0;18338:342:1;61447:51:0;-1:-1:-1;;;;;61517:23:0;;61509:52;;;;-1:-1:-1;;;61509:52:0;;18887:2:1;61509:52:0;;;18869:21:1;18926:2;18906:18;;;18899:30;-1:-1:-1;;;18945:18:1;;;18938:46;19001:18;;61509:52:0;18685:340:1;61509:52:0;61574:15;61593:26;:9;61612:6;61593:18;:26::i;:::-;:59;;;-1:-1:-1;61623:29:0;:9;61642;61623:18;:29::i;:::-;61574:79;-1:-1:-1;61666:23:0;-1:-1:-1;;;;;61693:23:0;;61711:4;61693:23;;:53;;-1:-1:-1;;;;;;61720:26:0;;61741:4;61720:26;61693:53;61791:11;;61867:12;;61666:81;;-1:-1:-1;;;;;;61791:11:0;;;;61758:22;;61857;;;61867:12;;61857:22;:53;;;;;61896:14;-1:-1:-1;;;;;61883:27:0;:9;-1:-1:-1;;;;;61883:27:0;;61857:53;61856:128;;;-1:-1:-1;61943:12:0;;-1:-1:-1;;;;;61930:25:0;;;61943:12;;61930:25;:53;;;;;61969:14;-1:-1:-1;;;;;61959:24:0;:6;-1:-1:-1;;;;;61959:24:0;;61930:53;62035:12;;61814:181;;-1:-1:-1;62008:11:0;;-1:-1:-1;;;;;62022:25:0;;;62035:12;;62022:25;;:56;;;62064:14;-1:-1:-1;;;;;62051:27:0;:9;-1:-1:-1;;;;;62051:27:0;;62022:56;62108:12;;62008:70;;-1:-1:-1;62089:10:0;;-1:-1:-1;;;;;62100:20:0;;;62108:12;;62100:20;;:47;;;62133:14;-1:-1:-1;;;;;62123:24:0;:6;-1:-1:-1;;;;;62123:24:0;;62100:47;62089:58;;62164:18;:41;;;;62186:19;62164:41;:55;;;;62209:10;62164:55;62160:338;;;62236:43;62253:6;62261:9;62272:6;62236:16;:43::i;:::-;62301:14;;;;;;;62296:61;;62335:22;62347:9;62335:11;:22::i;:::-;62160:338;;;62412:56;62427:6;62435:9;62446:6;62454:5;62461:6;62412:14;:56::i;:::-;61436:1069;;;;;;61358:1147;;;:::o;65918:227::-;66069:20;;66053:13;:36;66045:45;;;;;;66101:20;:36;65918:227::o;64352:380::-;64422:35;:20;64452:4;64422:29;:35::i;:::-;64421:36;64413:45;;;;;;-1:-1:-1;;;;;64485:15:0;;;;;;:9;:15;;;;;;64469:12;:31;;64485:15;;64469:12;;:31;;64485:15;;64469:31;:::i;:::-;;;;-1:-1:-1;64511:20:0;;-1:-1:-1;64534:16:0;64545:4;64534:10;:16::i;:::-;64611:12;;-1:-1:-1;;;;;64593:15:0;;;;;;:9;:15;;;;;;64511:39;;-1:-1:-1;64593:30:0;;;:::i;:::-;-1:-1:-1;;;;;64567:23:0;;;;;;:17;:23;;;;;;;;:56;;;;64641:14;:20;;;;;:36;;64665:12;;64567:23;64641:36;;64665:12;;64641:36;:::i;:::-;;;;-1:-1:-1;64694:30:0;;-1:-1:-1;64694:20:0;64719:4;64694:24;:30::i;64740:264::-;64807:35;:20;64837:4;64807:29;:35::i;:::-;64799:44;;;;;;-1:-1:-1;;;;;64870:15:0;;;;;;:9;:15;;;;;;64854:12;:31;;64870:15;;64854:12;;:31;;64870:15;;64854:31;:::i;:::-;;;;-1:-1:-1;64896:33:0;;-1:-1:-1;64896:20:0;64924:4;64896:27;:33::i;:::-;-1:-1:-1;64984:12:0;;-1:-1:-1;;;;;64966:15:0;;;;;;:9;:15;;;;;;:30;;64984:12;64966:30;:::i;:::-;-1:-1:-1;;;;;64940:23:0;;;;;;;:17;:23;;;;;:56;64740:264::o;56883:1698::-;40917:27;:34;;-1:-1:-1;;40917:34:0;40947:4;40917:34;;;56998:3:::1;56986:15;::::0;::::1;;;56978:24;;;::::0;::::1;;57017:13;::::0;::::1;;57013:31:::0;57037:7:::1;57013:31;57098:4;57054:23;57080:24:::0;;;:9:::1;:24;::::0;;;;;;57151:12:::1;::::0;-1:-1:-1;;;;;57151:12:0::1;57141:23:::0;;;;;;57080:24;;57054:23;57178:4:::1;::::0;57141:34:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:41;;;;:::i;:::-;57211:15:::0;;57119:63;;-1:-1:-1;57197:29:0;::::1;:46:::0;::::1;;;;57231:12;57230:13;57197:46;57193:95;;;-1:-1:-1::0;57273:15:0;;57193:95:::1;57331:29:::0;;::::1;57371:155:::0;::::1;;;57410:12;57406:109;;;57455:15;57441:29;;57406:109;;;57508:7;;;;;57406:109;57560:4;57540:26;::::0;;;:11:::1;:26;::::0;;;;;;;57575:11:::1;::::0;-1:-1:-1;;;;;57575:11:0::1;57540:48:::0;;;;;;;;:62;-1:-1:-1;57536:145:0::1;;;57649:11;::::0;57617:64:::1;::::0;57634:4:::1;::::0;-1:-1:-1;;;;;57649:11:0::1;-1:-1:-1::0;;57617:8:0::1;:64::i;:::-;57759:13;::::0;57735:10:::1;:20:::0;57694:25:::1;::::0;57759:13:::1;::::0;;::::1;::::0;57723:32:::1;::::0;57759:13:::1;57735:20:::0;;::::1;;57723:11:::0;:32:::1;:::i;:::-;57722:50;;;;:::i;:::-;57694:78:::0;-1:-1:-1;57783:22:0::1;57808:31;57694:78:::0;57808:11;:31:::1;:::i;:::-;57783:56:::0;-1:-1:-1;57850:16:0::1;57869:21;57889:1;57869:17:::0;:21:::1;:::i;:::-;57850:40:::0;-1:-1:-1;57901:19:0::1;57923:28;57850:40:::0;57923:17;:28:::1;:::i;:::-;57901:50:::0;-1:-1:-1;57962:17:0::1;57982:28;57996:14:::0;57901:50;57982:28:::1;:::i;:::-;57962:48:::0;-1:-1:-1;58049:21:0::1;58081:27;57962:48:::0;58081:16:::1;:27::i;:::-;58119:14;58137:41;58161:17:::0;58137:21:::1;:41;:::i;:::-;58119:60:::0;-1:-1:-1;58190:14:0::1;58230:9:::0;58208:18:::1;58215:11:::0;58119:60;58208:18:::1;:::i;:::-;58207:32;;;;:::i;:::-;58190:49:::0;-1:-1:-1;58254:12:0;;58250:63:::1;;58282:31;58296:8;58306:6;58282:13;:31::i;:::-;58325:14;58386:2;58343:39;58365:17:::0;58343:21:::1;:39;:::i;:::-;58342:46;;;;:::i;:::-;58325:63;;58399:37;;;;;;;;;;;;;;-1:-1:-1::0;;;58399:37:0::1;;::::0;58429:6:::1;58399:18;:37::i;:::-;58450:21;58519:6:::0;58475:41:::1;58499:17:::0;58475:21:::1;:41;:::i;:::-;:50;;;;:::i;:::-;58450:76;;58537:36;58554:13;58568:4;58537:16;:36::i;:::-;56967:1614;;;;;;;;;;;;;40962:1;-1:-1:-1::0;;40974:27:0;:35;;-1:-1:-1;;40974:35:0;;;56883:1698::o;62778:1566::-;62878:14;;;;;;;62877:15;62869:24;;;;;;62904:14;:21;;-1:-1:-1;;62904:21:0;;;;;;;63011:5;63033:35;:20;63063:4;63033:29;:35::i;:::-;63029:389;;;-1:-1:-1;;;;;63093:20:0;;;;;;:14;:20;;;;;;;63128:24;;;63093:20;-1:-1:-1;63029:389:0;;;63194:17;63214:16;63225:4;63214:10;:16::i;:::-;-1:-1:-1;;;;;63298:15:0;;;;;;:9;:15;;;;;;63283:12;;63194:36;;-1:-1:-1;63283:30:0;;;:::i;:::-;-1:-1:-1;;;;;63257:23:0;;;;;;:17;:23;;;;;;;;:56;;;;63337:14;:20;;;;:30;;63358:9;;63337:30;:::i;:::-;-1:-1:-1;;;;;63382:20:0;;63405:1;63382:20;;;:14;:20;;;;;:24;63328:39;-1:-1:-1;;63029:389:0;63442:11;;:33;;;;-1:-1:-1;63457:18:0;;63442:33;63438:108;;;-1:-1:-1;;63491:14:0;:22;;-1:-1:-1;;63491:22:0;;;-1:-1:-1;;;;62778:1566:0:o;63438:108::-;63558:27;63572:4;63578:6;63558:13;:27::i;:::-;63612:6;63596:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;63629:25:0;;;;;;:19;:25;;;;;:35;;63658:6;;63629:25;:35;;63658:6;;63629:35;:::i;:::-;;;;-1:-1:-1;63675:23:0;;-1:-1:-1;63685:13:0;63675:23;;:::i;:::-;63735:16;;;63749:1;63735:16;;;;;;;;63675:23;;-1:-1:-1;63711:21:0;;63735:16;;;;;;;;;;-1:-1:-1;;63772:11:0;;:18;;;-1:-1:-1;;;63772:18:0;;;;63711:40;;-1:-1:-1;;;;;;63772:11:0;;;;:16;;-1:-1:-1;63772:18:0;;;;;;;;;;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63762:4;63767:1;63762:7;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;63762:28:0;;;-1:-1:-1;;;;;63762:28:0;;;;;63811:5;63801:4;63806:1;63801:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;63801:15:0;;;:7;;;;;;;;;:15;63833:11;;:162;;-1:-1:-1;;;63833:162:0;;:11;;;:62;;63903:6;;63833:162;;:11;;63941:4;;63960;;63979:15;;63833:162;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63829:287;;64099:5;64085:19;;63829:287;;;64038:4;64024:18;;63829:287;64140:11;64136:114;;64168:22;64177:4;64183:6;64168:8;:22::i;:::-;64220:11;;;;;;;;;-1:-1:-1;;;;;64220:11:0;-1:-1:-1;;;;;64220:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64205:33;;64136:114;64265:38;;;20733:25:1;;;-1:-1:-1;;;;;20832:15:1;;;20827:2;20812:18;;20805:43;20884:15;;20864:18;;;20857:43;64265:38:0;;;;;;;20721:2:1;64265:38:0;;;-1:-1:-1;;64314:14:0;:22;;-1:-1:-1;;64314:22:0;;;-1:-1:-1;;;;;62778:1566:0:o;65559:228::-;65620:7;65644:35;:20;65674:4;65644:29;:35::i;:::-;65640:82;;;-1:-1:-1;;;;;;65702:20:0;;;;;:14;:20;;;;;;;65559:228::o;65640:82::-;-1:-1:-1;;;;;65759:20:0;;;;;;:14;:20;;;;;;65740:16;65774:4;65740:10;:16::i;:::-;:39;;;;:::i;33093:291::-;33156:4;34086:19;;;:12;;;:19;;;;;;33173:204;;-1:-1:-1;33216:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;33276:18;;33254:19;;;:12;;;:19;;;;;;:40;;;;33309:11;;33173:204;-1:-1:-1;33360:5:0;33353:12;;33392:589;33458:4;33496:19;;;:12;;;:19;;;;;;33530:15;;33526:448;;33562:21;33586:14;33599:1;33586:10;:14;:::i;:::-;33635:18;;33562:38;;-1:-1:-1;33615:17:0;;33635:22;;33656:1;;33635:22;:::i;:::-;33615:42;;33672:17;33692:3;:11;;33704:9;33692:22;;;;;;;;:::i;:::-;;;;;;;;;33672:42;;33758:9;33729:3;:11;;33741:13;33729:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;33782:23;;;:12;;;:23;;;;;;:36;;;33833:17;;33782:3;;33833:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;33872:3;:12;;:19;33885:5;33872:19;;;;;;;;;;;33865:26;;;33913:4;33906:11;;;;;;;;33526:448;33957:5;33950:12;;;;;55856:343;-1:-1:-1;;;;;55975:17:0;;55951:21;55975:17;;;:9;:17;;;;;;56011:23;;;;56003:60;;;;-1:-1:-1;;;56003:60:0;;21245:2:1;56003:60:0;;;21227:21:1;21284:2;21264:18;;;21257:30;-1:-1:-1;;;21303:18:1;;;21296:54;21367:18;;56003:60:0;21043:348:1;56003:60:0;56074:27;56087:6;56094;56074:12;:27::i;:::-;56112:28;56122:9;56133:6;56112:9;:28::i;:::-;56173:9;-1:-1:-1;;;;;56156:35:0;56165:6;-1:-1:-1;;;;;56156:35:0;;56184:6;56156:35;;;;1997:25:1;;1985:2;1970:18;;1851:177;56156:35:0;;;;;;;;55940:259;55856:343;;;:::o;62513:257::-;62588:14;;;;;;;62587:15;62579:51;;;;-1:-1:-1;;;62579:51:0;;21598:2:1;62579:51:0;;;21580:21:1;21637:2;21617:18;;;21610:30;21676:25;21656:18;;;21649:53;21719:18;;62579:51:0;21396:347:1;62579:51:0;62657:12;;-1:-1:-1;;;;;62657:12:0;;;62645:24;;;;62641:122;;62703:12;62686:14;:29;62730:14;:21;;-1:-1:-1;;62730:21:0;;;;;62641:122;62513:257;:::o;59042:2304::-;-1:-1:-1;;;;;59185:20:0;;;59158:24;59185:20;;;:9;:20;;;;;;;59240:17;;;;;;;;59276:23;;;;59268:60;;;;-1:-1:-1;;;59268:60:0;;21245:2:1;59268:60:0;;;21227:21:1;21284:2;21264:18;;;21257:30;-1:-1:-1;;;21303:18:1;;;21296:54;21367:18;;59268:60:0;21043:348:1;59268:60:0;59341:9;59365:6;59361:1450;;;59392:16;;;;;;;59388:124;;;-1:-1:-1;;;;;59438:21:0;;;;;;:13;:21;;;;;;;;59437:22;59429:51;;;;-1:-1:-1;;;59429:51:0;;21950:2:1;59429:51:0;;;21932:21:1;21989:2;21969:18;;;21962:30;-1:-1:-1;;;22008:18:1;;;22001:46;22064:18;;59429:51:0;21748:340:1;59429:51:0;59552:15;;59542:25;;;59534:61;;;;-1:-1:-1;;;59534:61:0;;22295:2:1;59534:61:0;;;22277:21:1;22334:2;22314:18;;;22307:30;22373:25;22353:18;;;22346:53;22416:18;;59534:61:0;22093:347:1;59534:61:0;-1:-1:-1;59616:9:0;:17;;;;;;59361:1450;;;59657:5;59653:1158;;;59683:14;;:18;59679:221;;59739:14;;39145:1;;59726:27;;:12;:27;:::i;:::-;:46;59722:163;;;-1:-1:-1;;;;;59797:24:0;;;;;;:13;:24;;;;;:31;;-1:-1:-1;;59797:31:0;59824:4;59797:31;;;59851:11;:14;;59797:31;59851:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;59722:163;59920:15;;;;;;;59916:157;;;-1:-1:-1;;;;;59964:21:0;;;;;;:10;:21;;;;;;59989:12;59964:37;;59956:46;;;;;;-1:-1:-1;;;;;60021:21:0;;;;;;:10;:21;;;;;60045:12;60021:36;;59916:157;60131:7;:17;60104:23;60121:6;60104:16;:23;:::i;:::-;:44;;60096:86;;;;-1:-1:-1;;;60096:86:0;;22827:2:1;60096:86:0;;;22809:21:1;22866:2;22846:18;;;22839:30;22905:31;22885:18;;;22878:59;22954:18;;60096:86:0;22625:353:1;60096:86:0;60215:14;;60205:24;;;60197:58;;;;-1:-1:-1;;;60197:58:0;;23185:2:1;60197:58:0;;;23167:21:1;23224:2;23204:18;;;23197:30;-1:-1:-1;;;23243:18:1;;;23236:51;23304:18;;60197:58:0;22983:345:1;60197:58:0;-1:-1:-1;60276:9:0;:16;;;59653:1158;;;60331:16;;;;;;;60327:124;;;-1:-1:-1;;;;;60377:21:0;;;;;;:13;:21;;;;;;;;60376:22;60368:51;;;;-1:-1:-1;;;60368:51:0;;21950:2:1;60368:51:0;;;21932:21:1;21989:2;21969:18;;;21962:30;-1:-1:-1;;;22008:18:1;;;22001:46;22064:18;;60368:51:0;21748:340:1;60368:51:0;60481:20;37468:2;60481;:20;:::i;:::-;60471:6;:30;60467:187;;60598:11;;60575:38;;60586:10;;-1:-1:-1;;;60598:11:0;;-1:-1:-1;;;;;60598:11:0;60611:1;60575:10;:38::i;:::-;60632:7;;;;;60467:187;60707:7;:17;60678:25;60697:6;60678:16;:25;:::i;:::-;:46;;60670:75;;;;-1:-1:-1;;;60670:75:0;;23535:2:1;60670:75:0;;;23517:21:1;23574:2;23554:18;;;23547:30;-1:-1:-1;;;23593:18:1;;;23586:46;23649:18;;60670:75:0;23333:340:1;60670:75:0;-1:-1:-1;60778:9:0;:21;;;;;;59653:1158;60842:12;;-1:-1:-1;;;;;60832:22:0;;;60842:12;;60832:22;;;;60831:41;;-1:-1:-1;60861:10:0;;-1:-1:-1;;;60861:10:0;;;;60860:11;60831:41;:75;;;;-1:-1:-1;60878:27:0;;;;60877:28;60831:75;:85;;;;;60910:6;60831:85;60827:143;;;60950:13;;60931:39;;60950:13;;;;;60964:5;60931:18;:39::i;:::-;60983:19;61018:7;;;;61015:77;;61067:3;61052:12;;;;:6;:12;:::i;:::-;:18;;;;:::i;:::-;61038:32;;61015:77;61104:21;61128:20;61137:11;61128:6;:20;:::i;:::-;61104:44;;61159:27;61172:6;61179;61159:12;:27::i;:::-;61197:37;61215:4;61222:11;61197:9;:37::i;:::-;61245:35;61255:9;61266:13;61245:9;:35::i;:::-;61313:9;-1:-1:-1;;;;;61296:42:0;61305:6;-1:-1:-1;;;;;61296:42:0;;61324:13;61296:42;;;;1997:25:1;;1985:2;1970:18;;1851:177;61296:42:0;;;;;;;;59147:2199;;;;;59042:2304;;;;;;:::o;66153:313::-;-1:-1:-1;;;;;66271:17:0;;66211:7;66271:17;;;:9;:17;;;;;;66256:12;;66211:7;;66256:32;;;:::i;:::-;-1:-1:-1;;;;;66320:25:0;;;;;;:17;:25;;;;;;66235:53;;-1:-1:-1;66307:38:0;;66303:70;;;-1:-1:-1;66372:1:0;;66153:313;-1:-1:-1;;66153:313:0:o;66303:70::-;-1:-1:-1;;;;;66407:25:0;;;;;;:17;:25;;;;;;-1:-1:-1;;;53909:5:0;66396:36;;:10;:36;:::i;:::-;66395:59;;;;:::i;58589:444::-;58682:11;;58650:53;;58667:4;;-1:-1:-1;;;;;58682:11:0;58696:6;58650:8;:53::i;:::-;58738:16;;;58752:1;58738:16;;;;;;;;58714:21;;58738:16;;;;;;;;;;-1:-1:-1;58738:16:0;58714:40;;58783:4;58765;58770:1;58765:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;58765:23:0;;;:7;;;;;;;;;;:23;;;;58809:11;;:18;;;-1:-1:-1;;;58809:18:0;;;;:11;;;;;:16;;:18;;;;;58765:7;;58809:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58799:4;58804:1;58799:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;58799:28:0;;;:7;;;;;;;;;:28;58838:11;;:187;;-1:-1:-1;;;58838:187:0;;:11;;;:62;;:187;;58915:6;;58838:11;;58952:4;;58979;;58999:15;;58838:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58639:394;58589:444;:::o;54166:367::-;54280:11;;54248:58;;54265:4;;-1:-1:-1;;;;;54280:11:0;54294;54248:8;:58::i;:::-;54325:11;;:200;;-1:-1:-1;;;54325:200:0;;-1:-1:-1;;;;;54325:11:0;;;;:27;;54360:9;;54325:200;;54393:4;;54413:11;;54325;;;;54393:4;;54499:15;;54325:200;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29390:468::-;29507:6;29482:21;:31;;29474:73;;;;-1:-1:-1;;;29474:73:0;;24778:2:1;29474:73:0;;;24760:21:1;24817:2;24797:18;;;24790:30;24856:31;24836:18;;;24829:59;24905:18;;29474:73:0;24576:353:1;29474:73:0;29576:30;;28883:66;;29576:30;;29593:12;;29576:30;;;:::i;:::-;;;;;;;;;;;;;29566:41;;;;;;:58;29558:98;;;;-1:-1:-1;;;29558:98:0;;25417:2:1;29558:98:0;;;25399:21:1;25456:2;25436:18;;;25429:30;25495:29;25475:18;;;25468:57;25542:18;;29558:98:0;25215:351:1;29558:98:0;29696:51;;29678:12;;28787:48;;29735:6;;29678:12;29696:51;29678:12;29696:51;29735:6;28787:48;29696:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29677:70;;;29766:7;29758:78;;;;-1:-1:-1;;;29758:78:0;;25773:2:1;29758:78:0;;;25755:21:1;25812:2;25792:18;;;25785:30;25851:34;25831:18;;;25824:62;25922:28;25902:18;;;25895:56;25968:19;;29758:78:0;25571:422:1;55023:825:0;55170:15;;55146:10;:20;55110:22;;55170:15;;;;;;;;55136:30;;55146:20;;;;;55136:9;:30;:::i;:::-;55135:50;;;;:::i;:::-;55244:15;;55226:10;:14;55110:75;;-1:-1:-1;55196:16:0;;55244:15;;;;;;;;55216:24;;55226:14;55216:9;:24;:::i;:::-;55215:44;;;;:::i;:::-;55327:15;;55305:10;:18;55196:63;;-1:-1:-1;55271:20:0;;55327:15;;;;;;;;55295:28;;55305:18;;;;55295:9;:28;:::i;:::-;55294:48;;;;:::i;:::-;55362:20;;55271:71;;-1:-1:-1;55353:46:0;;-1:-1:-1;;;;;55362:20:0;55384:14;55353:8;:46::i;:::-;55419:10;:14;55410:34;;-1:-1:-1;;;;;55419:14:0;55435:8;55410;:34::i;:::-;55459:16;;55455:386;;55496:16;55492:67;;;55547:12;55531;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;55492:67:0;55574:19;55596:16;:14;:16::i;:::-;55574:38;;55631:11;55646:1;55631:16;55627:203;;55675:20;;55666:44;;-1:-1:-1;;;;;55675:20:0;55697:12;55666:8;:44::i;:::-;55627:203;;;55802:11;55767:31;-1:-1:-1;;;55767:12:0;:31;:::i;:::-;55766:47;;;;:::i;:::-;55749:12;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;55477:364:0;55099:749;;;55023:825;;:::o;65012:536::-;65088:6;65098:1;65088:11;65084:24;;65012:536;;:::o;65084:24::-;65134:21;65150:4;65134:15;:21::i;:::-;65126:6;:29;;65118:62;;;;-1:-1:-1;;;65118:62:0;;26200:2:1;65118:62:0;;;26182:21:1;26239:2;26219:18;;;26212:30;-1:-1:-1;;;26258:18:1;;;26251:51;26319:18;;65118:62:0;25998:345:1;65118:62:0;65197:35;:20;65227:4;65197:29;:35::i;:::-;65193:348;;;-1:-1:-1;;;;;65247:20:0;;;;;;:14;:20;;;;;:30;;65271:6;;65247:20;:30;;65271:6;;65247:30;:::i;:::-;;;;-1:-1:-1;65193:348:0;;-1:-1:-1;65193:348:0;;65309:17;65329:16;65340:4;65329:10;:16::i;:::-;-1:-1:-1;;;;;65405:15:0;;;;;;:9;:15;;;;;;65390:12;;65309:36;;-1:-1:-1;65390:30:0;;;:::i;:::-;-1:-1:-1;;;;;65364:23:0;;;;;;:17;:23;;;;;;;;:56;;;;65435:14;:20;;;;;:33;;65459:9;;65364:23;65435:33;;65459:9;;65435:33;:::i;:::-;;;;-1:-1:-1;;;;;;;65483:20:0;;;;;;:14;:20;;;;;:30;;65507:6;;65483:20;:30;;65507:6;;65483:30;:::i;:::-;;;;-1:-1:-1;;;65012:536:0;;:::o;56212:478::-;-1:-1:-1;;;;;56303:15:0;;56283:17;56303:15;;;:9;:15;;;;;;:24;;56321:6;;56303:24;:::i;:::-;56283:44;-1:-1:-1;56352:35:0;:20;56382:4;56352:29;:35::i;:::-;56348:116;;;-1:-1:-1;;;;;56404:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;56212:478:0:o;56348:116::-;56490:6;56474:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;56507:15:0;;-1:-1:-1;56525:16:0;56536:4;56525:10;:16::i;:::-;-1:-1:-1;;;;;56552:15:0;;;;;;:9;:15;;;;;:27;;;56616:12;;56507:34;;-1:-1:-1;56616:24:0;;56570:9;;56616:24;:::i;:::-;-1:-1:-1;;;;;56590:23:0;;;;;;:17;:23;;;;;;;;:50;;;;56651:14;:20;;;;;:31;;56675:7;;56590:23;56651:31;;56675:7;;56651:31;:::i;:::-;;;;-1:-1:-1;;;;;;56212:478:0:o;54542:473::-;-1:-1:-1;;;;;54630:15:0;;54610:17;54630:15;;;:9;:15;;;;;;:24;;54648:6;;54630:24;:::i;:::-;54610:44;-1:-1:-1;54679:35:0;:20;54709:4;54679:29;:35::i;:::-;54675:114;;;-1:-1:-1;;;;;54730:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;54542:473:0:o;54675:114::-;54815:6;54799:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;54832:15:0;;-1:-1:-1;54850:16:0;54861:4;54850:10;:16::i;:::-;54832:34;;54918:9;54903:12;;:24;;;;:::i;:::-;-1:-1:-1;;;;;54877:23:0;;;;;;:17;:23;;;;;;;;:50;;;;54938:14;:20;;;;;:31;;54962:7;;54877:23;54938:31;;54962:7;;54938:31;:::i;:::-;;;;-1:-1:-1;;;;;;;;54980:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;54542:473:0:o;65799:110::-;65847:7;37396:18;37468:2;37396;:18;:::i;:::-;37382:32;;:11;:32;:::i;:::-;65874:12;;:27;;;;:::i;552:258:1:-;624:1;634:113;648:6;645:1;642:13;634:113;;;724:11;;;718:18;705:11;;;698:39;670:2;663:10;634:113;;;765:6;762:1;759:13;756:48;;;800:1;791:6;786:3;782:16;775:27;756:48;;552:258;;;:::o;815:383::-;964:2;953:9;946:21;927:4;996:6;990:13;1039:6;1034:2;1023:9;1019:18;1012:34;1055:66;1114:6;1109:2;1098:9;1094:18;1089:2;1081:6;1077:15;1055:66;:::i;:::-;1182:2;1161:15;-1:-1:-1;;1157:29:1;1142:45;;;;1189:2;1138:54;;815:383;-1:-1:-1;;815:383:1:o;1203:131::-;-1:-1:-1;;;;;1278:31:1;;1268:42;;1258:70;;1324:1;1321;1314:12;1339:315;1407:6;1415;1468:2;1456:9;1447:7;1443:23;1439:32;1436:52;;;1484:1;1481;1474:12;1436:52;1523:9;1510:23;1542:31;1567:5;1542:31;:::i;:::-;1592:5;1644:2;1629:18;;;;1616:32;;-1:-1:-1;;;1339:315:1:o;2033:159::-;2100:20;;2160:6;2149:18;;2139:29;;2129:57;;2182:1;2179;2172:12;2129:57;2033:159;;;:::o;2197:184::-;2255:6;2308:2;2296:9;2287:7;2283:23;2279:32;2276:52;;;2324:1;2321;2314:12;2276:52;2347:28;2365:9;2347:28;:::i;2594:255::-;2661:6;2714:2;2702:9;2693:7;2689:23;2685:32;2682:52;;;2730:1;2727;2720:12;2682:52;2769:9;2756:23;2788:31;2813:5;2788:31;:::i;2854:456::-;2931:6;2939;2947;3000:2;2988:9;2979:7;2975:23;2971:32;2968:52;;;3016:1;3013;3006:12;2968:52;3055:9;3042:23;3074:31;3099:5;3074:31;:::i;:::-;3124:5;-1:-1:-1;3181:2:1;3166:18;;3153:32;3194:33;3153:32;3194:33;:::i;:::-;2854:456;;3246:7;;-1:-1:-1;;;3300:2:1;3285:18;;;;3272:32;;2854:456::o;3315:118::-;3401:5;3394:13;3387:21;3380:5;3377:32;3367:60;;3423:1;3420;3413:12;3438:241;3494:6;3547:2;3535:9;3526:7;3522:23;3518:32;3515:52;;;3563:1;3560;3553:12;3515:52;3602:9;3589:23;3621:28;3643:5;3621:28;:::i;4125:180::-;4184:6;4237:2;4225:9;4216:7;4212:23;4208:32;4205:52;;;4253:1;4250;4243:12;4205:52;-1:-1:-1;4276:23:1;;4125:180;-1:-1:-1;4125:180:1:o;4310:382::-;4375:6;4383;4436:2;4424:9;4415:7;4411:23;4407:32;4404:52;;;4452:1;4449;4442:12;4404:52;4491:9;4478:23;4510:31;4535:5;4510:31;:::i;:::-;4560:5;-1:-1:-1;4617:2:1;4602:18;;4589:32;4630:30;4589:32;4630:30;:::i;:::-;4679:7;4669:17;;;4310:382;;;;;:::o;4697:401::-;4779:6;4787;4795;4803;4856:3;4844:9;4835:7;4831:23;4827:33;4824:53;;;4873:1;4870;4863:12;4824:53;4896:28;4914:9;4896:28;:::i;:::-;4886:38;;4943:37;4976:2;4965:9;4961:18;4943:37;:::i;:::-;4933:47;;4999:37;5032:2;5021:9;5017:18;4999:37;:::i;:::-;4989:47;;5055:37;5088:2;5077:9;5073:18;5055:37;:::i;:::-;5045:47;;4697:401;;;;;;;:::o;5103:156::-;5169:20;;5229:4;5218:16;;5208:27;;5198:55;;5249:1;5246;5239:12;5264:393;5342:6;5350;5358;5366;5419:3;5407:9;5398:7;5394:23;5390:33;5387:53;;;5436:1;5433;5426:12;5387:53;5459:27;5476:9;5459:27;:::i;:::-;5449:37;;5505:36;5537:2;5526:9;5522:18;5505:36;:::i;:::-;5495:46;;5560:36;5592:2;5581:9;5577:18;5560:36;:::i;:::-;5550:46;;5615:36;5647:2;5636:9;5632:18;5615:36;:::i;5662:313::-;5726:6;5734;5787:2;5775:9;5766:7;5762:23;5758:32;5755:52;;;5803:1;5800;5793:12;5755:52;5826:28;5844:9;5826:28;:::i;6613:322::-;6684:6;6692;6700;6753:2;6741:9;6732:7;6728:23;6724:32;6721:52;;;6769:1;6766;6759:12;6721:52;6792:27;6809:9;6792:27;:::i;:::-;6782:37;;6838:36;6870:2;6859:9;6855:18;6838:36;:::i;:::-;6828:46;;6893:36;6925:2;6914:9;6910:18;6893:36;:::i;:::-;6883:46;;6613:322;;;;;:::o;7364:388::-;7432:6;7440;7493:2;7481:9;7472:7;7468:23;7464:32;7461:52;;;7509:1;7506;7499:12;7461:52;7548:9;7535:23;7567:31;7592:5;7567:31;:::i;:::-;7617:5;-1:-1:-1;7674:2:1;7659:18;;7646:32;7687:33;7646:32;7687:33;:::i;8708:344::-;8910:2;8892:21;;;8949:2;8929:18;;;8922:30;-1:-1:-1;;;8983:2:1;8968:18;;8961:50;9043:2;9028:18;;8708:344::o;9057:340::-;9259:2;9241:21;;;9298:2;9278:18;;;9271:30;-1:-1:-1;;;9332:2:1;9317:18;;9310:46;9388:2;9373:18;;9057:340::o;9402:127::-;9463:10;9458:3;9454:20;9451:1;9444:31;9494:4;9491:1;9484:15;9518:4;9515:1;9508:15;9534:422;9623:1;9666:5;9623:1;9680:270;9701:7;9691:8;9688:21;9680:270;;;9760:4;9756:1;9752:6;9748:17;9742:4;9739:27;9736:53;;;9769:18;;:::i;:::-;9819:7;9809:8;9805:22;9802:55;;;9839:16;;;;9802:55;9918:22;;;;9878:15;;;;9680:270;;;9684:3;9534:422;;;;;:::o;9961:806::-;10010:5;10040:8;10030:80;;-1:-1:-1;10081:1:1;10095:5;;10030:80;10129:4;10119:76;;-1:-1:-1;10166:1:1;10180:5;;10119:76;10211:4;10229:1;10224:59;;;;10297:1;10292:130;;;;10204:218;;10224:59;10254:1;10245:10;;10268:5;;;10292:130;10329:3;10319:8;10316:17;10313:43;;;10336:18;;:::i;:::-;-1:-1:-1;;10392:1:1;10378:16;;10407:5;;10204:218;;10506:2;10496:8;10493:16;10487:3;10481:4;10478:13;10474:36;10468:2;10458:8;10455:16;10450:2;10444:4;10441:12;10437:35;10434:77;10431:159;;;-1:-1:-1;10543:19:1;;;10575:5;;10431:159;10622:34;10647:8;10641:4;10622:34;:::i;:::-;10692:6;10688:1;10684:6;10680:19;10671:7;10668:32;10665:58;;;10703:18;;:::i;:::-;10741:20;;9961:806;-1:-1:-1;;;9961:806:1:o;10772:140::-;10830:5;10859:47;10900:4;10890:8;10886:19;10880:4;10859:47;:::i;10917:168::-;10957:7;11023:1;11019;11015:6;11011:14;11008:1;11005:21;11000:1;10993:9;10986:17;10982:45;10979:71;;;11030:18;;:::i;:::-;-1:-1:-1;11070:9:1;;10917:168::o;11090:345::-;11292:2;11274:21;;;11331:2;11311:18;;;11304:30;-1:-1:-1;;;11365:2:1;11350:18;;11343:51;11426:2;11411:18;;11090:345::o;12766:125::-;12806:4;12834:1;12831;12828:8;12825:34;;;12839:18;;:::i;:::-;-1:-1:-1;12876:9:1;;12766:125::o;12896:128::-;12936:3;12967:1;12963:6;12960:1;12957:13;12954:39;;;12973:18;;:::i;:::-;-1:-1:-1;13009:9:1;;12896:128::o;13434:184::-;13504:6;13557:2;13545:9;13536:7;13532:23;13528:32;13525:52;;;13573:1;13570;13563:12;13525:52;-1:-1:-1;13596:16:1;;13434:184;-1:-1:-1;13434:184:1:o;13902:245::-;13969:6;14022:2;14010:9;14001:7;13997:23;13993:32;13990:52;;;14038:1;14035;14028:12;13990:52;14070:9;14064:16;14089:28;14111:5;14089:28;:::i;14152:607::-;-1:-1:-1;;;;;14511:15:1;;;14493:34;;14558:2;14543:18;;14536:34;;;;14601:2;14586:18;;14579:34;;;;14644:2;14629:18;;14622:34;;;;14693:15;;;14687:3;14672:19;;14665:44;14473:3;14725:19;;14718:35;;;;14442:3;14427:19;;14152:607::o;15053:217::-;15093:1;15119;15109:132;;15163:10;15158:3;15154:20;15151:1;15144:31;15198:4;15195:1;15188:15;15226:4;15223:1;15216:15;15109:132;-1:-1:-1;15255:9:1;;15053:217::o;15636:204::-;15674:3;15710:4;15707:1;15703:12;15742:4;15739:1;15735:12;15777:3;15771:4;15767:14;15762:3;15759:23;15756:49;;;15785:18;;:::i;:::-;15821:13;;15636:204;-1:-1:-1;;;15636:204:1:o;15845:195::-;15883:4;15920;15917:1;15913:12;15952:4;15949:1;15945:12;15977:3;15972;15969:12;15966:38;;;15984:18;;:::i;:::-;16021:13;;;15845:195;-1:-1:-1;;;15845:195:1:o;19162:251::-;19232:6;19285:2;19273:9;19264:7;19260:23;19256:32;19253:52;;;19301:1;19298;19291:12;19253:52;19333:9;19327:16;19352:31;19377:5;19352:31;:::i;19418:127::-;19479:10;19474:3;19470:20;19467:1;19460:31;19510:4;19507:1;19500:15;19534:4;19531:1;19524:15;19550:461;19603:3;19641:5;19635:12;19668:6;19663:3;19656:19;19694:4;19723:2;19718:3;19714:12;19707:19;;19760:2;19753:5;19749:14;19781:1;19791:195;19805:6;19802:1;19799:13;19791:195;;;19870:13;;-1:-1:-1;;;;;19866:39:1;19854:52;;19926:12;;;;19961:15;;;;19902:1;19820:9;19791:195;;;-1:-1:-1;20002:3:1;;19550:461;-1:-1:-1;;;;;19550:461:1:o;20016:510::-;20287:6;20276:9;20269:25;20330:3;20325:2;20314:9;20310:18;20303:31;20250:4;20351:57;20403:3;20392:9;20388:19;20380:6;20351:57;:::i;:::-;-1:-1:-1;;;;;20444:32:1;;;;20439:2;20424:18;;20417:60;-1:-1:-1;20508:2:1;20493:18;20486:34;20343:65;20016:510;-1:-1:-1;;20016:510:1:o;20911:127::-;20972:10;20967:3;20963:20;20960:1;20953:31;21003:4;21000:1;20993:15;21027:4;21024:1;21017:15;22445:175;22482:3;22526:4;22519:5;22515:16;22555:4;22546:7;22543:17;22540:43;;22563:18;;:::i;:::-;22612:1;22599:15;;22445:175;-1:-1:-1;;22445:175:1:o;23678:582::-;23977:6;23966:9;23959:25;24020:6;24015:2;24004:9;24000:18;23993:34;24063:3;24058:2;24047:9;24043:18;24036:31;23940:4;24084:57;24136:3;24125:9;24121:19;24113:6;24084:57;:::i;:::-;-1:-1:-1;;;;;24177:32:1;;;;24172:2;24157:18;;24150:60;-1:-1:-1;24241:3:1;24226:19;24219:35;24076:65;23678:582;-1:-1:-1;;;23678:582:1:o;24265:306::-;24353:6;24361;24369;24422:2;24410:9;24401:7;24397:23;24393:32;24390:52;;;24438:1;24435;24428:12;24390:52;24467:9;24461:16;24451:26;;24517:2;24506:9;24502:18;24496:25;24486:35;;24561:2;24550:9;24546:18;24540:25;24530:35;;24265:306;;;;;:::o;24934:276::-;25065:3;25103:6;25097:13;25119:53;25165:6;25160:3;25153:4;25145:6;25141:17;25119:53;:::i;:::-;25188:16;;;;;24934:276;-1:-1:-1;;24934:276:1:o

Swarm Source

ipfs://6b9d9a29172f23f977fa376a2219380661282743020936eff221fdaeb92624db

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.