0 txs
3.9k calls
constructor
constructor()
functions
arbitrumSequencer
viewfunction arbitrumSequencer() view returns (address)
assetFee
viewfunction assetFee(address) view returns (uint24)
chainlinkOracle
viewfunction chainlinkOracle(address) view returns (address)
closeSwapRequests
viewfunction closeSwapRequests(bytes32) view returns (bytes32 key, uint256 longAmount, uint256 shortAmount, address longToken, address gmMarketToken, bool done)
eighteenDecimalAsset
viewfunction eighteenDecimalAsset(address) view returns (bool)
feeReceiver
viewfunction feeReceiver() view returns (address)
getDepositRecord
viewfunction getDepositRecord(bytes32 key) view returns (tuple)
getEstimatedMarketTokenPrice
viewfunction getEstimatedMarketTokenPrice(address longToken) view returns (int256, uint256, uint256, uint256)
getLatestData
viewfunction getLatestData(address _token) view returns (uint256)
getWithdrawRecord
viewfunction getWithdrawRecord(bytes32 key) view returns (tuple)
isManualRequest
viewfunction isManualRequest(bytes32) view returns (bool)
manualWithdraw
viewfunction manualWithdraw(address) view returns (bool)
nineDecimalAsset
viewfunction nineDecimalAsset(address) view returns (bool)
orderRefunded
viewfunction orderRefunded(bytes32) view returns (uint256 feesRefunded, uint256 amountRefunded, uint256 amountRepaid, uint256 gmTokensRefunded, uint256 depositOrWithdrawal, bool cancelled)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
RoleStore
viewfunction RoleStore() view returns (address)
sixDecimalAsset
viewfunction sixDecimalAsset(address) view returns (bool)
strategyAddresses
viewfunction strategyAddresses() view returns (address USDC, address WaterContract, address VodkaV2, address univ3Router, address dataStore, address oracle, address reader, address depositHandler, address withdrawalHandler)
tempPayableAddress
viewfunction tempPayableAddress() view returns (address)
univ3Fee
viewfunction univ3Fee() view returns (uint24)
usdcReceivedFromFallback
viewfunction usdcReceivedFromFallback(bytes32) view returns (uint256)
userRefunds
viewfunction userRefunds(address, uint256) view returns (bytes32)
userToRefund
viewfunction userToRefund(bytes32) view returns (address)
VodkaV2Swapper
viewfunction VodkaV2Swapper() view returns (address)
WETH
viewfunction WETH() view returns (address)
WrappedBTC
viewfunction WrappedBTC() view returns (address)
afterDepositCancellation
nonpayablefunction afterDepositCancellation(bytes32 key, tuple deposit, tuple eventData)
afterDepositExecution
nonpayablefunction afterDepositExecution(bytes32 key, tuple deposit, tuple eventData)
afterWithdrawalCancellation
nonpayablefunction afterWithdrawalCancellation(bytes32 key, tuple withdrawal, tuple eventData)
afterWithdrawalExecution
nonpayablefunction afterWithdrawalExecution(bytes32 key, tuple withdrawal, tuple eventData)
finalizeClosePosition
nonpayablefunction finalizeClosePosition(bytes32 key, uint256 _receivedUSDC)
fixDepositExecution
nonpayablefunction fixDepositExecution(bytes32 key, uint256 _gmAmountReceived)
fixWithdrawal
nonpayablefunction fixWithdrawal(bytes32 key, uint256 longAmountFromGMX, uint256 usdcAmountFromGMX)
fixWithdrawalManual
nonpayablefunction fixWithdrawalManual(bytes32 key, uint256 _receivedFromManualSwap)
initialize
nonpayablefunction initialize(address _USDC, address _WaterContract, address _VodkaV2)
refundExecutionFee
payablefunction refundExecutionFee(bytes32 key, tuple eventData) payable
renounceOwnership
nonpayablefunction renounceOwnership()
requestGMXV2Swap
payablefunction requestGMXV2Swap(bytes32 _key) payable
setArbitrumSequencer
nonpayablefunction setArbitrumSequencer(address _arbitrumSequencer)
setChainlinkOracleForAsset
nonpayablefunction setChainlinkOracleForAsset(address _token, address _oracle)
setManualWithdraw
nonpayablefunction setManualWithdraw(address _token, bool _manual)
setNineDecimalAsset
nonpayablefunction setNineDecimalAsset(address _asset, bool _nineDecimal)
setRoleStore
nonpayablefunction setRoleStore(address _roleStore)
setSixDecimalAsset
nonpayablefunction setSixDecimalAsset(address _asset, bool _sixDecimal)
setStrategyParams
nonpayablefunction setStrategyParams(address _univ3Router, address _dataStore, address _oracle, address _reader, address _depositHandler, address _withdrawalHandler)
setUniv3Fee
nonpayablefunction setUniv3Fee(uint24 _univ3Fee, address _asset)
takeAll
nonpayablefunction takeAll(address _inputAsset)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
ChainlinkOracleSet
event ChainlinkOracleSet(address token, address oracle)
CloseFinalized
event CloseFinalized(bytes32 key, uint256 totalAmount)
FeeReceiverSet
event FeeReceiverSet(address receiver)
Initialized
event Initialized(uint8 version)
KeysPendingSwap
event KeysPendingSwap(bytes32 key, uint256 longAmount, uint256 shortAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RepayDepositFailure
event RepayDepositFailure(address user, string reason, bytes data)
StrategyParamsSet
event StrategyParamsSet(address univ3Router, address dataStore, address oracle, address reader, address depositHandler, address withdrawalHandler)
SwapRequested
event SwapRequested(bytes32 key, uint256 amount)
Unpaused
event Unpaused(address account)
errors
No errors.
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b615e8480620000f36000396000f3fe6080604052600436106102325760003560e01c80630269628c1461023e5780630fa63fe41461027b578063100e196d146102ae5780631b0079221461035957806321d41b321461037b5780632f2708a2146103bc5780633201ab4d146103dc578063373142e4146103fc578063395aef8e146104385780633a2cb99f1461047b5780633c372240146104bb578063438ee9a5146104ce57806344815229146104ee578063542059431461050e5780635c6329f41461052e5780635c975abb1461054e5780635f82eba814610566578063715018a61461058657806372ccfa601461059b578063753672d5146105bb5780637db2bd3e146105dc5780638da5cb5b1461060d57806394fce92b146106225780639f0938711461064f5780639f17af99146106d1578063a5ab05ab146106f1578063a5efb24d14610711578063a7c49f5a14610731578063a8f098d214610768578063ad5c464814610789578063b2fd9495146107aa578063b3f00674146107bd578063b63d5354146107de578063c0c53b8b146107ff578063c4b2b9801461081f578063c9888ec11461083f578063c9ac221a1461085f578063cc6624661461087f578063ceb0c4451461089f578063e88c35611461092d578063ed13e422146109cc578063f2f201dc146109fd578063f2fde38b14610a1d578063f36e2ea914610a3d578063f5faa89214610a5e578063fb4f120f14610a8f578063fd77d17514610aaf578063ff06f7b214610acf578063ffbde15e14610aef57600080fd5b3661023957005b600080fd5b34801561024a57600080fd5b506101085461026290600160a01b900462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b34801561028757600080fd5b50610262610296366004613aaf565b61010d6020526000908152604090205462ffffff1681565b3480156102ba57600080fd5b5060c95460ca5460cb5460cc5460cd5460ce5460cf5460d05460d1546102ff986001600160a01b03908116988116978116968116958116948116938116928116911689565b604080516001600160a01b039a8b168152988a1660208a01529689169688019690965293871660608701529186166080860152851660a0850152841660c0840152831660e083015290911661010082015261012001610272565b34801561036557600080fd5b50610379610374366004613aaf565b610b20565b005b34801561038757600080fd5b506103ac610396366004613aaf565b6101126020526000908152604090205460ff1681565b6040519015158152602001610272565b3480156103c857600080fd5b506103796103d7366004613aee565b610b4b565b3480156103e857600080fd5b506103796103f7366004613b27565b610b7f565b34801561040857600080fd5b5061042a610417366004613b49565b61010f6020526000908152604090205481565b604051908152602001610272565b34801561044457600080fd5b5061046e610453366004613aaf565b60d4602052600090815260409020546001600160a01b031681565b6040516102729190613b62565b34801561048757600080fd5b5061049b610496366004613aaf565b610daf565b604080519485526020850193909352918301526060820152608001610272565b6103796104c9366004614fcd565b611038565b3480156104da57600080fd5b506103796104e9366004613b27565b6112db565b3480156104fa57600080fd5b50610379610509366004613b27565b6114dc565b34801561051a57600080fd5b50610379610529366004613aee565b611581565b34801561053a57600080fd5b50610379610549366004615013565b6115b5565b34801561055a57600080fd5b5060975460ff166103ac565b34801561057257600080fd5b5060d55461046e906001600160a01b031681565b34801561059257600080fd5b506103796119ad565b3480156105a757600080fd5b506103796105b636600461510f565b6119c1565b3480156105c757600080fd5b506101145461046e906001600160a01b031681565b3480156105e857600080fd5b506103ac6105f7366004613aaf565b6101106020526000908152604090205460ff1681565b34801561061957600080fd5b5061046e611b82565b34801561062e57600080fd5b5061064261063d366004613b49565b611b91565b604051610272919061527a565b34801561065b57600080fd5b506106a261066a366004613b49565b60d260205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff1686565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c001610272565b3480156106dd57600080fd5b506103796106ec366004613aee565b611c81565b3480156106fd57600080fd5b5061037961070c366004613aaf565b611cb5565b34801561071d57600080fd5b5061037961072c36600461531b565b611da6565b34801561073d57600080fd5b5061046e61074c366004613b49565b610115602052600090815260409020546001600160a01b031681565b34801561077457600080fd5b5061010c5461046e906001600160a01b031681565b34801561079557600080fd5b506101085461046e906001600160a01b031681565b6103796107b8366004613b49565b611e4a565b3480156107c957600080fd5b5061010b5461046e906001600160a01b031681565b3480156107ea57600080fd5b506101095461046e906001600160a01b031681565b34801561080b57600080fd5b5061037961081a366004615351565b61212b565b34801561082b57600080fd5b5061037961083a36600461539c565b612292565b34801561084b57600080fd5b5061042a61085a366004615517565b6126cf565b34801561086b57600080fd5b5061037961087a36600461510f565b612700565b34801561088b57600080fd5b5061037961089a366004615543565b612e28565b3480156108ab57600080fd5b506108bf6108ba366004613b49565b612ec3565b604051610272919081516001600160a01b0390811682526020808401519083015260408084015190830152606080840151908301526080808401519083015260a08381015115159083015260c08084015161ffff169083015260e09283015116918101919091526101000190565b34801561093957600080fd5b50610991610948366004613b49565b61011360205260009081526040902080546001820154600283015460038401546004909401549293919290916001600160a01b039081169190811690600160a01b900460ff1686565b604080519687526020870195909552938501929092526001600160a01b039081166060850152166080830152151560a082015260c001610272565b3480156109d857600080fd5b506103ac6109e7366004613b49565b6101116020526000908152604090205460ff1681565b348015610a0957600080fd5b5061042a610a18366004613aaf565b612f6e565b348015610a2957600080fd5b50610379610a38366004613aaf565b613234565b348015610a4957600080fd5b5061010a5461046e906001600160a01b031681565b348015610a6a57600080fd5b506103ac610a79366004613aaf565b61010e6020526000908152604090205460ff1681565b348015610a9b57600080fd5b50610379610aaa366004613aaf565b6132aa565b348015610abb57600080fd5b50610379610aca36600461539c565b6132d5565b348015610adb57600080fd5b50610379610aea366004615561565b613413565b348015610afb57600080fd5b506103ac610b0a366004613aaf565b6101166020526000908152604090205460ff1681565b610b286134d6565b61010a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b536134d6565b6001600160a01b0391909116600090815261011060205260409020805460ff1916911515919091179055565b610b87613535565b610114546001600160a01b03163314610bd55760405162461bcd60e51b815260206004820152600b60248201526a2737ba1039bbb0b83832b960a91b60448201526064015b60405180910390fd5b6000610be083611b91565b600084815261011360205260409020600481015491925090600160a01b900460ff16610c395760405162461bcd60e51b81526020600482015260086024820152674e6f7420646f6e6560c01b6044820152606401610bcc565b6000838260020154610c4b91906155f9565b60cb5460c954919250610c6b916001600160a01b0390811691168361358e565b826101000151610cef5760cb5460405163139fb1fb60e21b81526001600160a01b0390911690634e7ec7ec90610ca7908890859060040161560c565b6020604051808303816000875af1158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea9190615625565b610d64565b60cb5460405163382169db60e11b81526001600160a01b0390911690637042d3b690610d21908890859060040161560c565b6020604051808303816000875af1158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615625565b507f743cc7d5567c7f27952e3de23f56909c0ba91262027a172ce4886727fcfe250b8582604051610d9692919061560c565b60405180910390a1505050610dab6001606555565b5050565b60cb54604051639c735fbb60e01b815260009182918291829182916001600160a01b031690639c735fbb90610de8908990600401613b62565b608060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e29919061564d565b90506000604051806080016040528083604001516001600160a01b0316815260200183606001516001600160a01b0316815260200183600001516001600160a01b0316815260200183602001516001600160a01b0316815250905060006040518060400160405280610e9e8560600151612f6e565b8152602001610eb08560600151612f6e565b815250905060006040518060400160405280610ecb8b612f6e565b8152602001610ed98b612f6e565b90526040805180820190915260c9549192506000918190610f02906001600160a01b0316612f6e565b815260c954602090910190610f1f906001600160a01b0316612f6e565b905260cf5460cd546040519293506000926001600160a01b039283169263095ce6c59216908890889088908890610f88906020016020808252601b908201527a4d41585f504e4c5f464143544f525f464f525f4445504f5349545360281b604082015260600190565b6040516020818303038152906040528051906020012060006040518863ffffffff1660e01b8152600401610fc297969594939291906156d1565b61018060405180830381865afa158015610fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611004919061576c565b50905061101664e8d4a5100082615836565b602094850151938501519290940151939b929a50909850919650945050505050565b610109546040516001600160a01b039091169063ac4ab3fb90339061105f90602001615864565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b8152600401611092929190615888565b602060405180830381865afa1580156110af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d39190615625565b6110ef5760405162461bcd60e51b8152600401610bcc906158a1565b60006110fa83612ec3565b9050600061110784611b91565b82519091506001600160a01b03166112795760cb54604051631f6f85f960e11b8152600481018690526001600160a01b0390911690633edf0bf290602401602060405180830381865afa158015611162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111869190615625565b1561121e5760cb546040805163aced166160e01b815290516001600160a01b039092169163aced1661916004808201926020929091908290030181865afa1580156111d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f991906158ca565b60d580546001600160a01b0319166001600160a01b039290921691909117905561129b565b806101000151156112535761014081015160d580546001600160a01b0319166001600160a01b0390921691909117905561129b565b805160d580546001600160a01b0319166001600160a01b0390921691909117905561129b565b815160d580546001600160a01b0319166001600160a01b039092169190911790555b60d5546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156112d4573d6000803e3d6000fd5b5050505050565b6112e36134d6565b60006112ee83611b91565b6000848152610111602052604090205490915060ff166113505760405162461bcd60e51b815260206004820152601d60248201527f4d616e75616c2066756c66696c6c20646f6573206e6f742065786973740000006044820152606401610bcc565b600083815261011160205260409020805460ff1916905560c95461137f906001600160a01b03163330856135eb565b600083815261010f60205260408120549061139a84836155f9565b60cb5460c9549192506113ba916001600160a01b0390811691168361358e565b825160d580546001600160a01b0319166001600160a01b0390921691909117905561010083015161145f5760cb5460405163139fb1fb60e21b81526001600160a01b0390911690634e7ec7ec90611417908890859060040161560c565b6020604051808303816000875af1158015611436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145a9190615625565b6114d4565b60cb5460405163382169db60e11b81526001600160a01b0390911690637042d3b690611491908890859060040161560c565b6020604051808303816000875af11580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190615625565b505050505050565b6114e46134d6565b60006114ef83612ec3565b805160d580546001600160a01b0319166001600160a01b0392831617905560cb546040516310c5504160e31b8152929350169063862a820890611538908690869060040161560c565b6020604051808303816000875af1158015611557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157b9190615625565b50505050565b6115896134d6565b6001600160a01b0391909116600090815261011660205260409020805460ff1916911515919091179055565b6115bd6134d6565b60006115c884611b91565b61012081015160cc5460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b3926116039216908790600401615888565b6020604051808303816000875af1158015611622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116469190615625565b50610108546101208201516000916001600160a01b0391821691161461176d576040805160a0810182526101208401516001600160a01b03808216600090815261010d602052848120546101085483168083529582205460c954929686956116c295909462ffffff948516949293909216911660c087016158e7565b60408051601f19818403018152918152908252306020830152428282015260608201889052600060809092019190915260cc54905163c04b8d5960e01b81529192506001600160a01b03169063c04b8d5990611722908490600401615984565b6020604051808303816000875af1158015611741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176591906159dc565b91505061185e565b6040805161010081018252610120840180516001600160a01b03908116835260c9548116602080850191909152915116600090815261010d9091528281205462ffffff1692820192909252306060820152608081016117ce4261012c6155f9565b8152602081018790526000604080830182905260609092015260cc54905163414bf38960e01b81529192506001600160a01b03169063414bf389906118179084906004016159f5565b6020604051808303816000875af1158015611836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185a91906159dc565b9150505b600061186a82856155f9565b60cb5460c95491925061188a916001600160a01b0390811691168361358e565b825160d580546001600160a01b0319166001600160a01b0390921691909117905561010083015161192f5760cb5460405163139fb1fb60e21b81526001600160a01b0390911690634e7ec7ec906118e7908990859060040161560c565b6020604051808303816000875af1158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a9190615625565b6119a4565b60cb5460405163382169db60e11b81526001600160a01b0390911690637042d3b690611961908990859060040161560c565b6020604051808303816000875af1158015611980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a49190615625565b50505050505050565b6119b56134d6565b6119bf6000613623565b565b60cb548251516001600160a01b039081169116146119f15760405162461bcd60e51b8152600401610bcc90615a5e565b610109546040516001600160a01b039091169063ac4ab3fb903390611a1890602001615864565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b8152600401611a4b929190615888565b602060405180830381865afa158015611a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8c9190615625565b611aa85760405162461bcd60e51b8152600401610bcc906158a1565b6000611ab384611b91565b600085815260d260205260409081902060cb5491516365f1680b60e11b815260048101889052929350916001600160a01b039091169063cbe2d01690602401600060405180830381600087803b158015611b0c57600080fd5b505af1158015611b20573d6000803e3d6000fd5b50505060209485015160a0015182555081840151600382015560058101805460ff19166001908117909155600490910181905590516001600160a01b0316600090815260d3845260408120805492830181558152929092209091019190915550565b6033546001600160a01b031690565b611c0d60405180610160016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b60cb5460405163191618a160e21b8152600481018490526001600160a01b039091169063645862849060240161016060405180830381865afa158015611c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7b9190615a8c565b92915050565b611c896134d6565b6001600160a01b0391909116600090815261010e60205260409020805460ff1916911515919091179055565b611cbd6134d6565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190611cec903090600401613b62565b602060405180830381865afa158015611d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2d91906159dc565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb90611d5e9033908590600401615888565b6020604051808303816000875af1158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190615625565b505050565b611dae6134d6565b6001600160a01b038116611dd45760405162461bcd60e51b8152600401610bcc90615b3c565b6113888262ffffff161115611e1a5760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b6044820152606401610bcc565b6001600160a01b0316600090815261010d60205260409020805462ffffff191662ffffff92909216919091179055565b611e52613535565b60cb546040805163aced166160e01b815290516001600160a01b039092169163aced1661916004808201926020929091908290030181865afa158015611e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec091906158ca565b6001600160a01b0316336001600160a01b031614611f0d5760405162461bcd60e51b815260206004820152600a6024820152692737ba1035b2b2b832b960b11b6044820152606401610bcc565b60008181526101136020526040902060038101546001600160a01b0316611f685760405162461bcd60e51b815260206004820152600f60248201526e139bc81cddd85c081c995c5d595cdd608a1b6044820152606401610bcc565b6004810154600160a01b900460ff1615611fb35760405162461bcd60e51b815260206004820152600c60248201526b416c726561647920646f6e6560a01b6044820152606401610bcc565b600381015460048083018054600185015460ff60a01b198216600160a01b179092556101145460405163095ea7b360e01b81526001600160a01b039586169592831694869363095ea7b39361200d93911691869101615888565b6020604051808303816000875af115801561202c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120509190615625565b506101145460008681526101156020526040908190205490516341c70b0160e11b81526001600160a01b03868116600483015285811660248301526044820189905260648201859052918216608482015291169063838e160290349060a4016000604051808303818588803b1580156120c857600080fd5b505af11580156120dc573d6000803e3d6000fd5b50505050507f45579223fec6cb578b03c6d062e4b45df7b15aa5699bc5bf65d791a986c2dd95858260405161211292919061560c565b60405180910390a1505050506121286001606555565b50565b600054610100900460ff161580801561214b5750600054600160ff909116105b8061216c575061215a30613675565b15801561216c575060005460ff166001145b6121cf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bcc565b6000805460ff1916600117905580156121f2576000805461ff0019166101001790555b60cb80546001600160a01b038085166001600160a01b03199283161790925560ca805486841690831617905560c9805492871692909116919091179055612237613684565b61223f6136b3565b6122476136e2565b801561157b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b60cb548251516001600160a01b039081169116146122c25760405162461bcd60e51b8152600401610bcc90615a5e565b610109546040516001600160a01b039091169063ac4ab3fb9033906122e990602001615864565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b815260040161231c929190615888565b602060405180830381865afa158015612339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235d9190615625565b6123795760405162461bcd60e51b8152600401610bcc906158a1565b600061238484612ec3565b60cb5460e0820151604051639c735fbb60e01b81529293506000926001600160a01b0390921691639c735fbb916123bd91600401613b62565b608060405180830381865afa1580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe919061564d565b600086815260d2602090815260409182902060cb548451938701519287015194955090936001600160a01b0390911692632eef441792909161244091906155f9565b6040518363ffffffff1660e01b815260040161245d929190615888565b600060405180830381600087803b15801561247757600080fd5b505af115801561248b573d6000803e3d6000fd5b505060c9548551602087015160405163a9059cbb60e01b81526001600160a01b03909316945063a9059cbb93506124c492600401615888565b6020604051808303816000875af19250505080156124ff575060408051601f3d908101601f191682019092526124fc91810190615625565b60015b6125995761250b615b62565b806308c379a00361258d575061251f615b7e565b8061252a575061258f565b61254d612535611b82565b602086015160c9546001600160a01b0316919061358e565b83516040517f82c0c6a1ad712f85d6b95668f665366b6764e416954dd8e158cba05305b13f329161257f918490615c07565b60405180910390a1506125df565b505b3d6000803e3d6000fd5b806125dd5760405162461bcd60e51b81526020600482015260146024820152731554d110c81d1c985b9cd9995c8819985a5b195960621b6044820152606401610bcc565b505b60ca54604084015160c954612602926001600160a01b0391821692911690613711565b60ca54604080850151905163015cb0a560e01b81526001600160a01b039092169163015cb0a59161263791819060040161560c565b600060405180830381600087803b15801561265157600080fd5b505af1158015612665573d6000803e3d6000fd5b50505060209586015160a0015182555082850151600180830191909155604080850151600284015560058301805460ff1916831790556000600490930183905593516001600160a01b0316825260d386529281208054938401815581529390932001929092555050565b60d360205281600052604060002081815481106126eb57600080fd5b90600052602060002001600091509150505481565b60cb548251516001600160a01b039081169116146127305760405162461bcd60e51b8152600401610bcc90615a5e565b610109546040516001600160a01b039091169063ac4ab3fb90339061275790602001615864565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b815260040161278a929190615888565b602060405180830381865afa1580156127a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cb9190615625565b6127e75760405162461bcd60e51b8152600401610bcc906158a1565b60006127f284611b91565b60cb54610120820151604051639c735fbb60e01b81529293506000926001600160a01b0390921691639c735fbb9161282c91600401613b62565b608060405180830381865afa158015612849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286d919061564d565b6101208301516001600160a01b0316600090815261010e602052604090205490915060ff16612cb15760008360200151600001516000815181106128b3576128b3615c45565b602002602001015160200151905060008460200151600001516001815181106128de576128de615c45565b602090810291909101810151015161012085015160cc5460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b3926129279216908690600401615888565b6020604051808303816000875af1158015612946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296a9190615625565b50610108546101208501516000916001600160a01b03918216911614612a91576040805160a0810182526101208701516001600160a01b03808216600090815261010d602052848120546101085483168083529582205460c954929686956129e695909462ffffff948516949293909216911660c087016158e7565b60408051601f19818403018152918152908252306020830152428282015260608201879052600060809092019190915260cc54905163c04b8d5960e01b81529192506001600160a01b03169063c04b8d5990612a46908490600401615984565b6020604051808303816000875af1158015612a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8991906159dc565b915050612b82565b6040805161010081018252610120870180516001600160a01b03908116835260c9548116602080850191909152915116600090815261010d9091528281205462ffffff169282019290925230606082015260808101612af24261012c6155f9565b8152602081018690526000604080830182905260609092015260cc54905163414bf38960e01b81529192506001600160a01b03169063414bf38990612b3b9084906004016159f5565b6020604051808303816000875af1158015612b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7e91906159dc565b9150505b6000612b8e82846155f9565b60cb5460c954919250612bae916001600160a01b0390811691168361358e565b856101000151612c325760cb5460405163139fb1fb60e21b81526001600160a01b0390911690634e7ec7ec90612bea908c90859060040161560c565b6020604051808303816000875af1158015612c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2d9190615625565b612ca7565b60cb5460405163382169db60e11b81526001600160a01b0390911690637042d3b690612c64908c90859060040161560c565b6020604051808303816000875af1158015612c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca79190615625565b50505050506112d4565b60008581526101136020908152604082208781559085015151805191929091612cdc57612cdc615c45565b6020026020010151602001518160010181905550836020015160000151600181518110612d0b57612d0b615c45565b60209081029190910181015181015160028301556101208401516003830180546001600160a01b039283166001600160a01b031990911617905560408401516004840180546001600160a81b031916919092161790558401515180516001908110612d7857612d78615c45565b602090810291909101810151810151600088815261010f835260408082209290925561011183528181208054600160ff199091168117909155865161011585529183902080546001600160a01b0319166001600160a01b0390931692909217909155830154600284015482518a815293840191909152908201527f4401575353e798e4b9855d5f81bb264f1115f08129e335d35c0db45f16ad6a83906060015b60405180910390a1505050505050565b612e306134d6565b6001600160a01b038216612e565760405162461bcd60e51b8152600401610bcc90615b3c565b6001600160a01b03828116600090815260d460205260409081902080546001600160a01b03191692841692909217909155517fafdfd513be71799b20ea13372c27dacb2e35615c8031a10bb6970412890ef0d390612eb79084908490615c5b565b60405180910390a15050565b6040805161010081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e082015260cb54915163546fcf3960e01b81526004810184905290916001600160a01b03169063546fcf399060240161010060405180830381865afa158015612f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7b9190615c87565b600080600061010a60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612feb9190615d46565b5091945092505082159050806130375760405162461bcd60e51b815260206004820152601160248201527029b2b8bab2b731b2b91034b9903237bbb760791b6044820152606401610bcc565b60006130438342615d96565b9050610e10811161308e5760405162461bcd60e51b815260206004820152601560248201527423b930b1b2903832b934b7b2103737ba1037bb32b960591b6044820152606401610bcc565b6001600160a01b03808716600090815260d46020526040808220548151633fabe5a360e21b815291519293169163feaf968c9160048082019260a0929091908290030181865afa1580156130e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310a9190615d46565b5050506001600160a01b03891660009081526101106020526040812054919350915060ff161561315757613143826402540be400615da9565b61315090620f4240615da9565b9050613229565b61010c546001600160a01b03908116908916036131895761317d826402540be400615da9565b61315090612710615da9565b6001600160a01b0388166000908152610112602052604090205460ff16156131cc57662386f26fc100006131c2836402540be400615da9565b6131509190615dc0565b6001600160a01b0388166000908152610116602052604090205460ff1615613209576131fd826402540be400615da9565b613150906103e8615da9565b620f424061321c836402540be400615da9565b6132269190615dc0565b90505b979650505050505050565b61323c6134d6565b6001600160a01b0381166132a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bcc565b61212881613623565b6132b26134d6565b61010980546001600160a01b0319166001600160a01b0392909216919091179055565b60cb548251516001600160a01b039081169116146133055760405162461bcd60e51b8152600401610bcc90615a5e565b610109546040516001600160a01b039091169063ac4ab3fb90339061332c90602001615864565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b815260040161335f929190615888565b602060405180830381865afa15801561337c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a09190615625565b6133bc5760405162461bcd60e51b8152600401610bcc906158a1565b60cb5460208201515180516001600160a01b039092169163862a82089186916000906133ea576133ea615c45565b6020026020010151602001516040518363ffffffff1660e01b815260040161153892919061560c565b61341b6134d6565b60cc80546001600160a01b038881166001600160a01b0319928316811790935560cd8054898316908416811790915560ce8054898416908516811790915560cf8054898516908616811790915560d08054898616908716811790915560d18054958916959096168517909555604080519687526020870193909352918501526060840152608083019190915260a08201527f03f1afd7ce30865f51a6e0b71bd812eb2a48c45e187b710c8e67eaaa53c15c579060c001612e18565b336134df611b82565b6001600160a01b0316146119bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bcc565b6002606554036135875760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bcc565b6002606555565b611da18363a9059cbb60e01b84846040516024016135ad929190615888565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526137ad565b6001606555565b6040516001600160a01b038085166024830152831660448201526064810182905261157b9085906323b872dd60e01b906084016135ad565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03163b151590565b600054610100900460ff166136ab5760405162461bcd60e51b8152600401610bcc90615dd4565b6119bf613882565b600054610100900460ff166136da5760405162461bcd60e51b8152600401610bcc90615dd4565b6119bf6138b2565b600054610100900460ff166137095760405162461bcd60e51b8152600401610bcc90615dd4565b6119bf6138e5565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e906137429030908790600401615c5b565b602060405180830381865afa15801561375f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061378391906159dc565b905061157b8463095ea7b360e01b8561379c86866155f9565b6040516024016135ad929190615888565b6000613802826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661390c9092919063ffffffff16565b90508051600014806138235750808060200190518101906138239190615625565b611da15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610bcc565b600054610100900460ff166138a95760405162461bcd60e51b8152600401610bcc90615dd4565b6119bf33613623565b600054610100900460ff166138d95760405162461bcd60e51b8152600401610bcc90615dd4565b6097805460ff19169055565b600054610100900460ff166135e45760405162461bcd60e51b8152600401610bcc90615dd4565b606061391b8484600085613923565b949350505050565b6060824710156139845760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610bcc565b600080866001600160a01b031685876040516139a09190615e1f565b60006040518083038185875af1925050503d80600081146139dd576040519150601f19603f3d011682016040523d82523d6000602084013e6139e2565b606091505b50915091506132298783838760608315613a5b578251600003613a5457613a0885613675565b613a545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bcc565b508161391b565b61391b8383815115613a705781518083602001fd5b8060405162461bcd60e51b8152600401610bcc9190615e3b565b6001600160a01b038116811461212857600080fd5b8035613aaa81613a8a565b919050565b600060208284031215613ac157600080fd5b8135613acc81613a8a565b9392505050565b6001600160a01b03169052565b801515811461212857600080fd5b60008060408385031215613b0157600080fd5b8235613b0c81613a8a565b91506020830135613b1c81613ae0565b809150509250929050565b60008060408385031215613b3a57600080fd5b50508035926020909101359150565b600060208284031215613b5b57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604081016001600160401b0381118282101715613bab57613bab613b76565b60405250565b606081016001600160401b0381118282101715613bab57613bab613b76565b601f8201601f191681016001600160401b0381118282101715613bf557613bf5613b76565b6040525050565b60405160e081016001600160401b0381118282101715613c1e57613c1e613b76565b60405290565b60405161012081016001600160401b0381118282101715613c1e57613c1e613b76565b60405161016081016001600160401b0381118282101715613c1e57613c1e613b76565b60006001600160401b03821115613c8357613c83613b76565b5060051b60200190565b600082601f830112613c9e57600080fd5b81356001600160401b03811115613cb757613cb7613b76565b604051613cce601f8301601f191660200182613bd0565b818152846020838601011115613ce357600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112613d1157600080fd5b81356020613d1e82613c6a565b604051613d2b8282613bd0565b83815260059390931b8501820192828101915086841115613d4b57600080fd5b8286015b84811015613d6f578035613d6281613a8a565b8352918301918301613d4f565b509695505050505050565b600082601f830112613d8b57600080fd5b81356020613d9882613c6a565b60408051613da68382613bd0565b84815260059490941b8601830193838101925087851115613dc657600080fd5b8387015b85811015613e645780356001600160401b0380821115613dea5760008081fd5b90890190818b03601f1901851315613e025760008081fd5b8451613e0d81613b8c565b8783013582811115613e1f5760008081fd5b613e2d8d8a83870101613c8d565b8252508583013582811115613e425760008081fd5b613e508d8a83870101613d00565b828a01525086525050928401928401613dca565b50979650505050505050565b60006040808385031215613e8357600080fd5b8051613e8e81613b8c565b91508183356001600160401b0380821115613ea857600080fd5b818601915086601f830112613ebc57600080fd5b81356020613ec982613c6a565b8651613ed58282613bd0565b83815260059390931b850182019282810191508a841115613ef557600080fd5b8286015b84811015613f7757803586811115613f115760008081fd5b8701808d03601f19018a1315613f275760008081fd5b8951613f3281613b8c565b8582013588811115613f445760008081fd5b613f528f8883860101613c8d565b825250908a013590613f6382613a8a565b808601919091528352918301918301613ef9565b5086525087810135955082861115613f8e57600080fd5b613f9a89878a01613d7a565b8186015250505050505092915050565b600082601f830112613fbb57600080fd5b81356020613fc882613c6a565b60408051613fd68382613bd0565b848152600594851b8701840194848201935088861115613ff557600080fd5b8488015b868110156140f45780356001600160401b03808211156140195760008081fd5b908a0190818c03601f19018613156140315760008081fd5b855161403c81613b8c565b888301358281111561404e5760008081fd5b61405c8e8b83870101613c8d565b82525086830135828111156140715760008081fd5b8084019350508c603f84011261408957600091508182fd5b88830135915061409882613c6a565b87516140a48282613bd0565b83815292861b84018801928a810191508e8411156140c25760008081fd5b938801935b838510156140e05784358252938a0193908a01906140c7565b828b01525087525050938501938501613ff9565b509098975050505050505050565b6000604080838503121561411557600080fd5b805161412081613b8c565b91508183356001600160401b038082111561413a57600080fd5b818601915086601f83011261414e57600080fd5b8135602061415b82613c6a565b86516141678282613bd0565b83815260059390931b850182019282810191508a84111561418757600080fd5b8286015b848110156141fc578035868111156141a35760008081fd5b8701808d03601f19018a13156141b95760008081fd5b89516141c481613b8c565b85820135888111156141d65760008081fd5b6141e48f8883860101613c8d565b825250908a013585820152835291830191830161418b565b508652508781013595508286111561421357600080fd5b613f9a89878a01613faa565b600082601f83011261423057600080fd5b8135602061423d82613c6a565b6040805161424b8382613bd0565b848152600594851b870184019484820193508886111561426a57600080fd5b8488015b868110156140f45780356001600160401b038082111561428e5760008081fd5b908a0190818c03601f19018613156142a65760008081fd5b85516142b181613b8c565b88830135828111156142c35760008081fd5b6142d18e8b83870101613c8d565b82525086830135828111156142e65760008081fd5b8084019350508c603f8401126142fe57600091508182fd5b88830135915061430d82613c6a565b87516143198282613bd0565b83815292861b84018801928a810191508e8411156143375760008081fd5b938801935b838510156143555784358252938a0193908a019061433c565b828b0152508752505093850193850161426e565b6000604080838503121561437c57600080fd5b805161438781613b8c565b91508183356001600160401b03808211156143a157600080fd5b818601915086601f8301126143b557600080fd5b813560206143c282613c6a565b86516143ce8282613bd0565b83815260059390931b850182019282810191508a8411156143ee57600080fd5b8286015b848110156144635780358681111561440a5760008081fd5b8701808d03601f19018a13156144205760008081fd5b895161442b81613b8c565b858201358881111561443d5760008081fd5b61444b8f8883860101613c8d565b825250908a01358582015283529183019183016143f2565b508652508781013595508286111561447a57600080fd5b613f9a89878a0161421f565b600082601f83011261449757600080fd5b813560206144a482613c6a565b604080516144b28382613bd0565b848152600594851b87018401948482019350888611156144d157600080fd5b8488015b868110156140f45780356001600160401b03808211156144f55760008081fd5b908a0190818c03601f190186131561450d5760008081fd5b855161451881613b8c565b888301358281111561452a5760008081fd5b6145388e8b83870101613c8d565b825250868301358281111561454d5760008081fd5b8084019350508c603f84011261456557600091508182fd5b88830135915061457482613c6a565b87516145808282613bd0565b83815292861b84018801928a810191508e84111561459e5760008081fd5b938801935b838510156145c55784356145b681613ae0565b8252938a0193908a01906145a3565b828b015250875250509385019385016144d5565b600060408083850312156145ec57600080fd5b80516145f781613b8c565b91508183356001600160401b038082111561461157600080fd5b818601915086601f83011261462557600080fd5b8135602061463282613c6a565b865161463e8282613bd0565b83815260059390931b850182019282810191508a84111561465e57600080fd5b8286015b848110156146e05780358681111561467a5760008081fd5b8701808d03601f19018a13156146905760008081fd5b895161469b81613b8c565b85820135888111156146ad5760008081fd5b6146bb8f8883860101613c8d565b825250908a0135906146cc82613ae0565b808601919091528352918301918301614662565b50865250878101359550828611156146f757600080fd5b613f9a89878a01614486565b600082601f83011261471457600080fd5b8135602061472182613c6a565b6040805161472f8382613bd0565b848152600594851b870184019484820193508886111561474e57600080fd5b8488015b868110156140f45780356001600160401b03808211156147725760008081fd5b908a0190818c03601f190186131561478a5760008081fd5b855161479581613b8c565b88830135828111156147a75760008081fd5b6147b58e8b83870101613c8d565b82525086830135828111156147ca5760008081fd5b8084019350508c603f8401126147e257600091508182fd5b8883013591506147f182613c6a565b87516147fd8282613bd0565b83815292861b84018801928a810191508e84111561481b5760008081fd5b938801935b838510156148395784358252938a0193908a0190614820565b828b01525087525050938501938501614752565b6000604080838503121561486057600080fd5b805161486b81613b8c565b91508183356001600160401b038082111561488557600080fd5b818601915086601f83011261489957600080fd5b813560206148a682613c6a565b86516148b28282613bd0565b83815260059390931b850182019282810191508a8411156148d257600080fd5b8286015b84811015614947578035868111156148ee5760008081fd5b8701808d03601f19018a13156149045760008081fd5b895161490f81613b8c565b85820135888111156149215760008081fd5b61492f8f8883860101613c8d565b825250908a01358582015283529183019183016148d6565b508652508781013595508286111561495e57600080fd5b613f9a89878a01614703565b600082601f83011261497b57600080fd5b8135602061498882613c6a565b6040516149958282613bd0565b83815260059390931b85018201928281019150868411156149b557600080fd5b8286015b84811015613d6f576001600160401b0381358110156149d757600080fd5b813588016040818b03601f190112156149ef57600080fd5b6040516149fb81613b8c565b8682013583811115614a0c57600080fd5b614a1a8c8983860101613c8d565b825250604082013583811115614a2f57600080fd5b8083019250508a603f830112614a4457600080fd5b86820135614a5181613c6a565b604051614a5e8282613bd0565b82815260059290921b84016040019189810191508d831115614a7f57600080fd5b604085015b83811015614ab7578681351115614a9a57600080fd5b614aaa8f60408335890101613c8d565b8352918a01918a01614a84565b50838a01525050855250509183019183016149b9565b60006040808385031215614ae057600080fd5b8051614aeb81613b8c565b91508183356001600160401b0380821115614b0557600080fd5b818601915086601f830112614b1957600080fd5b81356020614b2682613c6a565b8651614b328282613bd0565b83815260059390931b850182019282810191508a841115614b5257600080fd5b8286015b84811015614be557803586811115614b6e5760008081fd5b8701808d03601f19018a1315614b845760008081fd5b8951614b8f81613b8c565b8582013588811115614ba15760008081fd5b614baf8f8883860101613c8d565b8252508a82013588811115614bc45760008081fd5b614bd28f8883860101613c8d565b8288015250845250918301918301614b56565b5086525087810135955082861115614bfc57600080fd5b613f9a89878a0161496a565b600082601f830112614c1957600080fd5b81356020614c2682613c6a565b604051614c338282613bd0565b83815260059390931b8501820192828101915086841115614c5357600080fd5b8286015b84811015613d6f576001600160401b038135811015614c7557600080fd5b813588016040818b03601f19011215614c8d57600080fd5b604051614c9981613b8c565b8682013583811115614caa57600080fd5b614cb88c8983860101613c8d565b825250604082013583811115614ccd57600080fd5b8083019250508a603f830112614ce257600080fd5b86820135614cef81613c6a565b604051614cfc8282613bd0565b82815260059290921b84016040019189810191508d831115614d1d57600080fd5b604085015b83811015614d55578681351115614d3857600080fd5b614d488f60408335890101613c8d565b8352918a01918a01614d22565b50838a0152505085525050918301918301614c57565b60006040808385031215614d7e57600080fd5b8051614d8981613b8c565b91508183356001600160401b0380821115614da357600080fd5b818601915086601f830112614db757600080fd5b81356020614dc482613c6a565b8651614dd08282613bd0565b83815260059390931b850182019282810191508a841115614df057600080fd5b8286015b84811015614e8357803586811115614e0c5760008081fd5b8701808d03601f19018a1315614e225760008081fd5b8951614e2d81613b8c565b8582013588811115614e3f5760008081fd5b614e4d8f8883860101613c8d565b8252508a82013588811115614e625760008081fd5b614e708f8883860101613c8d565b8288015250845250918301918301614df4565b5086525087810135955082861115614e9a57600080fd5b613f9a89878a01614c08565b600060e08284031215614eb857600080fd5b614ec0613bfc565b905081356001600160401b0380821115614ed957600080fd5b614ee585838601613e70565b83526020840135915080821115614efb57600080fd5b614f0785838601614102565b60208401526040840135915080821115614f2057600080fd5b614f2c85838601614369565b60408401526060840135915080821115614f4557600080fd5b614f51858386016145d9565b60608401526080840135915080821115614f6a57600080fd5b614f768583860161484d565b608084015260a0840135915080821115614f8f57600080fd5b614f9b85838601614acd565b60a084015260c0840135915080821115614fb457600080fd5b50614fc184828501614d6b565b60c08301525092915050565b60008060408385031215614fe057600080fd5b8235915060208301356001600160401b03811115614ffd57600080fd5b61500985828601614ea6565b9150509250929050565b60008060006060848603121561502857600080fd5b505081359360208301359350604090920135919050565b600060e0828403121561505157600080fd5b60405160e081016001600160401b038111828210171561507357615073613b76565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c08201525092915050565b6000602082840312156150d457600080fd5b604051602081016001600160401b03811182821017156150f6576150f6613b76565b604052905080823561510781613ae0565b905292915050565b60008060006060848603121561512457600080fd5b8335925060208401356001600160401b038082111561514257600080fd5b90850190610120828803121561515757600080fd5b60405161516381613bb1565b82358281111561517257600080fd5b830160e0818a03121561518457600080fd5b61518c613bfc565b61519582613a9f565b81526151a360208301613a9f565b60208201526151b460408301613a9f565b60408201526151c560608301613a9f565b60608201526151d660808301613a9f565b608082015260a0820135848111156151ed57600080fd5b6151f98b828501613d00565b60a08301525060c08201358481111561521157600080fd5b61521d8b828501613d00565b60c083015250825250615233886020850161503f565b60208201526152468861010085016150c2565b604082015280945050604086013591508082111561526357600080fd5b5061527086828701614ea6565b9150509250925092565b60006101608201905061528e828451613ad3565b6020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e08301516152dd60e084018215159052565b5061010083810151151590830152610120808401516152fe82850182613ad3565b50506101408084015161531382850182613ad3565b505092915050565b6000806040838503121561532e57600080fd5b823562ffffff8116811461534157600080fd5b91506020830135613b1c81613a8a565b60008060006060848603121561536657600080fd5b833561537181613a8a565b9250602084013561538181613a8a565b9150604084013561539181613a8a565b809150509250925092565b6000806000606084860312156153b157600080fd5b8335925060208401356001600160401b03808211156153cf57600080fd5b81860191506101208083890312156153e657600080fd5b6040516153f281613bb1565b83358381111561540157600080fd5b8401808a0383131561541257600080fd5b61541a613c24565b925061542581613a9f565b835261543360208201613a9f565b602084015261544460408201613a9f565b604084015261545560608201613a9f565b606084015261546660808201613a9f565b608084015261547760a08201613a9f565b60a084015261548860c08201613a9f565b60c084015260e08101358481111561549f57600080fd5b6154ab8b828401613d00565b60e08501525061010080820135858111156154c557600080fd5b6154d18c828501613d00565b82860152508383526154e68b6020880161503f565b60208401526154f78b8288016150c2565b604084015250508095505050604086013591508082111561526357600080fd5b6000806040838503121561552a57600080fd5b823561553581613a8a565b946020939093013593505050565b6000806040838503121561555657600080fd5b823561534181613a8a565b60008060008060008060c0878903121561557a57600080fd5b863561558581613a8a565b9550602087013561559581613a8a565b945060408701356155a581613a8a565b935060608701356155b581613a8a565b925060808701356155c581613a8a565b915060a08701356155d581613a8a565b809150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b80820180821115611c7b57611c7b6155e3565b918252602082015260400190565b8051613aaa81613ae0565b60006020828403121561563757600080fd5b8151613acc81613ae0565b8051613aaa81613a8a565b60006080828403121561565f57600080fd5b604051608081016001600160401b038111828210171561568157615681613b76565b604052825161568f81613a8a565b8152602083015161569f81613a8a565b602082015260408301516156b281613a8a565b604082015260608301516156c581613a8a565b60608201529392505050565b60006101a08201905060018060a01b03808a1683528089511660208401528060208a01511660408401528060408a01511660608401528060608a01511660808401525061572b60a083018880518252602090810151910152565b855160e08301526020860151610100830152845161012083015260208501516101408301528361016083015282151561018083015298975050505050505050565b60008082840361018081121561578157600080fd5b8351925061016080601f198301121561579957600080fd5b6157a1613c47565b91506020850151825260408501516020830152606085015160408301526080850151606083015260a0850151608083015260c085015160a083015260e085015160c08301526101008086015160e08401526101208087015182850152610140915081870151818501525081860151818401525050809150509250929050565b634e487b7160e01b600052601260045260246000fd5b60008261584557615845615820565b600160ff1b82146000198414161561585f5761585f6155e3565b500590565b6020808252600a908201526921a7a72a2927a62622a960b11b604082015260600190565b6001600160a01b03929092168252602082015260400190565b6020808252600f908201526e4e6f742070726f70657220726f6c6560881b604082015260600190565b6000602082840312156158dc57600080fd5b8151613acc81613a8a565b6001600160601b0319606096871b811682526001600160e81b031960e896871b8116601484015294871b811660178301529290941b909216602b840152921b909116602e82015260420190565b60005b8381101561594f578181015183820152602001615937565b50506000910152565b60008151808452615970816020860160208601615934565b601f01601f19169290920160200192915050565b602081526000825160a060208401526159a060c0840182615958565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152608084015160a08401528091505092915050565b6000602082840312156159ee57600080fd5b5051919050565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b60208082526014908201527320b1b1b7bab73a1034b9b73a102b37b235b0ab1960611b604082015260600190565b60006101608284031215615a9f57600080fd5b615aa7613c47565b615ab083615642565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152615afa60e0840161561a565b60e0820152610100615b0d81850161561a565b90820152610120615b1f848201615642565b90820152610140615b31848201615642565b908201529392505050565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b600060033d1115615b7b5760046000803e5060005160e01c5b90565b600060443d1015615b8c5790565b6040516003193d81016004833e81513d6001600160401b038083116024840183101715615bbb57505050505090565b8285019150815181811115615bd35750505050505090565b843d8701016020828501011115615bed5750505050505090565b615bfc60208286010187613bd0565b509095945050505050565b6001600160a01b0383168152606060208201819052600090615c2b90830184615958565b828103604084015260008152602081019150509392505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831681529116602082015260400190565b805161ffff81168114613aaa57600080fd5b6000610100808385031215615c9b57600080fd5b604051908101906001600160401b0382118183101715615cbd57615cbd613b76565b81604052615cca84615642565b815260208401516020820152604084015160408201526060840151606082015260808401516080820152615d0060a0850161561a565b60a0820152615d1160c08501615c75565b60c0820152615d2260e08501615642565b60e0820152949350505050565b80516001600160501b0381168114613aaa57600080fd5b600080600080600060a08688031215615d5e57600080fd5b615d6786615d2f565b9450602086015193506040860151925060608601519150615d8a60808701615d2f565b90509295509295909350565b81810381811115611c7b57611c7b6155e3565b8082028115828204841417611c7b57611c7b6155e3565b600082615dcf57615dcf615820565b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251615e31818460208701615934565b9190910192915050565b602081526000613acc602083018461595856fea2646970667358221220f040ed79e528cf1b8d97a3d32edb89fb368afb70973047b1759c59136c0c9a2264736f6c63430008130033