0 txs
0 calls
constructor
No constructor.
functions
authorized
viewfunction authorized(address) view returns (bool)
config
viewfunction config() view returns (address assetFactory, address ussi, address positionManager, address quoteToken, string chain, address swapRouter)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSSIBalance
viewfunction getSSIBalance(uint256 assetID) view returns (uint256 balance, uint256 pendingIn, uint256 pendingOut)
getUSSIBalance
viewfunction getUSSIBalance() view returns (uint256 balance, uint256 pendingIn, uint256 pendingOut)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
hedgePool
viewfunction hedgePool() view returns (address)
isMMAddress
viewfunction isMMAddress(address) view returns (bool)
oracle
viewfunction oracle() view returns (address)
owner
viewfunction owner() view returns (address)
pendingWithdrawals
viewfunction pendingWithdrawals(address, address) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TRADER_ROLE
viewfunction TRADER_ROLE() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
addLiquidity
nonpayablefunction addLiquidity(address token, uint256 amount)
addMMAddress
nonpayablefunction addMMAddress(address mm)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address owner, address _hedgePool, address _oracle)
mintSSI
nonpayablefunction mintSSI(uint256 assetID, tuple orderInfo, address initiator) returns (uint256 nonce, uint256 inAmount, uint256 outAmount)
mintUSSI
nonpayablefunction mintUSSI(tuple hedgeOrder, bytes hedgeOrderSign, address initiator) returns (bytes32 orderHash, uint256 inAmount, uint256 outAmount)
rebalanceSSILiquidity
nonpayablefunction rebalanceSSILiquidity(tuple rebalanceSSIParams) returns (bool needToIssue, bool isMint, uint256 targetQuote, uint256 nonce, uint256 inAmount, uint256 outAmount)
rebalanceUSSILiquidity
nonpayablefunction rebalanceUSSILiquidity(tuple rebalanceUSSIParams) returns (bool needToIssueSSI, bool needToIssueUSSI, bool isMint, uint256 targetQuote, uint256 nonce, bytes32 orderHash, uint256 ssiInAmount, uint256 ssiOutAmount, uint256 ussiInAmount, uint256 ussiOutAmount)
redeemSSI
nonpayablefunction redeemSSI(uint256 assetID, tuple orderInfo, address initiator) returns (uint256 nonce, uint256 inAmount, uint256 outAmount)
redeemUSSI
nonpayablefunction redeemUSSI(tuple hedgeOrder, bytes hedgeOrderSign, address initiator) returns (bytes32 orderHash, uint256 inAmount, uint256 outAmount)
removeMMAddress
nonpayablefunction removeMMAddress(address mm)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setHedgePool
nonpayablefunction setHedgePool(address _hedgePool)
setOracle
nonpayablefunction setOracle(address _oracle)
swapSSI
nonpayablefunction swapSSI(uint256 assetID, tuple orderInfo)
swapUSSI
nonpayablefunction swapUSSI(uint256 assetID, tuple hedgeOrder, bytes hedgeOrderSign, tuple ssiMintOrderInfo)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateConfig
nonpayablefunction updateConfig(tuple config_)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawSSI
nonpayablefunction withdrawSSI(uint256 assetID, uint256 tokenAmount) returns (bool needToRedeem, uint256 redeemAmount)
withdrawSSI
nonpayablefunction withdrawSSI(uint256 assetID)
withdrawSSILiquidity
nonpayablefunction withdrawSSILiquidity(uint256 assetID, tuple redeemOrderInfo) returns (uint256 redeemAmount)
withdrawUSD
nonpayablefunction withdrawUSD(uint256 amount) returns (bool needToRedeem, uint256 redeemAmount)
events
Hedge
event Hedge(address indexed token, int256 amount, int256 side)
Initialized
event Initialized(uint64 version)
LiquidityAdded
event LiquidityAdded(address indexed assetID, uint256 amount, address indexed provider)
MintSSI
event MintSSI(uint256 indexed assetID, ((string chain, address maker, uint256 nonce, (string chain, string symbol, string addr, uint8 decimals, uint256 amount)[] inTokenset, (string chain, string symbol, string addr, uint8 decimals, uint256 amount)[] outTokenset, string[] inAddressList, string[] outAddressList, uint256 inAmount, uint256 outAmount, uint256 deadline, address requester) order, bytes32 orderHash, bytes orderSign) orderInfo, address indexed provider)
MintUSSI
event MintUSSI(bytes32 orderHash, uint256 inAmount, uint256 outAmount, address indexed provider)
MMAddressAdded
event MMAddressAdded(address indexed mm)
MMAddressRemoved
event MMAddressRemoved(address indexed mm)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RedeemSSI
event RedeemSSI(uint256 indexed assetID, ((string chain, address maker, uint256 nonce, (string chain, string symbol, string addr, uint8 decimals, uint256 amount)[] inTokenset, (string chain, string symbol, string addr, uint8 decimals, uint256 amount)[] outTokenset, string[] inAddressList, string[] outAddressList, uint256 inAmount, uint256 outAmount, uint256 deadline, address requester) order, bytes32 orderHash, bytes orderSign) orderInfo, address indexed provider)
RedeemUSSI
event RedeemUSSI(bytes32 orderHash, uint256 inAmount, uint256 outAmount, address indexed provider)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SSIRebalanced
event SSIRebalanced(uint256 indexed assetID, bool isMint, uint256 inAmount, uint256 outAmount)
SwappedSSI
event SwappedSSI(uint256 indexed assetID, string orderType, uint256 inAmount, uint256 outAmount, address indexed provider)
SwappedUSSI
event SwappedUSSI(uint256 indexed assetID, string orderType, uint256 inAmount, uint256 outAmount, address indexed provider)
Upgraded
event Upgraded(address indexed implementation)
USSIRebalanced
event USSIRebalanced(uint256 indexed assetID, bool needToIssueSSI, bool needToIssueUSSI, bool isMint, uint256 targetQuote, uint256 nonce, bytes32 orderHash, uint256 ssiInAmount, uint256 ssiOutAmount, uint256 ussiInAmount, uint256 ussiOutAmount)
WithdrawRedeem
event WithdrawRedeem(uint256 indexed assetID, uint256 amount, address to)
WithdrawSSI
event WithdrawSSI(uint256 indexed assetID, uint256 tokenAmount)
WithdrawSSILiquidity
event WithdrawSSILiquidity(uint256 indexed assetID, uint256 inAmount, uint256 outAmount)
WithdrawUSD
event WithdrawUSD(uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a0806040523460295730608052614a18908161002e823960805181818161277d0152612a5e0152f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146134495750806307115d4e146133aa5780630a2346f11461336d578063150e87dc14613276578063159a71dc1461307b5780631cde851014612f20578063248a9ca314612ece5780632f2ff15d14612e7157806332de943d14612d5e57806336568abe14612d015780634f1ef286146129e2578063508a81dd146127f557806352d1902d1461276357806356688700146126a95780635a53064114612053578063653167ff14611d455780636a28db7214611c4e578063715018a614611b9d578063744dfeec146118675780637861ce4c1461165d57806379502c55146115c25780637adbf9731461156b5780637dc0d1d0146115445780638d41d1bb1461142f5780638da5cb5b146113e957806391d148541461137f5780639b44937e146111345780639e252f081461110d578063a217fddf146110f1578063ad1003c414611017578063ad3cb1cc14610fb6578063adc596b914610b56578063b1e368cd14610aff578063b918161114610ac2578063c0c53b8b14610822578063d547741f146107bb578063d801f30a146103ed578063e201e27b14610299578063e831be581461024b578063f0a56fc8146102105763f2fde38b146101e1575f80fd5b3461020d57602060031936011261020d5761020a6101fd6134e7565b61020561459a565b61436f565b80f35b80fd5b503461020d578060031936011261020d5760206040517ffacaf2747a7486cf5730e9265973fb54447d3ace6e7e4711f6360826b07319418152f35b503461020d57604060031936011261020d576001600160a01b03604061026f6134e7565b92826102796134fd565b94168152600f6020522091165f52602052602060405f2054604051908152f35b503461020d576102a8366137ef565b92916102b2614442565b604051917fb4ef7b3d000000000000000000000000000000000000000000000000000000008352606083806102ec88858760048501614155565b038173d9c7e90ad029c1f6b3601392ed0e3ceb45b8c0b95af49182156103e2578493859361037a575b507fa38bf5349d5e0b56fc76e7012849b3377193340d20e9ef1e1182cd85bb3efdaf6001600160a01b03610376959697610356604051928392169582614193565b0390a3604051938493846040919493926060820195825260208201520152565b0390f35b6001600160a01b03955061037694507fa38bf5349d5e0b56fc76e7012849b3377193340d20e9ef1e1182cd85bb3efdaf9693506103ce9060603d6060116103db575b6103c681836135be565b81019061383b565b9497909650909450610315565b503d6103bc565b6040513d86823e3d90fd5b503461020d576103fc36613666565b9190610406614442565b61041f6101006104168580614030565b01351515614063565b6001600160a01b03825416926040517f73bacc5b000000000000000000000000000000000000000000000000000000008152826004820152602081602481885afa9081156103e2578491610773575b5060206001600160a01b036024921695604051928380927f61ec30c40000000000000000000000000000000000000000000000000000000082528760048301525afa80156103e257610738575b5060e06104c88280614030565b0135604051907f70a08231000000000000000000000000000000000000000000000000000000008252306004830152602082602481895afa91821561072d5785926106f5575b50116106975761051c614442565b604051937f09d4ce4c0000000000000000000000000000000000000000000000000000000085526060858061055633868860048501614155565b038173d9c7e90ad029c1f6b3601392ed0e3ceb45b8c0b95af49182156103e2578495859361066f575b50837fdce110904f3f0d4ff970e2a6cfad6d1657a1f93dae8851a009ed558fb7d02b0f604051806105b1339582614193565b0390a36001600160a01b03600c541690813b1561066b5784916064839260405194859384927f338a3e0400000000000000000000000000000000000000000000000000000000845260048401528a6024840152600160448401525af180156103e257610652575b5060406020947fae07e07350c9e0be4b9509739b611d845671bac3a56691543df2f525715520b292825191825286820152a2604051908152f35b61065d8480926135be565b610667575f610618565b8280fd5b8480fd5b90925061068c91955060603d6060116103db576103c681836135be565b95915094915f61057f565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f6e6f7420656e6f756768207373692062616c616e636520746f2072656465656d6044820152fd5b9091506020813d602011610725575b81610711602093836135be565b810103126107215751905f61050e565b5f80fd5b3d9150610704565b6040513d87823e3d90fd5b6020813d60201161076b575b81610751602093836135be565b810103126107675761076290614102565b6104bb565b8380fd5b3d9150610744565b90506020813d6020116107b3575b8161078e602093836135be565b810103126107675760206001600160a01b036107ab602493614102565b92505061046e565b3d9150610781565b503461020d57604060031936011261020d5761081e6004356107db6134fd565b90610819610814825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b6144ca565b6147b1565b5080f35b503461020d57606060031936011261020d5761083c6134e7565b6108446134fd565b604435906001600160a01b038216809203610767577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549260ff8460401c16159367ffffffffffffffff811680159081610aba575b6001149081610ab0575b159081610aa7575b50610a7f576001600160a01b039291818660017fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000061093b9516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610a2a575b506109156148ff565b61091d6148ff565b6109268161436f565b61092e6148ff565b6109366148ff565b6145f9565b50167fffffffffffffffffffffffff0000000000000000000000000000000000000000600c541617600c557fffffffffffffffffffffffff0000000000000000000000000000000000000000600d541617600d556109965780f35b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f61090c565b6004867ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f6108ab565b303b1591506108a3565b869150610899565b503461020d57602060031936011261020d5760ff60406020926001600160a01b03610aeb6134e7565b168152600e84522054166040519015158152f35b503461020d57602060031936011261020d576001600160a01b03610b216134e7565b610b2961459a565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600c541617600c5580f35b503461020d57602060031936011261020d57600435610b73614442565b6001600160a01b038254166040517f73bacc5b000000000000000000000000000000000000000000000000000000008152826004820152602081602481855afa80156103e257610f77575b506020602491604051928380927f61ec30c40000000000000000000000000000000000000000000000000000000082528660048301525afa8015610f6c578390610f2c575b8391506001600160a01b0316815b83855260076020526040852054811015610ed4578385526007602052604085208054821015610ea75785526020852060038202016040516060810181811067ffffffffffffffff821117610e7a57604052815480825260406001600160a01b036002600186015495602086019687520154169201918252604051907fe20f8853000000000000000000000000000000000000000000000000000000008252600482015261012081602481885afa8015610e6f578890610d76575b60c0915001516004811015610d49576002149081610d35575b50610cf3575b50600101610c11565b929092518101809111610d0857916001610cea565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6001600160a01b039150511633145f610ce4565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b50610120813d8211610e67575b81610d9161012093836135be565b81010312610e6357604051610120810181811067ffffffffffffffff821117610e365760405281518152610dc760208301614102565b6020820152610dd860408301614102565b604082015260608201516060820152610df360808301614102565b608082015260a082015160a082015260c08201516004811015610e325760c092610100918484015260e081015160e08401520151610100820152610ccb565b8980fd5b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8780fd5b3d9150610d83565b6040513d8a823e3d90fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b505080610edf578280f35b604081610f1a7f732433fde4777d42b2958321e66205513729b33536a890706bd802f0cbc26cdd936001600160a01b03600354163390614543565b8151908152336020820152a25f808280f35b506020813d602011610f64575b81610f46602093836135be565b8101031261066757610f5f6001600160a01b0391614102565b610c03565b3d9150610f39565b6040513d85823e3d90fd5b6020813d602011610fae575b81610f90602093836135be565b8101031261076757602491610fa6602092614102565b509150610bbe565b3d9150610f83565b503461020d578060031936011261020d5750610376604051610fd96040826135be565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906137ac565b503461020d57602060031936011261020d576040517ffd23a54300000000000000000000000000000000000000000000000000000000815260066004820152606060248201526060818061106d60648201613856565b6004356044830152038173d9c7e90ad029c1f6b3601392ed0e3ceb45b8c0b95af480156110e657829183916110bf575b5061037690604051938493846040919493926060820195825260208201520152565b905061037692506110df915060603d6060116103db576103c681836135be565b909261109d565b6040513d84823e3d90fd5b503461020d578060031936011261020d57602090604051908152f35b503461020d578060031936011261020d5760206001600160a01b03600c5416604051908152f35b503461020d57608060031936011261020d5760243560043567ffffffffffffffff82116106675761016060031983360301126106675760443567ffffffffffffffff81116107675761118a903690600401613527565b92906064359067ffffffffffffffff821161137b576060600319833603011261137b57611233946112486040936111bf614442565b845197889485947f45705a290000000000000000000000000000000000000000000000000000000086526006600487015260c0602487015261122161120660c48801613856565b8b60448901526003198882030160648901528a600401613b23565b91600319878403016084880152613ae5565b906003198483030160a4850152600401613e73565b038173ec4a2248fbcdeec99f042b10b584cc3184b2dc495af49081156103e25784938592611343575b506024013590600382101561066b577f261bf5276691f2ca3f4f5b0804aa42bcb54195a7f08c63d234843763b1f797f3916002036112f7576040805160608082526006908201527f72656465656d00000000000000000000000000000000000000000000000000006080820152602081019590955284015233928060a081015b0390a380f35b6040805160608082526004908201527f6d696e74000000000000000000000000000000000000000000000000000000006080820152602081019590955284015233928060a081016112f1565b6024945061136a91925060403d604011611374575b61136281836135be565b810190613c34565b9390939190611271565b503d611358565b8580fd5b503461020d57604060031936011261020d576001600160a01b0360406113a36134fd565b9260043581527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020522091165f52602052602060ff60405f2054166040519015158152f35b503461020d578060031936011261020d5760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b503461020d5761143e366137ef565b9291611448614442565b604051917f09d4ce4c0000000000000000000000000000000000000000000000000000000083526060838061148288858760048501614155565b038173d9c7e90ad029c1f6b3601392ed0e3ceb45b8c0b95af49182156103e257849385936114ec575b507fdce110904f3f0d4ff970e2a6cfad6d1657a1f93dae8851a009ed558fb7d02b0f6001600160a01b03610376959697610356604051928392169582614193565b6001600160a01b03955061037694507fdce110904f3f0d4ff970e2a6cfad6d1657a1f93dae8851a009ed558fb7d02b0f9693506115379060603d6060116103db576103c681836135be565b94979096509094506114ab565b503461020d578060031936011261020d5760206001600160a01b03600d5416604051908152f35b503461020d57602060031936011261020d576001600160a01b0361158d6134e7565b61159561459a565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600d541617600d5580f35b503461020d578060031936011261020d576001600160a01b039054166001600160a01b0360015416906001600160a01b03600254166116536001600160a01b03600354166040519061161e82611617816136ef565b03836135be565b6001600160a01b036005541693604051968796875260208701526040860152606085015260c0608085015260c08401906137ac565b9060a08301520390f35b503461020d57602060031936011261020d5760043567ffffffffffffffff811161186357806004019060a060031982360301126106675761169c614442565b60c061175f6001600160a01b03600c54169260405193849283927f5c5e984900000000000000000000000000000000000000000000000000000000845260066004850152608060248501526116f360848501613856565b6003198582030160448601526117518935998a83526024840135602084015260ff61172060448601613ccf565b16604084015260846117496117386064870184614123565b60a0606087015260a0860190613e73565b940190614123565b906080818403910152613e73565b906064830152038173d9c7e90ad029c1f6b3601392ed0e3ceb45b8c0b95af4908115610f6c5783928485908692879488966117f7575b5060c097507f93407607a90962531d6c5d438d73fc547eabd3c9a4e291a2e9688fbe549e96f6606060405193151593848152876020820152886040820152a26040519515158652602086015260408501526060840152608083015260a0820152f35b965094505050505060c0823d60c01161185b575b8161181860c093836135be565b810103126106675760c0925061182d82614116565b61183960208401614116565b60408401516060850151608086015160a090960151939593949092905f611795565b3d915061180b565b5080fd5b503461020d57602060031936011261020d576004359067ffffffffffffffff821161020d578160040190610100600319843603011261020d576118a8614442565b6040517f91992925000000000000000000000000000000000000000000000000000000008152600660048201526060602482015290816118ea60648201613856565b6003198282030160448301528435815261190660248701613ccf565b60ff16602082015261191b6044870186614123565b604082016101009052610100820161193291613e73565b61193f6064880187614123565b90828103606084015261195191613e73565b9560848101966119618888613c4a565b90838103608085015261197391613b23565b61198060a4830188613a95565b84830360a08601526119929291613ae5565b61199f60c4830188613c4a565b9083810360c08501526119b191613b23565b9060e4016119bf9087613a95565b90928083039060e001526119d292613ae5565b038273d9c7e90ad029c1f6b3601392ed0e3ceb45b8c0b991815a9361014094f4908115611b9157809281948283849085928694879688809a611af5575b5050611a226103769a9b9c604092614030565b01357f9da9d13032a46956ff4e3546dd59738167827ea6bf1a30e7873ceb5b5b6983848c8c611aa28c8c8c8c8c8c8c8c6040519a8b9a8b9693909a9998959261012098959261014089019c1515895215156020890152151560408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0390a26040519a8b9a8b9693909a9998959261012098959261014089019c1515895215156020890152151560408801526060870152608086015260a085015260c084015260e08301526101008201520152565b99509a50985050505050505050610140833d8211611b89575b81611b1c61014093836135be565b8101031261020d575061037690611b3283614116565b611b3e60208501614116565b93611b4b60408201614116565b6060820151608083015160a084015160c085015160e086015161010087015161012090970151979997989697909691959294929190611a2290611a0f565b3d9150611b0e565b604051903d90823e3d90fd5b503461020d578060031936011261020d57611bb661459a565b806001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461020d57602060031936011261020d576001600160a01b03611c706134e7565b611c7861459a565b16808252600b60205260ff60408320541615611ce757808252600b602052604082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f5eb2bf73c1011b17622aeab25183140816ca3aadb248be70c70d8fc90d60544e8280a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f574c503a204d4d206e6f7420666f756e640000000000000000000000000000006044820152fd5b3461072157604060031936011261072157600435602435611d64614442565b611d6f811515614063565b6001600160a01b035f54166040517f73bacc5b000000000000000000000000000000000000000000000000000000008152836004820152602081602481855afa908115611f10575f9161200b575b5060206001600160a01b036024921692604051928380927f61ec30c40000000000000000000000000000000000000000000000000000000082528860048301525afa8015611f1057611fd4575b506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa8015611f105783915f91611f9f575b5010611f1b576001600160a01b03600c541691823b15610721575f80936064604051809681937f338a3e040000000000000000000000000000000000000000000000000000000083528760048401528660248401528160448401525af1928315611f105781602093611eea927fc2e055ea9cac44961ffbb689c69a9a1cc4de7bd362359bbc1f3f228e16ad7ed896611f00575b503390614543565b604051908152a2604080515f8082526020820152f35b5f611f0a916135be565b5f611ee2565b6040513d5f823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f6e6f7420656e6f756768207373692062616c616e636520746f2077697468647260448201527f61770000000000000000000000000000000000000000000000000000000000006064820152fd5b9150506020813d602011611fcc575b81611fbb602093836135be565b810103126107215782905185611e4f565b3d9150611fae565b6020813d602011612003575b81611fed602093836135be565b8101031261072157611ffe90614102565b611e0a565b3d9150611fe0565b90506020813d60201161204b575b81612026602093836135be565b810103126107215760206001600160a01b03612043602493614102565b925050611dbd565b3d9150612019565b346107215760206003193601126107215760043567ffffffffffffffff81116107215780600401908036039060c06003198301126107215761209361459a565b6001600160a01b036120a4846140ee565b1615158061268c575b8061266f575b80612652575b156125f4576121729260405160208101602081526001600160a01b036120de84613513565b16604083015260248401926001600160a01b036120fa85613513565b16606084015260448501916001600160a01b0361211684613513565b16608085015260648601906001600160a01b0361213283613513565b1660a086015260848701946121a48161215f61214e8988613a95565b60c080850152610100840191613ae5565b6001600160a01b0360a48c019d8e613513565b1660e0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826135be565b519020916040519260208401602081525f54946001600160a01b03861660408201526001600160a01b036001541660608201526001600160a01b036002541660808201526001600160a01b036003541660a082015260c08082015261224d8161221061010082016136ef565b6001600160a01b036005541660e0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826135be565b51902014612596576122f16001600160a01b0394856122c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd99612320977fffffffffffffffffffffffff0000000000000000000000000000000000000000846122b781996140ee565b169116175f556140ee565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001556140ee565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002556140ee565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006003541617600355359201821215610721570160048101359067ffffffffffffffff82116107215781360360248201136107215761238160045461369e565b601f81116124f5575b505f90601f83116001146124225791806001600160a01b0394926123e6945f92612414575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176004556140ee565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060055416176005555f80f35b0160240135905085806123af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083169160045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b925f5b8181106124da57509260019285926123e6966001600160a01b0398961061249e575b505050811b016004556140ee565b6024910101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600384901b60f8161c19169055858080612490565b6024848401013585556001909401936020928301920161246e565b60045f52601f830160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01906020841061256e575b601f0160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905b818110612563575061238a565b5f8155600101612556565b7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915061252c565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f636f6e666967206e6f74206368616e67650000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f636f6e66696720686173207a65726f20616464726573730000000000000000006044820152fd5b506001600160a01b03612667606483016140ee565b1615156120b9565b506001600160a01b03612684604483016140ee565b1615156120b3565b506001600160a01b036126a1602483016140ee565b1615156120ad565b34610721576040600319360112610721576126c26134e7565b6001600160a01b03602435916126d6614442565b6126e1831515614063565b166127356040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528360648201526064815261272f6084826135be565b82614892565b6040519182527fa21288bdd948f634bcd5a8bfc9825db1b01914f370ef82149e123b7c8dc3b65b60203393a3005b34610721575f600319360112610721576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036127cd5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b346107215761280336613666565b9061280c614442565b604051917ff28754b900000000000000000000000000000000000000000000000000000000835260066004840152608060248401526040838061286c61285460848301613856565b86604484015260031983820301606484015285613e73565b038173ec4a2248fbcdeec99f042b10b584cc3184b2dc495af4908115611f10575f935f926129b9575b50806128a091614030565b60a0810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561072157019081359167ffffffffffffffff83116107215760208360051b36039101136107215760017f53062b1c1dd477b1a6f9d3a132f37e6bbdb2d2f25cd2a848777ef81077dc823992115f1461296d576040805160608082526006908201527f72656465656d00000000000000000000000000000000000000000000000000006080820152602081019590955284015233928060a081015b0390a3005b6040805160608082526004908201527f6d696e74000000000000000000000000000000000000000000000000000000006080820152602081019590955284015233928060a08101612968565b6128a094506129d891925060403d6040116113745761136281836135be565b9390939190612895565b6040600319360112610721576129f66134e7565b6024359067ffffffffffffffff8211610721573660238301121561072157816004013590612a238261362c565b91612a3160405193846135be565b8083526020830193366024838301011161072157815f926024602093018737840101526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803014908115612ccc575b506127cd57612a9661459a565b6001600160a01b038116926040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481885afa5f9181612c98575b50612b0957847f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc869203612c6d5750823b15612c4257807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2825115612c10575f8091612c06945190845af43d15612c08573d91612bea8361362c565b92612bf860405194856135be565b83523d5f602085013e614956565b005b606091614956565b50505034612c1a57005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011612cc4575b81612cb4602093836135be565b8101031261072157519086612ad8565b3d9150612ca7565b90506001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141584612a89565b3461072157604060031936011261072157612d1a6134fd565b336001600160a01b03821603612d3657612c06906004356147b1565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610721576060612d6e36613555565b92612d7b94929194614442565b612db38460405196879485947fba53d4fc00000000000000000000000000000000000000000000000000000000865260048601613be2565b038173d9c7e90ad029c1f6b3601392ed0e3ceb45b8c0b95af48015611f10575f905f925f91612e48575b604080518481526020810186905290810183905261037692916001600160a01b0316907f3faee112c01cb32c29f2c20a66fc3c922f1336cd54bfe68fa6e838220c4a04779080606081015b0390a2604051938493846040919493926060820195825260208201520152565b92505050612e676103769260603d6060116103db576103c681836135be565b9093508392612ddd565b3461072157604060031936011261072157612c06600435612e906134fd565b90612ec9610814825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b6146c6565b34610721576020600319360112610721576020612f186004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b34610721576020600319360112610721576001600160a01b03612f416134e7565b612f4961459a565b16801561301d57805f52600b60205260ff60405f205416612fbf57805f52600b60205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f8c34f41fac8bea43735c1df38da8c9e045a67be76edfe2f0a8cca6a4a3ba8cad5f80a2005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f574c503a204d4d20616c726561647920616464656400000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f574c503a20696e76616c6964204d4d20616464726573730000000000000000006044820152fd5b3461072157602060031936011261072157600435613097614442565b80156131f2576001600160a01b03600354166040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa8015611f105783915f916131bd575b501061313957816131237f9f2378c808a7141afecfc67effe46e262ddf1dd8a5268a059307715ffcacdbe3936020933390614543565b604051908152a1604080515f8082526020820152f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f6e6f7420656e6f756768207573642062616c616e636520746f2077697468647260448201527f61770000000000000000000000000000000000000000000000000000000000006064820152fd5b9150506020813d6020116131ea575b816131d9602093836135be565b8101031261072157829051846130ed565b3d91506131cc565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f776974686472617720616d6f756e74206d75737420626520677265617465722060448201527f7468616e203000000000000000000000000000000000000000000000000000006064820152fd5b3461072157606061328636613555565b9261329394929194614442565b6132cb8460405196879485947f04c6df8100000000000000000000000000000000000000000000000000000000865260048601613be2565b038173d9c7e90ad029c1f6b3601392ed0e3ceb45b8c0b95af48015611f10575f905f925f91613344575b604080518481526020810186905290810183905261037692916001600160a01b0316907fc3cc94e966df1938a53a57b47299f81141ff69aea5f48836cc0082c633d35a3c908060608101612e28565b925050506133636103769260603d6060116103db576103c681836135be565b90935083926132f5565b34610721576020600319360112610721576001600160a01b0361338e6134e7565b165f52600b602052602060ff60405f2054166040519015158152f35b34610721575f600319360112610721576040517ff61f448b0000000000000000000000000000000000000000000000000000000081526006600482015260406024820152606081806133fe60448201613856565b038173d9c7e90ad029c1f6b3601392ed0e3ceb45b8c0b95af48015611f10575f905f925f916110bf575061037690604051938493846040919493926060820195825260208201520152565b3461072157602060031936011261072157600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361072157817f7965db0b00000000000000000000000000000000000000000000000000000000602093149081156134bd575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836134b6565b600435906001600160a01b038216820361072157565b602435906001600160a01b038216820361072157565b35906001600160a01b038216820361072157565b9181601f840112156107215782359167ffffffffffffffff8311610721576020838186019501011161072157565b9060606003198301126107215760043567ffffffffffffffff811161072157610160600319828503011261072157600401916024359067ffffffffffffffff8211610721576135a691600401613527565b90916044356001600160a01b03811681036107215790565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176135ff57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116135ff57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b90604060031983011261072157600435916024359067ffffffffffffffff821161072157600319826060920301126107215760040190565b90600182811c921680156136e5575b60208310146136b857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916136ad565b6004545f92916136fe8261369e565b80825291600181169081156137725750600114613719575050565b60045f9081529293509091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b838310613758575060209250010190565b600181602092949394548385870101520191019190613747565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90606060031983011261072157600435916024359067ffffffffffffffff8211610721576003198260609203011261072157600401906044356001600160a01b03811681036107215790565b90816060910312610721578051916040602083015192015190565b6001600160a01b035f541681526001600160a01b036001541660208201526001600160a01b036002541660408201526001600160a01b0360035416606082015260c060808201525f906004546138ab8161369e565b908160c08401526001811690815f1461393557506001146138dc575b5060a06001600160a01b036005541691015290565b60045f908152919250907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82821061391e575060e09150820101905f6138c7565b6001816020925460e0858801015201910190613908565b60e09394507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101905f6138c7565b906001600160a01b0382541681526001600160a01b0360018301541660208201526001600160a01b0360028301541660408201526001600160a01b036003830154166060820152600482019160c060808301525f928054906139d28261369e565b918260c08601526001811690815f14613a495750600114613a06575b50506001600160a01b03600560a09201541691015290565b909193505f5260205f205f905b828210613a325750820160e0019290506001600160a01b0360056139ee565b6001816020925460e0858801015201910190613a13565b60a09496506005925060e09150927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006001600160a01b039416828701521515821b8501019492506139ee565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561072157016020813591019167ffffffffffffffff821161072157813603831361072157565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b90613b41613b318380613a95565b6101608452610160840191613ae5565b916020810135600381101561072157613bdb61014080936001600160a01b039360208701526040810135604087015283613b7d60608301613513565b1660608701526080810135608087015260a081013560a087015260c081013560c087015260e081013560e087015283613bb96101008301613513565b1661010087015283613bce6101208301613513565b1661012087015201613513565b1691015290565b92608092613c2d91613c1f6001600160a01b03949897986006885260a06020890152613c1160a089015f613971565b9088820360408a0152613b23565b918683036060880152613ae5565b9416910152565b9190826040910312610721576020825192015190565b90357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea182360301811215610721570190565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561072157016020813591019167ffffffffffffffff8211610721578160051b3603831361072157565b359060ff8216820361072157565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6182360301811215610721570190565b90602083828152019260208260051b82010193835f925b848410613d365750505050505090565b909192939495602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08560019503018752613d738a87613cdd565b90608080613dcc613db1613d98613d8a8780613a95565b60a0885260a0880191613ae5565b613da488880188613a95565b908783038a890152613ae5565b613dbe6040870187613a95565b908683036040880152613ae5565b9360ff613ddb60608301613ccf565b16606085015201359101529801940194019294939190613d26565b90602083828152019260208260051b82010193835f925b848410613e1d5750505050505090565b909192939495602080613e63837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018852613e5d8b88613a95565b90613ae5565b9801940194019294939190613e0d565b61402d9161401f613ecf926001600160a01b03614004610140613fdc613f9e613f60613f238987613ed66020613ea98c80613c4a565b9e8f94606081526101c0613ebd8780613a95565b91909261016060608201520191613ae5565b9301613513565b1660808c015260408c013560a08c0152613ef360608d018d613c7c565b8c83037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa00160c08e015290613d0f565b613f3060808c018c613c7c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08c84030160e08d0152613d0f565b613f6d60a08b018b613c7c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b8403016101008c0152613df6565b613fab60c08a018a613c7c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8403016101208b0152613df6565b9660e08101358288015261010081013561016088015261012081013561018088015201613513565b166101a0840152602081013560208401526040810190613a95565b916040818503910152613ae5565b90565b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610721570190565b1561406a57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f574c503a20416d6f756e74206d7573742062652067726561746572207468616e60448201527f20300000000000000000000000000000000000000000000000000000000000006064820152fd5b356001600160a01b03811681036107215790565b51906001600160a01b038216820361072157565b5190811515820361072157565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa182360301811215610721570190565b91613c2d6080926001600160a01b03929695966006865260a0602087015261418060a087015f613971565b9160408701528582036060870152613e73565b613ecf9061433f61402d93602083526001600160a01b036143246101406142fa6142be61428061424289876141f560206141cd8c80613c4a565b9e8f946060838201526101e06141e38780613a95565b91909261016060808201520191613ae5565b1660a08c015260408c013560c08c015261421260608d018d613c7c565b8c83037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160e08e015290613d0f565b61424f60808c018c613c7c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808c8403016101008d0152613d0f565b61428d60a08b018b613c7c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808b8403016101208c0152613df6565b6142cb60c08a018a613c7c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a840301858b0152613df6565b9660e08101356101608801526101008101356101808801526101208101356101a088015201613513565b166101c0840152602081013560408401526040810190613a95565b9160607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301910152613ae5565b6001600160a01b03168015614416576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b335f9081527ff606e684ad9d4695315d4c1d83180a79ca1e5fc34d503cff501b8f4b9410207c602052604090205460ff161561447a57565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527ffacaf2747a7486cf5730e9265973fb54447d3ace6e7e4711f6360826b073194160245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f206001600160a01b0333165f5260205260ff60405f205416156145145750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b614598926001600160a01b03604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526145936064836135be565b614892565b565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633036145cd57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166146c1576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f206001600160a01b0383165f5260205260ff60405f205416155f146147ab57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f206001600160a01b0383165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f206001600160a01b0383165f5260205260ff60405f2054165f146147ab57805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f206001600160a01b0383165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b905f602091828151910182855af115611f10575f513d6148f657506001600160a01b0381163b155b6148c15750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b600114156148ba565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561492e57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90614993575080511561496b57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806149d9575b6149a4575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561499c56fea26469706673582212201e43d50aa7bab3229411221004997e16680e0f8b8d3b91506c244105e0a9011064736f6c634300081a0033