0 txs
1.2k calls
constructor
constructor(address nft, address v, address pf, address spot)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
instrument
viewfunction instrument(bytes16 symbol) view returns (tuple instrument_)
lastOwner
viewfunction lastOwner(bytes32 positionId) view returns (address owner)
paused
viewfunction paused() view returns (bool)
positionFactory
viewfunction positionFactory() view returns (address)
positionNFT
viewfunction positionNFT() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
spotExecutor
viewfunction spotExecutor() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
vault
viewfunction vault() view returns (address)
claimRewards
nonpayablefunction claimRewards(bytes32 positionId, address to)
completeClose
nonpayablefunction completeClose(address, address repayTo, address asset, uint256 amount, uint256 fee, bytes params) returns (bytes result)
completeOpenFromFlashBorrow
nonpayablefunction completeOpenFromFlashBorrow(address asset, uint256 amountOwed, bytes params) returns (bytes result)
completeOpenFromFlashLoan
nonpayablefunction completeOpenFromFlashLoan(address, address repayTo, address asset, uint256 amount, uint256 fee, bytes params) returns (bytes result)
createInstrument
nonpayablefunction createInstrument(bytes16 symbol, address base, address quote)
donatePosition
nonpayablefunction donatePosition(bytes32 positionId, address to)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address timelock)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setClosingOnly
nonpayablefunction setClosingOnly(bytes16 symbol, bool closingOnly)
trade
payablefunction trade(tuple tradeParams, tuple execParams) payable returns (bytes32, tuple)
tradeOnBehalfOf
payablefunction tradeOnBehalfOf(tuple tradeParams, tuple execParams, address onBehalfOf) payable returns (bytes32 positionId, tuple trade_)
unpause
nonpayablefunction unpause()
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
ClosingOnlySet
event ClosingOnlySet(bytes16 indexed symbol, bool closingOnly)
Initialized
event Initialized(uint8 version)
InstrumentCreated
event InstrumentCreated(bytes16 indexed symbol, address base, address quote)
MoneyMarketRegistered
event MoneyMarketRegistered(uint8 indexed id, address moneyMarket)
Paused
event Paused(address account)
PositionDonated
event PositionDonated(bytes32 indexed positionId, address indexed from, address indexed to)
PositionUpserted
event PositionUpserted(bytes32 indexed positionId, address indexed owner, address indexed tradedBy, uint8 cashflowCcy, int256 cashflow, int256 quantityDelta, uint256 price, uint256 fee, uint8 feeCcy)
RewardsClaimed
event RewardsClaimed(bytes32 indexed positionId, address indexed to)
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)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
CashflowCcyRequired
error CashflowCcyRequired()
ClosingOnly
error ClosingOnly()
InstrumentAlreadyExists
error InstrumentAlreadyExists(bytes16 symbol)
InsufficientBaseCashflow
error InsufficientBaseCashflow(int256 expected, int256 actual)
InsufficientBaseOnOpen
error InsufficientBaseOnOpen(uint256 expected, int256 actual)
InvalidCashflowCcy
error InvalidCashflowCcy()
InvalidInstrument
error InvalidInstrument(bytes16 symbol)
NotFlashBorrowProvider
error NotFlashBorrowProvider(address msgSender)
OnlyFullClosureAllowedAfterExpiry
error OnlyFullClosureAllowedAfterExpiry()
PriceAboveLimit
error PriceAboveLimit(uint256 limit, uint256 actual)
PriceBelowLimit
error PriceBelowLimit(uint256 limit, uint256 actual)
Unauthorised
error Unauthorised(address msgSender)
UnexpectedCallback
error UnexpectedCallback()
UnexpectedTrade
error UnexpectedTrade()
ZeroDestination
error ZeroDestination()
ZeroPayer
error ZeroPayer()
creation bytecode
0x61012060405230608052348015610014575f5ffd5b5060405161597d38038061597d8339810160408190526100339161006d565b6001600160a01b0393841660a05291831660c052821660e05216610100526100c9565b6001600160a01b038116811461006a575f5ffd5b50565b5f5f5f5f60808587031215610080575f5ffd5b845161008b81610056565b602086015190945061009c81610056565b60408601519093506100ad81610056565b60608601519092506100be81610056565b939692955090935050565b60805160a05160c05160e051610100516157eb6101925f395f81816104490152818161339e01526133e601525f8181610655015281816121ed0152612c9201525f81816106e501528181613296015281816136520152818161396b0152613dda01525f818161024e01528181610c5301528181610cd6015281816117cd01528181611b1a01528181611bbc01528181612bc301528181612c0f0152612da701525f81816109b4015281816109f401528181610ac301528181610b030152610b9001526157eb5ff3fe6080604052600436106101c5575f3560e01c80638456cb59116100f2578063c4d66de811610092578063d547741f11610062578063d547741f14610677578063e1a2c97314610696578063e3631c8f146106b5578063fbfa77cf146106d4575f5ffd5b8063c4d66de8146104cc578063c4dac5d5146104eb578063c8a3e14614610625578063d24415b214610644575f5ffd5b8063a217fddf116100cd578063a217fddf14610425578063a5efcaf314610438578063ac9650d81461046b578063b0d950ca14610497575f5ffd5b80638456cb59146103df578063867083fc146103f357806391d1485414610406575f5ffd5b806336568abe1161016857806352d1902d1161013857806352d1902d146103695780635c975abb1461037d5780635d044b7e14610394578063687ffeb5146103b3575f5ffd5b806336568abe146103045780633659cfe6146103235780633f4ba83a146103425780634f1ef28614610356575f5ffd5b806323228ecb116101a357806323228ecb1461023d578063248a9ca3146102885780632f2ff15d146102c457806332688cb1146102e3575f5ffd5b806301ffc9a7146101c957806303995be2146101fd57806305a91a141461021e575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e3366004614633565b610707565b60405190151581526020015b60405180910390f35b348015610208575f5ffd5b5061021c61021736600461467c565b61073d565b005b348015610229575f5ffd5b5061021c6102383660046146c7565b6107d8565b348015610248575f5ffd5b506102707f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101f4565b348015610293575f5ffd5b506102b66102a23660046146ea565b5f9081526065602052604090206001015490565b6040519081526020016101f4565b3480156102cf575f5ffd5b5061021c6102de3660046146c7565b610878565b6102f66102f1366004614717565b6108a1565b6040516101f4929190614828565b34801561030f575f5ffd5b5061021c61031e3660046146c7565b61092c565b34801561032e575f5ffd5b5061021c61033d36600461483d565b6109aa565b34801561034d575f5ffd5b5061021c610a87565b61021c6103643660046149a3565b610ab9565b348015610374575f5ffd5b506102b6610b84565b348015610388575f5ffd5b5060975460ff166101e8565b34801561039f575f5ffd5b5061021c6103ae3660046146c7565b610c35565b3480156103be575f5ffd5b506103d26103cd366004614a2c565b610e11565b6040516101f49190614ae2565b3480156103ea575f5ffd5b5061021c610e7b565b6102f6610401366004614af4565b610ead565b348015610411575f5ffd5b506101e86104203660046146c7565b610ecd565b348015610430575f5ffd5b506102b65f81565b348015610443575f5ffd5b506102707f000000000000000000000000000000000000000000000000000000000000000081565b348015610476575f5ffd5b5061048a610485366004614b35565b610ef7565b6040516101f49190614ba4565b3480156104a2575f5ffd5b506102706104b13660046146ea565b61c3566020525f90815260409020546001600160a01b031681565b3480156104d7575f5ffd5b5061021c6104e636600461483d565b610fde565b3480156104f6575f5ffd5b506105db610505366004614c07565b6040805160a080820183525f8083526020808401828152848601838152606080870185815260808089018781526001600160801b03199b8c16885261c3578752968a90208a5160c081018c52815480841b909d168152600160801b909c0460ff161515968c0196875260018101546001600160a01b038082169c8e018d9052600160a01b918290046001600160401b03908116968f01968752600290930154808216948f019485529190910482169c9099019b8c5299895291518916909352519094169093529451909316905291511515905290565b6040805182516001600160a01b039081168252602080850151908301528383015116918101919091526060808301519082015260809182015115159181019190915260a0016101f4565b348015610630575f5ffd5b5061021c61063f366004614c22565b611103565b34801561064f575f5ffd5b506102707f000000000000000000000000000000000000000000000000000000000000000081565b348015610682575f5ffd5b5061021c6106913660046146c7565b6112df565b3480156106a1575f5ffd5b506103d26106b0366004614c5f565b611303565b3480156106c0575f5ffd5b506103d26106cf366004614a2c565b6113a1565b3480156106df575f5ffd5b506102707f000000000000000000000000000000000000000000000000000000000000000081565b5f6001600160e01b03198216637965db0b60e01b148061073757506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c610767816113f8565b6001600160801b031983165f81815261c3576020526040908190208054851515600160801b0260ff60801b19909116179055517faa3d6eea1b014a4cde6ede4263756ebd79650da1e0877b8488a4851d5cf8ba34906107cb90851515815260200190565b60405180910390a2505050565b6107e0611402565b5f82815261c35660205260409020546001600160a01b0316331461081e5760405163570870ef60e11b81523360048201526024015b60405180910390fd5b5f82815261c356602052604080822080546001600160a01b0319166001600160a01b03851690811790915590519091339185917f24a117ef0bcfb59b3489f1fd59a0e4b89392d4da5b319c2aab5eb36d8cd67c0f91a45050565b5f82815260656020526040902060010154610892816113f8565b61089c838361144a565b505050565b5f6108aa614511565b6108b2611402565b843591505f60208601358112156108da5750826108d08686836114cf565b9093509150610918565b5f86602001351215610908576108fe6108f836889003880188614cc2565b866117b3565b9092509050610918565b6109128686611b7e565b90925090505b610923838383611e2c565b50935093915050565b6001600160a01b038116331461099c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610815565b6109a68282611e9a565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109f25760405162461bcd60e51b815260040161081590614d1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a3a5f5160206157a45f395f51905f52546001600160a01b031690565b6001600160a01b031614610a605760405162461bcd60e51b815260040161081590614d66565b610a6981611f00565b604080515f80825260208201909252610a8491839190611f0a565b50565b7f1f0d2102a85edc0c871c07a564fe384c6a51b8d7f5ec7b7b83a5446ff3ff1654610ab1816113f8565b610a84612074565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b015760405162461bcd60e51b815260040161081590614d1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b495f5160206157a45f395f51905f52546001600160a01b031690565b6001600160a01b031614610b6f5760405162461bcd60e51b815260040161081590614d66565b610b7882611f00565b6109a682826001611f0a565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c235760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610815565b505f5160206157a45f395f51905f5290565b610c3d611402565b604051630e29a66960e21b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906338a699a490602401602060405180830381865afa158015610ca0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc49190614dc2565b15610d0257610cfc6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016836120c6565b50610d3b565b5f82815261c35660205260409020546001600160a01b03163314610d3b5760405163570870ef60e11b8152336004820152602401610815565b6001600160801b031982165f90815261c357602052604090208290610d5f826121d5565b6001820154600283015460405163053b51d360e31b8152600481018890526001600160a01b039283166024820152908216604482015285821660648201529116906329da8e98906084015f604051808303815f87803b158015610dc0575f5ffd5b505af1158015610dd2573d5f5f3e3d5ffd5b50506040516001600160a01b03861692508691507fbfa100eea2f40b39537bc6df4de7f953b016b20340469136d16c33725f92e8a3905f90a350505050565b6060610e6d610e6887610e248789614df1565b610e6287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061225e92505050565b8b61229d565b612632565b90505b979650505050505050565b7ffe9179cad658aeacaa2a24dfa89614efe9f95669a3a7fac3badb2b51fc9bf70a610ea5816113f8565b610a84612666565b5f610eb6614511565b610ec18484336108a1565b915091505b9250929050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060816001600160401b03811115610f1157610f11614858565b604051908082528060200260200182016040528015610f4457816020015b6060815260200190600190039081610f2f5790505b5090505f5b82811015610fd757610fb230858584818110610f6757610f67614e04565b9050602002810190610f799190614e18565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506126a392505050565b828281518110610fc457610fc4614e04565b6020908102919091010152600101610f49565b5092915050565b5f54610100900460ff1615808015610ffc57505f54600160ff909116105b806110155750303b15801561101557505f5460ff166001145b6110785760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610815565b5f805460ff191660011790558015611099575f805461ff0019166101001790555b6110a16126cf565b6110a96126f5565b6110b16126cf565b6110bb5f8361144a565b80156109a6575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c61112d816113f8565b6001600160801b031984165f90815261c35760205260409020600101546001600160a01b03161561117d5760405163185c189360e21b81526001600160801b031985166004820152602401610815565b6001600160801b03198481165f90815261c357602052604090208054909116608086901c17815560010180546001600160a01b0319166001600160a01b0385161790556111d16111cc84612727565b612793565b6001600160801b031985165f90815261c3576020526040902060018101805467ffffffffffffffff60a01b1916600160a01b6001600160401b0394909416939093029290921790915560020180546001600160a01b0319166001600160a01b0384161790556112426111cc83612727565b6001600160801b031985165f81815261c35760205260409081902060020180546001600160401b0394909416600160a01b0267ffffffffffffffff60a01b199094169390931790925590517fd02afcdb3df4a60e55c828742bc1f8a83b261f2e4124986cbf09cd4ac625f005906112d190869086906001600160a01b0392831681529116602082015260400190565b60405180910390a250505050565b5f828152606560205260409020600101546112f9816113f8565b61089c8383611e9a565b60605f61134484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506127fe92505050565b9050336001600160a01b031661135d8260c001516121d5565b6001600160a01b03161461138657604051635045944160e01b8152336004820152602401610815565b611395610e688787845f61281a565b9150505b949350505050565b6060610e6d610e68876113b48789614df1565b6113f287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061225e92505050565b8b61281a565b610a848133612a7c565b60975460ff16156114485760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610815565b565b6114548282610ecd565b6109a6575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561148b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f6114d8614511565b6114e061457f565b5f6114ec873586612ad5565b9195509250905061150d8261150760808a0160608b01614e5a565b5f612de6565b816020015180611521575061152184612e79565b1561153f57604051631dacbd6f60e01b815260040160405180910390fd5b5f6040518061014001604052808861155690614e75565b81526020016115688a60200135612e93565b815260808a01803560208301526001600160a01b038916604083015260609182019161159691908c01614e5a565b60028111156115a7576115a7614775565b8152602001848152602001868152602001836001600160a01b03168152602001896040013581526020015f151581525090506115e281612ee4565b15611602576115fb6115f382612f5d565b5f835f61281a565b93506117a8565b5f600261161560808b0160608c01614e5a565b600281111561162657611626614775565b14611635578760400135611659565b611659896080013561164a8a60400135612f95565b6116549190614efa565b612e93565b6040516301ffc9a760e01b815263a7db160d60e01b60048201529091506060906001600160a01b038516906301ffc9a790602401602060405180830381865afa1580156116a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116cc9190614dc2565b1561176957836001600160a01b031663a7db160d8460c001518760800151856116f488612ffe565b6040516001600160e01b031960e087901b1681526117209493929190309063e1a2c97390600401614f19565b5f604051808303815f875af115801561173b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526117629190810190614fae565b905061179a565b61179761177c60a08b0160808c0161483d565b3087608001518561178c88612ffe565b3063e3631c8f613027565b90505b6117a3816130ad565b955050505b505050935093915050565b6117bb614511565b82515f906117f3906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906120c6565b90505f61c3575f611804875f015190565b6001600160801b0319908116825260208083019390935260409182015f908120835160c0810185528154608081811b909516825260ff600160801b9091041615159581019590955260018101546001600160a01b03808216958701959095526001600160401b03600160a01b918290048116606088015260029092015494851693860193909352919092041660a08301528651919250906118a4906121d5565b8651604080850151905163346404a360e01b81529293505f926001600160a01b0385169263346404a3926118ec926004019182526001600160a01b0316602082015260400190565b6020604051808303815f875af1158015611908573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192c9190614fdf565b90505f61194561193f89602001516130f8565b83613109565b90505f6040518061014001604052808961195e90614e75565b81526020018381526020018a608001518152602001876001600160a01b031681526020018a60600151600281111561199857611998614775565b81526020018681526020018a5f01518152602001856001600160a01b031681526020018a604001518152602001848414151581525090506119dc8160c00151612e79565b80156119eb5750806101200151155b15611a09576040516331539e4d60e11b815260040160405180910390fd5b611a1d858260800151836101200151612de6565b8051608001516001600160a01b0316611a75575f604089013515611a5d5785608001519050611a5b8260e001518360c00151838c604001353061311e565b505b611a6d818a60400135845f61229d565b975050611ab2565b611aaf611aaa611a8b60a08b0160808c0161483d565b3088604001518c60400135611a9f87612ffe565b3063687ffeb5613027565b6130ad565b96505b611ac7898883602001518461012001516131aa565b80610120015115611b725788515f90815261c35660205260409081902080546001600160a01b0319166001600160a01b03898116919091179091558a5191516308a1eee160e01b815260048101929092527f000000000000000000000000000000000000000000000000000000000000000016906308a1eee1906024015f604051808303815f87803b158015611b5b575f5ffd5b505af1158015611b6d573d5f5f3e3d5ffd5b505050505b50505050509250929050565b611b86614511565b5f611b918435612e79565b15611baf57604051631dacbd6f60e01b815260040160405180910390fd5b611be36001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685356120c6565b6001600160801b0319853581165f90815261c3576020908152604091829020825160c0810184528154608081811b9096168252600160801b900460ff1615159281019290925260018101546001600160a01b0380821694840194909452600160a01b908190046001600160401b0390811660608086019190915260029093015494851686850152930490921660a0820152929350611c8b918391611507918901908901614e5a565b5f611c9686356121d5565b9050611ca86080870160608801614e5a565b84604001906002811115611cbe57611cbe614775565b90816002811115611cd157611cd1614775565b9052505f6001611ce76080890160608a01614e5a565b6002811115611cf857611cf8614775565b1490505f81611d0b578360800151611d11565b83604001515b90505f88608001351315611da257611d2f81868a6080013530613260565b608088013560608701528115611d6157611d5b611d4b88614e75565b8586604001518b60400135613307565b60208701525b6080840151611d7d9084908a3590611d7881613502565b61356a565b50611d898585886135ed565b86606001818151611d9a9190614efa565b905250611e21565b5f82611dba57611db589608001356130f8565b611dc0565b87604001355b9050611dd6848a5f01358760800151843061311e565b508215611dff57611df9611de989614e75565b8687608001518c60400135613307565b60208801525b611e11611e0c838861364b565b612f95565b611e1a90614ff6565b6060880152505b505050509250929050565b336001600160a01b0316816001600160a01b0316847fe389f9a675d18cd405aef115ed4e77a5be06982c4202af0a99204b5c61d6565b85604001518660600151875f01518860200151606001515f5f604051611e8d9695949392919061500a565b60405180910390a4505050565b611ea48282610ecd565b156109a6575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6109a6816113f8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611f3d5761089c83613689565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f97575060408051601f3d908101601f19168201909252611f9491810190614fdf565b60015b611ffa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610815565b5f5160206157a45f395f51905f5281146120685760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610815565b5061089c838383613724565b61207c613748565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60405163100ca19960e21b8152600481018290525f906001600160a01b03841690634032866490602401602060405180830381865afa15801561210b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212f9190615048565b90506001600160a01b03811633148015906121b5575060405163e985e9c560e01b81526001600160a01b03828116600483015233602483015284169063e985e9c590604401602060405180830381865afa15801561218f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b39190614dc2565b155b156107375760405163570870ef60e11b8152336004820152602401610815565b604051631ee71b7960e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633dce36f290602401602060405180830381865afa15801561223a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107379190615048565b6122666145b3565b61c35454825160208401201461228f5760405163dab1e99360e01b815260040160405180910390fd5b5f61c35455610737826127fe565b6122a5614511565b8260800151816040019060028111156122c0576122c0614775565b908160028111156122d3576122d3614775565b905250604083015160608201526122e983613791565b8260a00151604001516001600160a01b0316856001600160a01b03160361232e57825160a0840151604081015161010086015161232893929190613307565b60208201525b5f6123408460a0015160800151613502565b90505f6123598551608001516001600160a01b03161590565b6123e5576101208501518290158015612387575060028660800151600281111561238557612385614775565b145b801561239657505f8660400151125b156123be576123b16123ab87604001516130f8565b84613109565b6123bb9082615063565b90505b80156123e3576123e08660e001518760c001518860a00151608001518461356a565b91505b505b6002856080015160028111156123fd576123fd614775565b14801561240d57505f8560400151125b15612456575f61242086604001516130f8565b905080831015612454576124528660e001518760c001518860a0015160800151868561244c9190615063565b3061311e565b505b505b60e085015160c086015160a087015160409081015160208901519151631a0a12a760e21b815260048101939093526001600160a01b03908116602484015260448301919091523060648301525f9216906368284a9c906084016020604051808303815f875af11580156124cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124ef9190614fdf565b90508560a00151608001516001600160a01b0316886001600160a01b03160361253657855160a0870151608081015161010089015161253093929190613307565b60208501525b6001600160a01b03851615612553576125518830878a6137b9565b505b6125608660200151612f95565b61256990614ff6565b845260408601515f126125d35760018660800151600281111561258e5761258e614775565b036125ab576125a98660a0015160800151876060015161364b565b505b6125c4611e0c6125ba88612f5d565b886060015161364b565b6125cd90614ff6565b60608501525b6125e686606001518760a00151866135ed565b846060018181516125f79190614efa565b9052506126038661383e565b61261557836020015160600151612621565b61262186858484613875565b60c085015250919695505050505050565b6060816040516020016126459190615076565b60408051601f198184030181529190528051602082012061c3555592915050565b61266e611402565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586120a93390565b60606126c883836040518060600160405280602781526020016157c4602791396138d9565b9392505050565b5f54610100900460ff166114485760405162461bcd60e51b815260040161081590615085565b5f54610100900460ff1661271b5760405162461bcd60e51b815260040161081590615085565b6097805460ff19169055565b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612764573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278891906150d0565b61073790600a6151d3565b5f6001600160401b038211156127fa5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610815565b5090565b6128066145b3565b818060200190518101906107379190615327565b612822614511565b82608001518160400190600281111561283d5761283d614775565b9081600281111561285057612850614775565b9052506040830151606082015261286683613791565b61287e835f01518460a0015187866101000151613307565b602082015260018360800151600281111561289b5761289b614775565b036128a9576128a983613943565b5f6128bb8460a0015160400151613502565b90506128d082602001518560400151836139a1565b60e084015160c085015160a0860151604090810151905163d03283dd60e01b815260048101929092526001600160a01b0390811660248301526044820184905261295f92169063d03283dd906064016020604051808303815f875af115801561293b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0c9190614fdf565b825260a0840151608001515f9061297590613502565b90505f8111801561298957505f8560400151135b156129ac576129aa8560e001518660c001518760a00151608001518461356a565b505b856001600160a01b038516156129dc576129d98660e001518760c001518860a00151608001518a8961311e565b90505b6002866080015160028111156129f4576129f4614775565b03612a0257612a0286613943565b5f612a1687606001518860a00151876135ed565b90508085606001818151612a2a9190614efa565b905250612a3681612e93565b612a409084615063565b9250612a4b8761383e565b612a5d57846020015160600151612a6a565b612a6a8786868587613a1e565b60c08601525092979650505050505050565b612a868282610ecd565b6109a657612a9381613a77565b612a9e836020613a89565b604051602001612aaf92919061542d565b60408051601f198184030181529082905262461bcd60e51b825261081591600401614ae2565b5f612ade61457f565b506001600160801b03198084165f90815261c35760209081526040808320815160c0810183528154608081811b9097168252600160801b900460ff1615159381019390935260018101546001600160a01b0380821693850193909352600160a01b908190046001600160401b0390811660608601526002909201549283169584019590955293900490921660a08301528465ffffffffffff8116808303612d9a5760408401516001600160a01b0316612bb6576040516316ade66960e11b81526001600160801b031983166004820152602401610815565b612be96001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687613c1e565b60405163149e351d60e11b8152600481018890526001600160a01b0387811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063293c6a3a906044016020604051808303815f875af1158015612c55573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c799190614fdf565b6040516397578c3f60e01b8152600481018290529095507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906397578c3f906024016020604051808303815f875af1158015612ce0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d049190615048565b9250612d168460400151845f19613cab565b612d268460800151845f19613cab565b60408481015160808601519151630a3cec7360e21b8152600481018890526001600160a01b03918216602482015291811660448301528416906328f3b1cc906064015f604051808303815f87803b158015612d7f575f5ffd5b505af1158015612d91573d5f5f3e3d5ffd5b50505050612ddd565b612dcd6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016886120c6565b50869450612dda876121d5565b92505b50509250925092565b82608001516001600160a01b031683604001516001600160a01b0316148015612e2057506001826002811115612e1e57612e1e614775565b145b15612e3e57604051632c6ff31160e01b815260040160405180910390fd5b808015612e5b57505f826002811115612e5957612e59614775565b145b1561089c576040516315f6bb1560e11b815260040160405180910390fd5b5f612e848260581c90565b63ffffffff1642101592915050565b5f5f8212156127fa5760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610815565b5f600282608001516002811115612efd57612efd614775565b148015612f1d5750815f015160400151612f1a8360400151613d6c565b10155b806107375750600182608001516002811115612f3b57612f3b614775565b14801561073757508160200151612f558360400151613d6c565b101592915050565b5f600182608001516002811115612f7657612f76614775565b14612f89578160a0015160800151610737565b5060a001516040015190565b5f6001600160ff1b038211156127fa5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610815565b60608160405160200161301191906154e1565b6040516020818303038152906040529050919050565b8251602084012061c3545560405163040a08f160e41b81526060906001600160a01b038916906340a08f109061306b908a908a908a908a908a908a906004016155ee565b5f604051808303815f875af1158015613086573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e6d9190810190614fae565b6130b5614511565b61c3555482516020840120146130de57604051633c6a6d9360e21b815260040160405180910390fd5b61c3555f9055818060200190518101906107379190615620565b5f5f8212156127fa57815f03610737565b5f81831061311757816126c8565b5090919050565b60405163799b52a560e11b8152600481018590526001600160a01b0384811660248301526044820184905282811660648301525f919087169063f336a54a906084016020604051808303815f875af115801561317c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131a09190614fdf565b9695505050505050565b801580156131cd57506001846060015160028111156131cb576131cb614775565b145b80156131dc57505f8460800151125b80156131fe5750600160208401515160028111156131fc576131fc614775565b145b80156132165750816132138560800151613d7a565b11155b8015613229575082606001518460800151125b1561325a5760808401516060840151604051630ef4228760e01b815260048101929092526024820152604401610815565b50505050565b604051630748bfbb60e11b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f00000000000000000000000000000000000000000000000000000000000000001690630e917f76906084016020604051808303815f875af11580156132dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133009190614fdf565b5050505050565b61332f6040805160808101909152805f81526020015f81526020015f81526020015f81525090565b604085015115611399575f84604001516001600160a01b0316846001600160a01b031614613363576002856040015161336b565b600185608001515b9150818382600281111561338157613381614775565b600281111561339257613392614775565b81525050506133c784307f000000000000000000000000000000000000000000000000000000000000000089604001516137b9565b50815160608601516040516321592eb560e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926342b25d6a92613421928992879290918d906004016156e8565b6060604051808303815f875af115801561343d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613461919061572d565b60608501526040840152602083015260018251600281111561348557613485614775565b036134c45781606001518311156134bf576060820151604051630ead9f8560e31b8152610815918591600401918252602082015260400190565b6134f9565b82826060015111156134f9576060820151604051636120c45f60e01b8152610815918591600401918252602082015260400190565b50949350505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015613546573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107379190614fdf565b60405163a4cc72a160e01b8152600481018490526001600160a01b038381166024830152604482018390525f919086169063a4cc72a1906064016020604051808303815f875af11580156135c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135e49190614fdf565b95945050505050565b5f5f6135fd84608001518661364b565b905060028360400151600281111561361757613617614775565b14801561362757505f8360600151135b801561363257505f81115b156136435761364081612f95565b91505b509392505050565b5f613676837f0000000000000000000000000000000000000000000000000000000000000000613d8e565b9050801561073757610737838383613dac565b6001600160a01b0381163b6136f65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610815565b5f5160206157a45f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61372d83613e44565b5f825111806137395750805b1561089c5761325a83836126a3565b60975460ff166114485760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610815565b5f81604001511315610a8457610a846137a982612f5d565b8260600151836040015130613260565b5f6001600160a01b0384166137e15760405163a26bef6960e01b815260040160405180910390fd5b6001600160a01b03831661380857604051637d0f1ea160e01b815260040160405180910390fd5b826001600160a01b0316846001600160a01b03161480613826575081155b15613832575080611399565b6135e485858585613e83565b5f61384c8260c00151613ec2565b15801561386357506138618260c00151612e79565b155b80156107375750505160400151151590565b5f5f84606001515f146138a8575f85606001511361389d57613898858585613edf565b6138aa565b613898858585613f94565b835b90506113958660a00151606001516001600160401b03166138d1875f015161165490614ff6565b839190613ffa565b60605f5f856001600160a01b0316856040516138f59190615758565b5f60405180830381855af49150503d805f811461392d576040519150601f19603f3d011682016040523d82523d5f602084013e613932565b606091505b50915091506131a0868383876140df565b5f81604001511215610a84575f61395982612f5d565b90506109a681836060015161399c84307f000000000000000000000000000000000000000000000000000000000000000061399789604001516130f8565b6137b9565b613dac565b6001835160028111156139b6576139b6614775565b1480156139c357505f8212155b1561089c575f6139d38284615063565b9050806139e7856020015161165490614ff6565b111561325a578084602001516139fc90614ff6565b6040516349cb41d960e01b815260048101929092526024820152604401610815565b5f5f85606001515f14613a52575f866060015113613a4657613a41868686614157565b613a54565b613a41868686866141bb565b835b9050610e708760a00151606001516001600160401b03166138d1885f0151612e93565b60606107376001600160a01b03831660145b60605f613a97836002615763565b613aa2906002614df1565b6001600160401b03811115613ab957613ab9614858565b6040519080825280601f01601f191660200182016040528015613ae3576020820181803683370190505b509050600360fc1b815f81518110613afd57613afd614e04565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613b2b57613b2b614e04565b60200101906001600160f81b03191690815f1a9053505f613b4d846002615763565b613b58906001614df1565b90505b6001811115613bcf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613b8c57613b8c614e04565b1a60f81b828281518110613ba257613ba2614e04565b60200101906001600160f81b03191690815f1a90535060049490941c93613bc88161577a565b9050613b5b565b5083156126c85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610815565b60405163e985e9c560e01b81526001600160a01b03828116600483015233602483015283169063e985e9c590604401602060405180830381865afa158015613c68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c8c9190614dc2565b6109a65760405163570870ef60e11b8152336004820152602401610815565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052613cfc848261429a565b61325a576040516001600160a01b03841660248201525f6044820152613d6290859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614337565b61325a8482614337565b5f5f82136127fa575f610737565b5f5f8212613d88575f610737565b505f0390565b5f613d9883613502565b9050801561073757610fd7833084846137b9565b604051638340f54960e01b81526001600160a01b0384811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690638340f549906064016020604051808303815f875af1158015613e20573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061325a9190614fdf565b613e4d81613689565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f6001600160a01b0384163014613eae57613ea96001600160a01b03861685858561440a565b613643565b6136436001600160a01b0386168484614442565b5f63ffffffff613ed28360581c90565b63ffffffff161492915050565b5f600184604001516002811115613ef857613ef8614775565b03613f54578215613f2b57613f2483613f1c86602001516020015161165490614ff6565b849190613ffa565b90506126c8565b613f24613f4385602001516020015161165490614ff6565b613f1c866020015160400151612e93565b5f613f66856020015160400151612e93565b9050831561139957613f8d84613f83876060015161165490614ff6565b6138d19084615063565b9150613643565b5f600184604001516002811115613fad57613fad614775565b03613fcb57613f2483613f1c86602001516020015161165490614ff6565b5f613fdd856020015160400151612e93565b905061364084613ff08760600151612e93565b6138d19084614df1565b5f80805f19858709858702925082811083820303915050805f03614031578382816140275761402761578f565b04925050506126c8565b8084116140785760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610815565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b6060831561414d5782515f03614146576001600160a01b0385163b6141465760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610815565b5081611399565b6113998383614472565b5f60018460400151600281111561417057614170614775565b0361419257613f248261418a866020015160400151612e93565b859190613ffa565b5f6141a885602001516020015161165490614ff6565b905061364083613ff087606001516130f8565b5f6001856040015160028111156141d4576141d4614775565b0361427757600160208601515160028111156141f2576141f2614775565b0361422f5761422861420b866020015160400151612e93565b61422087602001516020015161165490614ff6565b869190613ffa565b9050611399565b8261426d61424887602001516020015161165490614ff6565b614259886020015160400151612e93565b6142668960600151612e93565b9190613ffa565b6142289190614df1565b81836142868760600151612e93565b6142909190614df1565b6135e49190615063565b5f5f5f846001600160a01b0316846040516142b59190615758565b5f604051808303815f865af19150503d805f81146142ee576040519150601f19603f3d011682016040523d82523d5f602084013e6142f3565b606091505b509150915081801561431d57508051158061431d57508080602001905181019061431d9190614dc2565b80156135e45750505050506001600160a01b03163b151590565b5f61438b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661449c9092919063ffffffff16565b905080515f14806143ab5750808060200190518101906143ab9190614dc2565b61089c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610815565b6040516001600160a01b038085166024830152831660448201526064810182905261325a9085906323b872dd60e01b90608401613d2b565b6040516001600160a01b03831660248201526044810182905261089c90849063a9059cbb60e01b90606401613d2b565b8151156144825781518083602001fd5b8060405162461bcd60e51b81526004016108159190614ae2565b606061139984845f85855f5f866001600160a01b031685876040516144c19190615758565b5f6040518083038185875af1925050503d805f81146144fb576040519150601f19603f3d011682016040523d82523d5f602084013e614500565b606091505b5091509150610e70878383876140df565b6040518060e001604052805f815260200161454a6040805160808101909152805f81526020015f81526020015f81526020015f81525090565b81526020015f81526020015f81526020015f81526020015f600281111561457357614573614775565b81526020015f81525090565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516101e0810182525f61014082018181526101608301829052610180830182905260606101a084018190526101c0840183905290835260208301829052928201819052918101829052906080820190815260200161461261457f565b81525f60208201819052604082018190526060820181905260809091015290565b5f60208284031215614643575f5ffd5b81356001600160e01b0319811681146126c8575f5ffd5b6001600160801b031981168114610a84575f5ffd5b8015158114610a84575f5ffd5b5f5f6040838503121561468d575f5ffd5b82356146988161465a565b915060208301356146a88161466f565b809150509250929050565b6001600160a01b0381168114610a84575f5ffd5b5f5f604083850312156146d8575f5ffd5b8235915060208301356146a8816146b3565b5f602082840312156146fa575f5ffd5b5035919050565b5f60a08284031215614711575f5ffd5b50919050565b5f5f5f60e08486031215614729575f5ffd5b6147338585614701565b925060a08401356001600160401b0381111561474d575f5ffd5b61475986828701614701565b92505060c084013561476a816146b3565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600381106147a557634e487b7160e01b5f52602160045260245ffd5b9052565b8051825260208101516147c0602084018251614789565b6020810151604084015260408101516060840152606081015160808401525060408101516147f160a0840182614789565b50606081015160c0830152608081015160e083015260a0810151614819610100840182614789565b5060c001516101209190910152565b82815261016081016126c860208301846147a9565b5f6020828403121561484d575f5ffd5b81356126c8816146b3565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b038111828210171561488e5761488e614858565b60405290565b60405161014081016001600160401b038111828210171561488e5761488e614858565b60405160e081016001600160401b038111828210171561488e5761488e614858565b604051608081016001600160401b038111828210171561488e5761488e614858565b604051601f8201601f191681016001600160401b038111828210171561492357614923614858565b604052919050565b5f6001600160401b0382111561494357614943614858565b50601f01601f191660200190565b5f82601f830112614960575f5ffd5b813561497361496e8261492b565b6148fb565b818152846020838601011115614987575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156149b4575f5ffd5b82356149bf816146b3565b915060208301356001600160401b038111156149d9575f5ffd5b6149e585828601614951565b9150509250929050565b5f5f83601f8401126149ff575f5ffd5b5081356001600160401b03811115614a15575f5ffd5b602083019150836020828501011115610ec6575f5ffd5b5f5f5f5f5f5f5f60c0888a031215614a42575f5ffd5b8735614a4d816146b3565b96506020880135614a5d816146b3565b95506040880135614a6d816146b3565b9450606088013593506080880135925060a08801356001600160401b03811115614a95575f5ffd5b614aa18a828b016149ef565b989b979a50959850939692959293505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6126c86020830184614ab4565b5f5f60c08385031215614b05575f5ffd5b614b0f8484614701565b915060a08301356001600160401b03811115614b29575f5ffd5b6149e585828601614701565b5f5f60208385031215614b46575f5ffd5b82356001600160401b03811115614b5b575f5ffd5b8301601f81018513614b6b575f5ffd5b80356001600160401b03811115614b80575f5ffd5b8560208260051b8401011115614b94575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614bfb57603f19878603018452614be6858351614ab4565b94506020938401939190910190600101614bca565b50929695505050505050565b5f60208284031215614c17575f5ffd5b81356126c88161465a565b5f5f5f60608486031215614c34575f5ffd5b8335614c3f8161465a565b92506020840135614c4f816146b3565b9150604084013561476a816146b3565b5f5f5f5f60608587031215614c72575f5ffd5b8435614c7d816146b3565b93506020850135925060408501356001600160401b03811115614c9e575f5ffd5b614caa878288016149ef565b95989497509550505050565b60038110610a84575f5ffd5b5f60a0828403128015614cd3575f5ffd5b50614cdc61486c565b8235815260208084013590820152604080840135908201526060830135614d0281614cb6565b60608201526080928301359281019290925250919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b8051614dbd8161466f565b919050565b5f60208284031215614dd2575f5ffd5b81516126c88161466f565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561073757610737614ddd565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112614e2d575f5ffd5b8301803591506001600160401b03821115614e46575f5ffd5b602001915036819003821315610ec6575f5ffd5b5f60208284031215614e6a575f5ffd5b81356126c881614cb6565b5f60a08236031215614e85575f5ffd5b614e8d61486c565b8235614e98816146b3565b81526020830135614ea8816146b3565b60208201526040838101359082015260608301356001600160401b03811115614ecf575f5ffd5b614edb36828601614951565b6060830152506080830135614eef816146b3565b608082015292915050565b8181035f831280158383131683831282161715610fd757610fd7614ddd565b86815260018060a01b038616602082015284604082015260a060608201525f614f4560a0830186614ab4565b63ffffffff8416602086901b1760401b60808401529050610e70565b5f82601f830112614f70575f5ffd5b8151614f7e61496e8261492b565b818152846020838601011115614f92575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215614fbe575f5ffd5b81516001600160401b03811115614fd3575f5ffd5b61139984828501614f61565b5f60208284031215614fef575f5ffd5b5051919050565b5f600160ff1b8201613d8857613d88614ddd565b60c081016150188289614789565b866020830152856040830152846060830152836080830152610e7060a0830184614789565b8051614dbd816146b3565b5f60208284031215615058575f5ffd5b81516126c8816146b3565b8181038181111561073757610737614ddd565b610140810161073782846147a9565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156150e0575f5ffd5b815160ff811681146126c8575f5ffd5b6001815b600184111561512b5780850481111561510f5761510f614ddd565b600184161561511d57908102905b60019390931c9280026150f4565b935093915050565b5f8261514157506001610737565b8161514d57505f610737565b8160018114615163576002811461516d57615189565b6001915050610737565b60ff84111561517e5761517e614ddd565b50506001821b610737565b5060208310610133831016604e8410600b84101617156151ac575081810a610737565b6151b85f1984846150f0565b805f19048211156151cb576151cb614ddd565b029392505050565b5f6126c860ff841683615133565b5f60a082840312156151f1575f5ffd5b6151f961486c565b90508151615206816146b3565b81526020820151615216816146b3565b60208201526040828101519082015260608201516001600160401b0381111561523d575f5ffd5b61524984828501614f61565b6060830152506080820151614eef816146b3565b8051614dbd81614cb6565b80516001600160401b0381168114614dbd575f5ffd5b5f60c0828403121561528e575f5ffd5b60405160c081016001600160401b03811182821017156152b0576152b0614858565b806040525080915082516152c38161465a565b815260208301516152d38161466f565b602082015260408301516152e6816146b3565b60408201526152f760608401615268565b6060820152608083015161530a816146b3565b608082015261531b60a08401615268565b60a08201525092915050565b5f60208284031215615337575f5ffd5b81516001600160401b0381111561534c575f5ffd5b82016101e0818503121561535e575f5ffd5b615366614894565b81516001600160401b0381111561537b575f5ffd5b615387868285016151e1565b82525060208281015190820152604080830151908201526153aa6060830161503d565b60608201526153bb6080830161525d565b60808201526153cd8560a0840161527e565b60a082015261016082015160c08201526153ea610180830161503d565b60e08201526101a08201516101008201526154086101c08301614db2565b610120820152949350505050565b5f81518060208401855e5f93019283525090919050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f61545e6017830185615416565b7001034b99036b4b9b9b4b733903937b6329607d1b81526136406011820185615416565b60018060a01b03815116825260018060a01b036020820151166020830152604081015160408301525f606082015160a060608501526154c460a0850182614ab4565b6080938401516001600160a01b0316949093019390935250919050565b602081525f82516101e060208401526154fe610200840182615482565b90506020840151604084015260408401516060840152606084015161552e60808501826001600160a01b03169052565b50608084015161554160a0850182614789565b5060a08481015180516001600160801b03191660c08601526020810151151560e086015260408101516001600160a01b0390811661010087015260608201516001600160401b039081166101208801526080830151909116610140870152918101519091166101608501525060c084015161018084015260e08401516001600160a01b0381166101a0850152506101008401516101c08401526101208401518015156101e0850152613643565b6001600160a01b038781168252861660208201526040810185905260a0606082018190525f90614f4590830186614ab4565b5f81830361014081128015615633575f5ffd5b5061563c6148b7565b835181526080601f1983011215615651575f5ffd5b6156596148d9565b9150602084015161566981614cb6565b82526040848101516020808501919091526060808701519285019290925260808601519184019190915281018290526156a460a0850161525d565b604082015260c0840151606082015260e08401516080820181905291506156ce610100850161525d565b60a0820152610120939093015160c0840152509092915050565b6001600160a01b038681168252851660208201526157096040820185614789565b6001600160401b038316606082015260a060808201525f610e7060a0830184615482565b5f5f5f6060848603121561573f575f5ffd5b5050815160208301516040909301519094929350919050565b5f6126c88284615416565b808202811582820484141761073757610737614ddd565b5f8161578857615788614ddd565b505f190190565b634e487b7160e01b5f52601260045260245ffdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000c2462f03920d47fc5b9e2c5f0ba5d2ded058fd780000000000000000000000003f37c7d8e61c000085aac0515775b06a3412f36b000000000000000000000000daba83815404f5e1bc33f5885db7d96f51e127f500000000000000000000000096e9198c47c645632fc0b60319a718fb71db71b4