0 txs
0 calls
constructor
constructor()
functions
getReferralBalance
viewfunction getReferralBalance(string _referralCode, address _token) view returns (uint256)
getSupportedTokens
viewfunction getSupportedTokens() view returns (address[])
owner
viewfunction owner() view returns (address)
trustedForwarder
viewfunction trustedForwarder() view returns (address)
verification
viewfunction verification() view returns (address)
addSupportedToken
nonpayablefunction addSupportedToken(address _token)
addWhitelistedContract
nonpayablefunction addWhitelistedContract(address _contractAddress)
initialize
nonpayablefunction initialize(address _verification, address[] _supportedTokens, address[] _whitelistedContracts, address _owner)
recordDeposit
payablefunction recordDeposit(string _referralCode, address _token, uint256 _amount) payable
recordDepositBatch
payablefunction recordDepositBatch(string[] _referralCodes, address[] _tokens, uint256[] _amounts) payable
removeSupportedToken
nonpayablefunction removeSupportedToken(address _token)
removeWhitelistedContract
nonpayablefunction removeWhitelistedContract(address _contractAddress)
renounceOwnership
nonpayablefunction renounceOwnership()
setTrustedForwarder
nonpayablefunction setTrustedForwarder(address _trustedForwarder)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateVerificationContractAddress
nonpayablefunction updateVerificationContractAddress(address _newVerification)
withdrawBalances
nonpayablefunction withdrawBalances(string _referralCode, uint256 _timestamp, bytes _signature)
events
ContractRemovedFromWhitelist
event ContractRemovedFromWhitelist(address contractAddress)
ContractWhitelisted
event ContractWhitelisted(address contractAddress)
DepositRecorded
event DepositRecorded(string referralCode, address indexed token, uint256 amount)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
TokenAdded
event TokenAdded(address token)
TokenRemoved
event TokenRemoved(address token)
VerificationAddressUpdated
event VerificationAddressUpdated(address newKYCAMLVerification)
WithdrawalRecorded
event WithdrawalRecorded(string referralCode, address indexed token, uint256 amount)
errors
AlreadySupportedToken
error AlreadySupportedToken()
AlreadyWhitelisted
error AlreadyWhitelisted()
ArrayLengthMismatch
error ArrayLengthMismatch()
DuplicateAddress
error DuplicateAddress()
ETHNotAllowedWithTokenPayment
error ETHNotAllowedWithTokenPayment()
ETHSendFailed
error ETHSendFailed()
InvalidAddress
error InvalidAddress()
InvalidETHAmount
error InvalidETHAmount()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
NotWhitelisted
error NotWhitelisted()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UnsupportedToken
error UnsupportedToken()
creation bytecode
0x60806040523461002757610011610036565b61001961002c565b612c2961020f8239612c2990f35b610032565b60405190565b5f80fd5b61003e610132565b565b60401c90565b60ff1690565b61005861005d91610040565b610046565b90565b61006a905461004c565b90565b5f0190565b5f1c90565b60018060401b031690565b61008e61009391610072565b610077565b90565b6100a09054610082565b90565b60018060401b031690565b5f1b90565b906100c460018060401b03916100ae565b9181191691161790565b90565b6100e56100e06100ea926100a3565b6100ce565b6100a3565b90565b90565b9061010561010061010c926100d1565b6100ed565b82546100b3565b9055565b610119906100a3565b9052565b9190610130905f60208501940190610110565b565b61013a6101ea565b6101455f8201610060565b6101ce576101545f8201610096565b61016c61016660018060401b036100a3565b916100a3565b03610175575b50565b610188905f60018060401b0391016100f0565b60018060401b036101c57fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916101bc61002c565b9182918261011d565b0390a15f610172565b5f63f92ee8a960e01b8152806101e66004820161006d565b0390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009056fe60806040526004361015610010575b005b61001a5f35610128565b80620689e0146101235780630ff24ee21461011e57806346704adb146101195780634ffe2a8b146101145780636d69fcaf1461010f578063715018a61461010a57806376319190146101055780637da0a877146101005780637e91f6fe146100fb5780638da5cb5b146100f6578063911195cd146100f1578063a59a2f50146100ec578063c22a5dfa146100e7578063d3c7c2c7146100e2578063da742228146100dd578063f2fde38b146100d85763f4befb150361000e57610b80565b610985565b610952565b61091d565b61084a565b61073b565b610690565b610566565b610533565b6104fe565b6104bc565b610489565b610456565b610421565b610379565b610346565b6102f1565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b60018060a01b031690565b61015490610140565b90565b6101608161014b565b0361016757565b5f80fd5b9050359061017882610157565b565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906101a69061017e565b810190811067ffffffffffffffff8211176101c057604052565b610188565b906101d86101d161012e565b928361019c565b565b67ffffffffffffffff81116101f25760208091020190565b610188565b5f80fd5b9092919261021061020b826101da565b6101c5565b938185526020808601920283019281841161024d57915b8383106102345750505050565b60208091610242848661016b565b815201920191610227565b6101f7565b9080601f830112156102705781602061026d933591016101fb565b90565b61017a565b6080818303126102e75761028b825f830161016b565b92602082013567ffffffffffffffff81116102e257836102ac918401610252565b9260408301359067ffffffffffffffff82116102dd576102d1816102da938601610252565b9360600161016b565b90565b61013c565b61013c565b610138565b5f0190565b346103235761030d610304366004610275565b92919091611348565b61031561012e565b8061031f816102ec565b0390f35b610134565b906020828203126103415761033e915f0161016b565b90565b610138565b346103745761035e610359366004610328565b611476565b61036661012e565b80610370816102ec565b0390f35b610134565b346103a75761039161038c366004610328565b611519565b61039961012e565b806103a3816102ec565b0390f35b610134565b5f9103126103b657565b610138565b1c90565b60018060a01b031690565b6103da9060086103df93026103bb565b6103bf565b90565b906103ed91546103ca565b90565b6103fc60015f906103e2565b90565b6104089061014b565b9052565b919061041f905f602085019401906103ff565b565b34610451576104313660046103ac565b61044d61043c6103f0565b61044461012e565b9182918261040c565b0390f35b610134565b346104845761046e610469366004610328565b6115af565b61047661012e565b80610480816102ec565b0390f35b610134565b346104b7576104993660046103ac565b6104a16115df565b6104a961012e565b806104b3816102ec565b0390f35b610134565b346104ea576104d46104cf366004610328565b6117e7565b6104dc61012e565b806104e6816102ec565b0390f35b610134565b6104fb60045f906103e2565b90565b3461052e5761050e3660046103ac565b61052a6105196104ef565b61052161012e565b9182918261040c565b0390f35b610134565b346105615761054b610546366004610328565b611887565b61055361012e565b8061055d816102ec565b0390f35b610134565b34610596576105763660046103ac565b6105926105816118b3565b61058961012e565b9182918261040c565b0390f35b610134565b5f80fd5b67ffffffffffffffff81116105bd576105b960209161017e565b0190565b610188565b90825f939282370152565b909291926105e26105dd8261059f565b6101c5565b938185526020850190828401116105fe576105fc926105c2565b565b61059b565b9080601f830112156106215781602061061e933591016105cd565b90565b61017a565b9190604083820312610666575f8301359067ffffffffffffffff8211610661576106558161065e938601610603565b9360200161016b565b90565b61013c565b610138565b90565b6106779061066b565b9052565b919061068e905f6020850194019061066e565b565b346106c1576106bd6106ac6106a6366004610626565b906119a5565b6106b461012e565b9182918261067b565b0390f35b610134565b6106cf8161066b565b036106d657565b5f80fd5b905035906106e7826106c6565b565b9091606082840312610736575f82013567ffffffffffffffff8111610731576107178461072e928501610603565b93610725816020860161016b565b936040016106da565b90565b61013c565b610138565b61074f6107493660046106e9565b91611cdb565b61075761012e565b80610761816102ec565b0390f35b67ffffffffffffffff81116107835761077f60209161017e565b0190565b610188565b9092919261079d61079882610765565b6101c5565b938185526020850190828401116107b9576107b7926105c2565b565b61059b565b9080601f830112156107dc578160206107d993359101610788565b90565b61017a565b91606083830312610845575f83013567ffffffffffffffff8111610840578261080b918501610603565b9261081983602083016106da565b92604082013567ffffffffffffffff811161083b5761083892016107be565b90565b61013c565b61013c565b610138565b346108795761086361085d3660046107e1565b9161218a565b61086b61012e565b80610875816102ec565b0390f35b610134565b5190565b60209181520190565b60200190565b61089a9061014b565b9052565b906108ab81602093610891565b0190565b60200190565b906108d26108cc6108c58461087e565b8093610882565b9261088b565b905f5b8181106108e25750505090565b9091926108fb6108f5600192865161089e565b946108af565b91019190916108d5565b61091a9160208201915f8184039101526108b5565b90565b3461094d5761092d3660046103ac565b61094961093861224a565b61094061012e565b91829182610905565b0390f35b610134565b346109805761096a610965366004610328565b612280565b61097261012e565b8061097c816102ec565b0390f35b610134565b346109b35761099d610998366004610328565b6122f0565b6109a561012e565b806109af816102ec565b0390f35b610134565b67ffffffffffffffff81116109d05760208091020190565b610188565b9291906109e96109e4826109b8565b6101c5565b9381855260208086019202810191838311610a405781905b838210610a0f575050505050565b813567ffffffffffffffff8111610a3b57602091610a308784938701610603565b815201910190610a01565b61017a565b6101f7565b9080601f83011215610a6357816020610a60933591016109d5565b90565b61017a565b67ffffffffffffffff8111610a805760208091020190565b610188565b90929192610a9a610a9582610a68565b6101c5565b9381855260208086019202830192818411610ad757915b838310610abe5750505050565b60208091610acc84866106da565b815201920191610ab1565b6101f7565b9080601f83011215610afa57816020610af793359101610a85565b90565b61017a565b91606083830312610b7b575f83013567ffffffffffffffff8111610b765782610b29918501610a45565b92602081013567ffffffffffffffff8111610b715783610b4a918301610252565b92604082013567ffffffffffffffff8111610b6c57610b699201610adc565b90565b61013c565b61013c565b61013c565b610138565b610b94610b8e366004610aff565b916125cc565b610b9c61012e565b80610ba6816102ec565b0390f35b60401c90565b60ff1690565b610bc2610bc791610baa565b610bb0565b90565b610bd49054610bb6565b90565b151590565b5f1c90565b67ffffffffffffffff1690565b610bfa610bff91610bdc565b610be1565b90565b610c0c9054610bee565b90565b67ffffffffffffffff1690565b90565b90565b610c36610c31610c3b92610c1c565b610c1f565b610c0f565b90565b90565b610c55610c50610c5a92610c3e565b610c1f565b610c0f565b90565b610c71610c6c610c7692610140565b610c1f565b610140565b90565b610c8290610c5d565b90565b610c8e90610c79565b90565b610ca5610ca0610caa92610c1c565b610c1f565b61066b565b90565b5f1b90565b90610cc567ffffffffffffffff91610cad565b9181191691161790565b610ce3610cde610ce892610c0f565b610c1f565b610c0f565b90565b90565b90610d03610cfe610d0a92610ccf565b610ceb565b8254610cb2565b9055565b60401b90565b90610d2868ff000000000000000091610d0e565b9181191691161790565b610d3b90610bd7565b90565b90565b90610d56610d51610d5d92610d32565b610d3e565b8254610d14565b9055565b610d6a90610c41565b9052565b9190610d81905f60208501940190610d61565b565b909192610d8e6125d9565b93610da3610d9d5f8701610bca565b15610bd7565b93610daf5f8701610c02565b80610dc2610dbc5f610c22565b91610c0f565b1480610edc575b90610ddd610dd76001610c41565b91610c0f565b1480610eb4575b610def909115610bd7565b9081610ea3575b50610e8757610e1f93610e14610e0c6001610c41565b5f8901610cee565b85610e75575b6110ae565b610e27575b50565b610e34905f809101610d41565b6001610e6c7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d291610e6361012e565b91829182610d6e565b0390a15f610e24565b610e8260015f8901610d41565b610e1a565b5f63f92ee8a960e01b815280610e9f600482016102ec565b0390fd5b610eae915015610bd7565b5f610df6565b50610def610ec130610c85565b3b610ed4610ece5f610c91565b9161066b565b149050610de4565b5085610dc9565b610ef7610ef2610efc92610c1c565b610c1f565b610140565b90565b610f0890610ee3565b90565b90610f1c60018060a01b0391610cad565b9181191691161790565b610f2f90610c79565b90565b90565b90610f4a610f45610f5192610f26565b610f32565b8254610f0b565b9055565b6001610f61910161066b565b90565b634e487b7160e01b5f52603260045260245ffd5b90610f828261087e565b811015610f93576020809102010190565b610f64565b610fa2905161014b565b90565b90565b5f5260205f2090565b5490565b610fbe81610fb1565b821015610fd857610fd0600191610fa8565b910201905f90565b610f64565b1b90565b91906008611001910291610ffb60018060a01b0384610fdd565b92610fdd565b9181191691161790565b919061102161101c61102993610f26565b610f32565b908354610fe1565b9055565b908154916801000000000000000083101561105d578261105591600161105b95018155610fb5565b9061100b565b565b610188565b9061106c90610f26565b5f5260205260405f2090565b9061108460ff91610cad565b9181191691161790565b906110a361109e6110aa92610d32565b610d3e565b8254611078565b9055565b939193929092806110cf6110c96110c45f610eff565b61014b565b9161014b565b1461132c576110e36110f29295939561261b565b6110eb612642565b6001610f35565b6110fb8261087e565b6111045f610c91565b935b846111196111138461066b565b9161066b565b10156111e3576111285f610c91565b5b8061113c6111368861066b565b9161066b565b10156111a857611155611150868890610f78565b610f98565b61117961117361116e611169898690610f78565b610f98565b61014b565b9161014b565b1461118c5761118790610f55565b611129565b5f630148f8ab60e31b8152806111a4600482016102ec565b0390fd5b509190936111db906111d66111bd6002610fa5565b6111d06111cb888590610f78565b610f98565b9061102d565b610f55565b939091611106565b93505090506111f18161087e565b916111fb5f610c91565b925b8361121061120a8361066b565b9161066b565b101561132657611229611224848690610f78565b610f98565b61124361123d6112385f610eff565b61014b565b9161014b565b1461130a576112515f610c91565b5b8061126561125f8761066b565b9161066b565b10156112d15761127e611279858790610f78565b610f98565b6112a261129c611297611292888690610f78565b610f98565b61014b565b9161014b565b146112b5576112b090610f55565b611252565b5f630148f8ab60e31b8152806112cd600482016102ec565b0390fd5b5092611304906112ff60016112fa60036112f46112ef898790610f78565b610f98565b90611062565b61108e565b610f55565b926111fd565b5f63e6c4247b60e01b815280611322600482016102ec565b0390fd5b50915050565b5f63e6c4247b60e01b815280611344600482016102ec565b0390fd5b90611354939291610d83565b565b6113679061136261264c565b6113e9565b565b61137561137a91610bdc565b610bb0565b90565b6113879054611369565b90565b919060086113a591029161139f60ff84610fdd565b92610fdd565b9181191691161790565b91906113c56113c06113cd93610d32565b610d3e565b90835461138a565b9055565b5f90565b6113e7916113e16113d1565b916113af565b565b6114066114006113fb60038490611062565b61137d565b15610bd7565b61145a5761141f5f61141a60038490611062565b6113d5565b6114557ffb8b462bd4e3db069eb434596fcfb88044cfe688f7329d1c4bdfbb113257b1ac9161144c61012e565b9182918261040c565b0390a1565b5f630b094f2760e31b815280611472600482016102ec565b0390fd5b61147f90611356565b565b6114929061148d61264c565b611494565b565b6114a86114a360038390611062565b61137d565b6114fd576114c260016114bd60038490611062565b61108e565b6114f87fb7269578552456138d47dc37471d94886205143f138387446eff0148047965f6916114ef61012e565b9182918261040c565b0390a1565b5f63b73e95e160e01b815280611515600482016102ec565b0390fd5b61152290611481565b565b6115359061153061264c565b611537565b565b6115408161269a565b611593576115586115516002610fa5565b829061102d565b61158e7f784c8f4dbf0ffedd6e72c76501c545a70f8b203b30a26ce542bf92ba87c248a49161158561012e565b9182918261040c565b0390a1565b5f631f7bcf3560e11b8152806115ab600482016102ec565b0390fd5b6115b890611524565b565b6115c261264c565b6115ca6115cc565b565b6115dd6115d85f610eff565b61271a565b565b6115e76115ba565b565b6115fa906115f561264c565b6116e1565b565b5490565b5f5260205f2090565b611612816115fc565b82101561162c57611624600191611600565b910201905f90565b610f64565b61164561164061164a92610c3e565b610c1f565b61066b565b90565b634e487b7160e01b5f52601160045260245ffd5b6116706116769193929361066b565b9261066b565b820391821161168157565b61164d565b634e487b7160e01b5f52603160045260245ffd5b5f90565b6116b0916116aa61169a565b9161100b565b565b6116bb81610fb1565b80156116dc5760019003906116d96116d38383610fb5565b9061169e565b55565b611686565b6116eb60026115fc565b906116f55f610c91565b5b806117096117038561066b565b9161066b565b10156117df5761172461171e60028390611609565b906103e2565b6117366117308461014b565b9161014b565b146117495761174490610f55565b6116f6565b61179191925061178b61178361177d600261177761176760026115fc565b6117716001611631565b90611661565b90611609565b906103e2565b916002611609565b9061100b565b6117a361179e6002610fa5565b6116b2565b6117d97f4c910b69fe65a61f7531b9c5042b2329ca7179c77290aa7e2eb3afa3c8511fd3916117d061012e565b9182918261040c565b0390a15b565b5050506117dd565b6117f0906115e9565b565b611803906117fe61264c565b611805565b565b8061182061181a6118155f610eff565b61014b565b9161014b565b1461186b57611830816001610f35565b6118667f3349a3853122d0352064bb1f1d6e9853ebf241489b031e96dc02aa23e4ae2e7b9161185d61012e565b9182918261040c565b0390a1565b5f63e6c4247b60e01b815280611883600482016102ec565b0390fd5b611890906117f2565b565b61189e6118a391610bdc565b6103bf565b90565b6118b09054611892565b90565b6118bb61169a565b506118ce5f6118c8612786565b016118a6565b90565b5f90565b5190565b905090565b90825f9392825e0152565b61190e611905926020926118fc816118d5565b948580936118d9565b938491016118de565b0190565b90565b6119216119269161066b565b611912565b9052565b61193a61194191602094936118e9565b8092611915565b0190565b61195961195061012e565b9283928361192a565b03902090565b61196891611945565b90565b9061197590610f26565b5f5260205260405f2090565b90565b61199061199591610bdc565b611981565b90565b6119a29054611984565b90565b6119c9916119bf6119c4926119b86118d1565b505f61195f565b61196b565b611998565b90565b906119df92916119da6127d6565b611ae7565b6119e7612846565b565b6119f290610c5d565b90565b6119fe906119e9565b90565b611a0a90610c79565b90565b611a1c611a229193929361066b565b9261066b565b8201809211611a2d57565b61164d565b90611a3e5f1991610cad565b9181191691161790565b611a5c611a57611a619261066b565b610c1f565b61066b565b90565b90565b90611a7c611a77611a8392611a48565b611a64565b8254611a32565b9055565b60209181520190565b611aaf611ab8602093611abd93611aa6816118d5565b93848093611a87565b958691016118de565b61017e565b0190565b92916020611add611ae59360408701908782035f890152611a90565b94019061066e565b565b919091611b07611b01611afc60033390611062565b61137d565b15610bd7565b611cbf57611b1d611b178461269a565b15610bd7565b611ca35782611b3c611b36611b315f610eff565b61014b565b9161014b565b141580611c89575b611c6d5782611b63611b5d611b585f610eff565b61014b565b9161014b565b145f14611c165734611b7d611b778461066b565b9161066b565b03611bfa575b611bb482611bae611b9f611b985f869061195f565b879061196b565b91611ba983611998565b611a0d565b90611a67565b9190611be07fb654ee872ea2fa490c727d53c5f179e60cd13a33187bdf21c7e17769902cdcde92610f26565b92611bf5611bec61012e565b92839283611ac1565b0390a2565b5f63090ac0d760e21b815280611c12600482016102ec565b0390fd5b34611c29611c235f610c91565b9161066b565b11611c5157611c4c611c3a846119f5565b33611c4430611a01565b9085926128d2565b611b83565b5f63249a89a360e11b815280611c69600482016102ec565b0390fd5b5f63249a89a360e11b815280611c85600482016102ec565b0390fd5b5034611c9d611c975f610c91565b9161066b565b11611b44565b5f63350b944160e11b815280611cbb600482016102ec565b0390fd5b5f630b094f2760e31b815280611cd7600482016102ec565b0390fd5b90611ce692916119cc565b565b90611cfb9291611cf66127d6565b611ef8565b611d03612846565b565b611d0e90610c5d565b90565b611d1a90611d05565b90565b611d2690610c79565b90565b5f7f776974686472617742616c616e63657300000000000000000000000000000000910152565b611d5d6010602092611a87565b611d6681611d29565b0190565b90611db860a093611dca96989795611dab611da0611dc395611d9360c08901915f8a01906103ff565b8781036020890152611d50565b9260408701906103ff565b8482036060860152611a90565b96608083019061066e565b019061066e565b565b60200190565b5190565b5f80fd5b60e01b90565b5f910312611dea57565b610138565b90565b611dfb90611def565b9052565b60209181520190565b611e27611e30602093611e3593611e1e81611dd2565b93848093611dff565b958691016118de565b61017e565b0190565b91611e5c92611e4f60408201935f830190611df2565b6020818403910152611e08565b90565b611e6761012e565b3d5f823e3d90fd5b611e7890610c5d565b90565b611e8490611e6f565b90565b611e9090610c79565b90565b905090565b611ea35f8092611e93565b0190565b611eb090611e98565b90565b90611ec5611ec083610765565b6101c5565b918252565b606090565b3d5f14611eea57611edf3d611eb3565b903d5f602084013e5b565b611ef2611eca565b90611ee8565b9291611f02612945565b91611f1d611f18611f1360016118a6565b611d11565b611d1d565b91633c38ca3491611f5c611f3030611a01565b611f4d87938a904691611f4161012e565b96879560208701611d6a565b6020820181038252038261019c565b611f6e611f6882611dd2565b91611dcc565b209092803b1561218557611f955f8094611fa0611f8961012e565b97889687958694611dda565b845260048401611e39565b03925af1801561218057612154575b50611fba60026115fc565b91611fc45f610c91565b5b80611fd8611fd28661066b565b9161066b565b101561214d57611ff3611fed60028390611609565b906103e2565b9061201161200c6120055f899061195f565b849061196b565b611998565b918261202561201f5f610c91565b9161066b565b1161203b575b506120369150610f55565b611fc5565b6120616120475f610c91565b61205c6120555f8b9061195f565b849061196b565b611a67565b8061207c6120766120715f610eff565b61014b565b9161014b565b145f14612130576120c05f8061209961209489611e7b565b611e87565b866120a261012e565b90816120ad81611ea7565b03925af16120b9611ecf565b5015610bd7565b61211457612036925b8791906120f67f91b2b63726b58681b39ef7f974afe21c0b72feffe18776e00cec50f0db63333e92610f26565b9261210b61210261012e565b92839283611ac1565b0390a25f61202b565b5f63cef4eed760e01b81528061212c600482016102ec565b0390fd5b61203692612148612140836119f5565b8783916129d3565b6120c9565b5092505050565b612173905f3d8111612179575b61216b818361019c565b810190611de0565b5f611faf565b503d612161565b611e5f565b611dd6565b906121959291611ce8565b565b606090565b60209181520190565b6121af9054611892565b90565b60010190565b906121d56121cf6121c8846115fc565b809361219c565b92611600565b905f5b8181106121e55750505090565b9091926122056121ff6001926121fa876121a5565b61089e565b946121b2565b91019190916121d8565b90612219916121b8565b90565b9061223c6122359261222c61012e565b9384809261220f565b038361019c565b565b6122479061221c565b90565b612252612197565b5061225d600261223e565b90565b6122719061226c61264c565b612273565b565b61227e906004610f35565b565b61228990612260565b565b61229c9061229761264c565b61229e565b565b806122b96122b36122ae5f610eff565b61014b565b9161014b565b146122c9576122c79061271a565b565b6122ec6122d55f610eff565b5f918291631e4fbdf760e01b83526004830161040c565b0390fd5b6122f99061228b565b565b9061230e92916123096127d6565b61236d565b612316612846565b565b5190565b5190565b9061232a8261231c565b81101561233b576020809102010190565b610f64565b61234a905161066b565b90565b9061235782612318565b811015612368576020809102010190565b610f64565b91909161237981612318565b928361239561238f61238a8461087e565b61066b565b9161066b565b141580156125a9575b61258d576123bf6123b96123b460033390611062565b61137d565b15610bd7565b612571576123cc5f610c91565b946123d65f610c91565b5b806123ea6123e48861066b565b9161066b565b1015612534576124036123fe848390610f78565b610f98565b612416612411878490612320565b612340565b61242186849061234d565b519861243561242f8461269a565b15610bd7565b612518578261245461244e6124495f610eff565b61014b565b9161014b565b145f146124ed579061246c6124e89493928290611a0d565b995b61249f8261249961248a6124835f869061195f565b879061196b565b9161249483611998565b611a0d565b90611a67565b91906124cb7fb654ee872ea2fa490c727d53c5f179e60cd13a33187bdf21c7e17769902cdcde92610f26565b926124e06124d761012e565b92839283611ac1565b0390a2610f55565b6123d7565b989082916125136125016124e896956119f5565b3361250b30611a01565b9085926128d2565b61246e565b5f63350b944160e11b815280612530600482016102ec565b0390fd5b5094935050505061254e612548349261066b565b9161066b565b0361255557565b5f63090ac0d760e21b81528061256d600482016102ec565b0390fd5b5f630b094f2760e31b815280612589600482016102ec565b0390fd5b5f63512509d360e11b8152806125a5600482016102ec565b0390fd5b50836125c56125bf6125ba8661231c565b61066b565b9161066b565b141561239e565b906125d792916122fb565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b61260e90612609612a21565b612610565b565b61261990612ab9565b565b612624906125fd565b565b61262e612a21565b612636612638565b565b612640612af3565b565b61264a612626565b565b6126546118b3565b61266d612667612662612945565b61014b565b9161014b565b0361267457565b61269661267f612945565b5f91829163118cdaa760e01b83526004830161040c565b0390fd5b6126a26113d1565b506126ad60026115fc565b906126b75f610c91565b5b806126cb6126c58561066b565b9161066b565b1015612713576126e66126e060028390611609565b906103e2565b6126f86126f28461014b565b9161014b565b1461270b5761270690610f55565b6126b8565b505050600190565b5050505f90565b612722612786565b61273a6127305f83016118a6565b915f849101610f35565b9061276e6127687f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610f26565b91610f26565b9161277761012e565b80612781816102ec565b0390a3565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b90565b6127c16127bc6127c6926127aa565b610c1f565b61066b565b90565b6127d360026127ad565b90565b6127de612afd565b6127e95f8201611998565b6128026127fc6127f76127c9565b61066b565b9161066b565b1461281d5761281b905f6128146127c9565b9101611a67565b565b5f633ee5aeb560e01b815280612835600482016102ec565b0390fd5b6128436001611631565b90565b612861612851612afd565b5f61285a612839565b9101611a67565b565b61286c90610c79565b90565b63ffffffff1690565b63ffffffff60e01b1690565b61289861289361289d9261286f565b611dda565b612878565b90565b6040906128c96128d094969593966128bf60608401985f8501906103ff565b60208301906103ff565b019061066e565b565b60049261290c612920959361291b93946128f36323b872dd92949192612884565b936128fc61012e565b97889560208701908152016128a0565b6020820181038252038361019c565b612b21565b565b5090565b90565b61293d61293861294292612926565b610c1f565b61066b565b90565b61294d61169a565b503361296a61296461295f60046118a6565b61014b565b9161014b565b148061298a575b5f1461298357601436033560601c905b565b3390612981565b506129965f3690612922565b6129a96129a36014612929565b9161066b565b1015612971565b9160206129d19294936129ca60408201965f8301906103ff565b019061066e565b565b90612a1a612a1f93612a0b600494936129f263a9059cbb919391612884565b926129fb61012e565b96879460208601908152016129b0565b6020820181038252038361019c565b612b21565b565b612a32612a2c612bd5565b15610bd7565b612a3857565b5f631afcd79f60e31b815280612a50600482016102ec565b0390fd5b612a6590612a60612a21565b612a67565b565b80612a82612a7c612a775f610eff565b61014b565b9161014b565b14612a9257612a909061271a565b565b612ab5612a9e5f610eff565b5f918291631e4fbdf760e01b83526004830161040c565b0390fd5b612ac290612a54565b565b612acc612a21565b612ad4612ad6565b565b612af1612ae1612afd565b5f612aea612839565b9101611a67565b565b612afb612ac4565b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b905f602091612b2e6118d1565b50612b376118d1565b50828151910182855af115612bca573d5f5190612b5c612b565f610c91565b9161066b565b145f14612bb05750612b6d81612863565b3b612b80612b7a5f610c91565b9161066b565b145b612b895750565b612b95612bac91612863565b5f918291635274afe760e01b83526004830161040c565b0390fd5b612bc3612bbd6001611631565b9161066b565b1415612b82565b6040513d5f823e3d90fd5b612bdd6113d1565b50612bf05f612bea6125d9565b01610bca565b9056fea2646970667358221220681e9415a8951c7e0fab1c2ec5b8eb3aee993d0593429b69910a162f3896278f64736f6c634300081c0033