solc-0.8.35 0x83bc649fcdb2c8da146b2154a559ddedf937ef12 optimized-low-runs
20674 bytes
608060405260043610610364575f3560e01c806303dcfbdc1461041f57806306be9c53146104515780630716e2421461047157806308061aeb1461049257806308388426146104d0578063086e16c0146104ef57806308c732591461050d5780630de371e2146105395780630ea9e8521461055857806310ddce8e1461057857806312c53c9b146105ab578063158f8f59146105cb5780631665f66d146105ea5780631729d10b1461060957806317e51e80146106285780631991c225146106475780631aab9ef1146106665780631e95e60e146106855780631ee665c4146106a457806322828cc2146106c357806326d5d54a146106e257806328a947d91461073b57806328ac82e7146107505780632db004a31461076f578063358764761461079a5780633659cfe6146107b957806337cfdaca146107d8578063397a1b28146107ec5780633a53acb01461080b578063439766ce1461082a578063456a23a61461083e578063469048401461085d578063469963aa1461087c57806346d4b7141461089b5780634c73f498146108ba5780634f1ef286146108d957806351199700146108ec57806352d1902d1461090b57806353f3fcb11461091f5780635460172614610938578063561bddf81461095857806356f1199b146109775780635c975abb14610996578063616e6c1b146109b6578063715018a6146109d557806371cb700f146109e95780637346f1aa14610a085780637c8dc44014610a285780637c90fbf014610a475780638da5cb5b14610a6d578063917266fa14610a815780639795947314610aa05780639a8a302b14610ace578063aaf10f4214610aed578063b46a130e14610b01578063baaff11614610b20578063bac1520314610b3f578063c00b2d6114610b53578063c00c2d7314610b72578063c98bea5b14610b91578063d0e30db014610bb8578063d67b8fee14610bc0578063d6951aa914610bdf578063da79205814610bfe578063da8ed1f714610c22578063dcbfb6c314610c41578063de70b59f14610c60578063e453793414610c7f578063e74b981b14610cb7578063e939482314610cd6578063ee30511614610d09578063f2c5998a14610d28578063f2fde38b14610d47578063f340fa0114610d66578063f3fef3a314610d79578063f9609f0814610d98578063fc6dfe4e14610dab575f5ffd5b3661041b576001600160801b033411156103915760405163162908e360e11b815260040160405180910390fd5b60cf80543491905f906103ae9084906001600160801b0316614253565b92506101000a8154816001600160801b0302191690836001600160801b031602179055503460cf60108282829054906101000a90046001600160801b03166103f69190614272565b92506101000a8154816001600160801b0302191690836001600160801b031602179055005b5f5ffd5b34801561042a575f5ffd5b5061043e6104393660046142a5565b610dd9565b6040519081526020015b60405180910390f35b34801561045c575f5ffd5b5061043e5f5160206150825f395f51905f5281565b34801561047c575f5ffd5b5061049061048b366004614332565b610ea2565b005b34801561049d575f5ffd5b506104c06104ac366004614370565b60db6020525f908152604090205460ff1681565b6040519015158152602001610448565b3480156104db575f5ffd5b506104906104ea3660046143cf565b610f99565b3480156104fa575f5ffd5b506104906105093660046144eb565b5050565b348015610518575f5ffd5b5060e05461052c906001600160a01b031681565b604051610448919061451c565b348015610544575f5ffd5b5060ce5461052c906001600160a01b031681565b348015610563575f5ffd5b5061043e5f5160206150a25f395f51905f5281565b348015610583575f5ffd5b5060d45461059e90600160801b90046001600160801b031681565b6040516104489190614530565b3480156105b6575f5ffd5b5060ce546104c090600160a01b900460ff1681565b3480156105d6575f5ffd5b506104906105e5366004614370565b611573565b3480156105f5575f5ffd5b50610490610604366004614558565b6116c4565b348015610614575f5ffd5b5060de5461052c906001600160a01b031681565b348015610633575f5ffd5b5060dd5461052c906001600160a01b031681565b348015610652575f5ffd5b50610490610661366004614558565b61173a565b348015610671575f5ffd5b5061043e610680366004614573565b6117bc565b348015610690575f5ffd5b5061052c61069f3660046145a5565b611909565b3480156106af575f5ffd5b506104906106be3660046145bc565b611931565b3480156106ce575f5ffd5b5060c95461052c906001600160a01b031681565b3480156106ed575f5ffd5b5061071e6106fc36600461463d565b60d76020525f908152604090205463ffffffff80821691600160201b90041682565b6040805163ffffffff938416815292909116602083015201610448565b348015610746575f5ffd5b5061043e60e15481565b34801561075b575f5ffd5b5060cb5461052c906001600160a01b031681565b34801561077a575f5ffd5b5061043e6107893660046145a5565b60d86020525f908152604090205481565b3480156107a5575f5ffd5b506104906107b436600461465b565b6119d3565b3480156107c4575f5ffd5b506104906107d3366004614370565b611bf8565b3480156107e3575f5ffd5b5061043e611cbf565b3480156107f7575f5ffd5b5061043e6108063660046146ec565b611cee565b348015610816575f5ffd5b5061043e6108253660046145a5565b611e11565b348015610835575f5ffd5b50610490611eab565b348015610849575f5ffd5b5060cf5461059e906001600160801b031681565b348015610868575f5ffd5b5060d05461052c906001600160a01b031681565b348015610887575f5ffd5b5060ca5461052c906001600160a01b031681565b3480156108a6575f5ffd5b506104906108b5366004614716565b61203b565b3480156108c5575f5ffd5b506104906108d4366004614716565b612175565b6104906108e7366004614773565b612211565b3480156108f7575f5ffd5b5061043e610906366004614370565b6122c6565b348015610916575f5ffd5b5061043e6123da565b34801561092a575f5ffd5b5060dc546104c09060ff1681565b348015610943575f5ffd5b5061043e5f51602061501b5f395f51905f5281565b348015610963575f5ffd5b5061043e6109723660046145a5565b612486565b348015610982575f5ffd5b50610490610991366004614370565b612516565b3480156109a1575f5ffd5b5060dc546104c090600160881b900460ff1681565b3480156109c1575f5ffd5b506104906109d03660046145a5565b61266f565b3480156109e0575f5ffd5b5061049061274c565b3480156109f4575f5ffd5b5060d25461052c906001600160a01b031681565b348015610a13575f5ffd5b5060d9546104c090600160a01b900460ff1681565b348015610a33575f5ffd5b50610490610a423660046147ff565b61275f565b348015610a52575f5ffd5b5060cf5461059e90600160801b90046001600160801b031681565b348015610a78575f5ffd5b5061052c6128bf565b348015610a8c575f5ffd5b5061043e610a9b3660046145a5565b6128ce565b348015610aab575f5ffd5b506104c0610aba366004614370565b60da6020525f908152604090205460ff1681565b348015610ad9575f5ffd5b5060d15461052c906001600160a01b031681565b348015610af8575f5ffd5b5061052c612989565b348015610b0c575f5ffd5b5061043e610b1b36600461481f565b612997565b348015610b2b575f5ffd5b50610490610b3a36600461485e565b612a1d565b348015610b4a575f5ffd5b50610490612bf6565b348015610b5e575f5ffd5b50610490610b6d3660046148a5565b612d71565b348015610b7d575f5ffd5b5060d95461052c906001600160a01b031681565b348015610b9c575f5ffd5b5060d55461071e9063ffffffff80821691600160201b90041682565b61043e612e85565b348015610bcb575f5ffd5b5060cd5461052c906001600160a01b031681565b348015610bea575f5ffd5b5060d45461059e906001600160801b031681565b348015610c09575f5ffd5b5060dc5461059e9061010090046001600160801b031681565b348015610c2d575f5ffd5b50610490610c3c3660046148d2565b612e8f565b348015610c4c575f5ffd5b5060df5461052c906001600160a01b031681565b348015610c6b575f5ffd5b50610490610c7a3660046145bc565b612f3d565b348015610c8a575f5ffd5b5060d054610ca290600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610448565b348015610cc2575f5ffd5b50610490610cd1366004614370565b61306e565b348015610ce1575f5ffd5b5061052c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610d14575f5ffd5b5060cc5461052c906001600160a01b031681565b348015610d33575f5ffd5b50610490610d423660046145a5565b613154565b348015610d52575f5ffd5b50610490610d61366004614370565b61322f565b61043e610d74366004614370565b6132a5565b348015610d84575f5ffd5b5061043e610d933660046146ec565b6132f4565b61043e610da6366004614716565b613735565b348015610db6575f5ffd5b506104c0610dc5366004614370565b60d66020525f908152604090205460ff1681565b5f610de26137a6565b60ce546001600160a01b031663d505accf333085356020870135610e0c6060890160408a016148ed565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501526044840191909152606483015260ff166084820152606085013560a4820152608085013560c482015260e4015f604051808303815f87803b158015610e7c575f5ffd5b505af1925050508015610e8d575060015b50610e988484611cee565b90505b9392505050565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490610ee1905f5160206150a25f395f51905f5290339060040161490d565b602060405180830381865afa158015610efc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f209190614924565b610f3d5760405163209296a360e01b815260040160405180910390fd5b5f5b81811015610f9457828282818110610f5957610f5961493f565b905060200201357f339b23d24a078f6403801d644f7cba5045424e28175a49da36de4445b66387da60405160405180910390a2600101610f3f565b505050565b610fa16137a6565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490610fe0905f5160206150825f395f51905f5290339060040161490d565b602060405180830381865afa158015610ffb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101f9190614924565b61103c5760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec80000060e154108061105f5750686f05b59d3b2000000060e154115b1561107d57604051633f4219cd60e21b815260040160405180910390fd5b8451158061108c575084518314155b80611098575084518114155b156110b65760405163a9854bc960e01b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af11580156110fe573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111229190614953565b60e15461112f919061496a565b90505f86516001600160401b0381111561114b5761114b61438b565b6040519080825280602002602001820160405280156111a657816020015b611193604051806080016040528060608152602001606081526020015f8152602001606081525090565b8152602001906001900390816111695790505b5090505f5b87518110156114ec5760ca5488515f916001600160a01b03169063b165e295908b90859081106111dd576111dd61493f565b60200260200101516040518263ffffffff1660e01b815260040161120391815260200190565b602060405180830381865afa15801561121e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611242919061497d565b90505f816001600160a01b031663bcbb073a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611281573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a5919061497d565b60ca54604051632a25a9af60e11b81529192505f916001600160a01b039091169063544b535e906112da90859060040161451c565b5f60405180830381865afa1580156112f4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261131b9190810190614998565b60c9549091505f906001600160a01b031663125ae56b8c8c888181106113435761134361493f565b90506020028101906113559190614a0c565b8c8c8a8181106113675761136761493f565b90506020028101906113799190614a0c565b878d6040518763ffffffff1660e01b815260040161139c96959493929190614aa4565b602060405180830381865afa1580156113b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113db9190614953565b90505f60405180608001604052808d8d898181106113fb576113fb61493f565b905060200281019061140d9190614a0c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018b8b898181106114585761145861493f565b905060200281019061146a9190614a0c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506020808301869052604080519182018152918152910152875190915081908890889081106114cf576114cf61493f565b6020026020010181905250505050505080806001019150506111ab565b505f8751836114fb9190614af2565b9050611506816137f3565b60c95460e154604051635d57f88b60e11b81526001600160a01b039092169163baaff11691849161153b918791600401614b09565b5f604051808303818588803b158015611552575f5ffd5b505af1158015611564573d5f5f3e3d5ffd5b50505050505050505050505050565b6001600160a01b0381165f90815260db602052604090205460ff166115d05760405162461bcd60e51b815260206004820152600e60248201526d139bdd081c9959da5cdd195c995960921b60448201526064015b60405180910390fd5b60e054604051632474521560e21b81526001600160a01b03909116906391d148549061160f905f5160206150a25f395f51905f5290339060040161490d565b602060405180830381865afa15801561162a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164e9190614924565b61166a5760405162461bcd60e51b81526004016115c790614bbf565b6001600160a01b0381165f90815260db602052604090819020805460ff19169055517f8a5afe4e68ed1b812242442424ef608ee7b0a23b6111c6183e781ac4656e8173906116b990839061451c565b60405180910390a150565b60d9546001600160a01b031633146116ef576040516317fe949f60e01b815260040160405180910390fd5b8060dc60018282829054906101000a90046001600160801b03166117139190614272565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555050565b60d9546001600160a01b03163314611765576040516317fe949f60e01b815260040160405180910390fd5b7fafea3ee583ed00355634c0a2f47d947b6af95fda2bc1dbe0ff919c45166789d4816040516117949190614530565b60405180910390a160d054610509906001600160a01b03166001600160801b0383165f612997565b5f6117c56137a6565b60cc546001600160a01b031633146117f0576040516317fe949f60e01b815260040160405180910390fd5b5f6117fa84611e11565b90506001600160601b0384118061180f575083155b80611818575080155b156118365760405163162908e360e11b815260040160405180910390fd5b60d25460ce54611855916001600160a01b039182169133911687613858565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb09061188b90889086908b908a90600401614be9565b6020604051808303815f875af11580156118a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118cb9190614953565b9050336001600160a01b03165f5160206150625f395f51905f52878760026040516118f893929190614c3b565b60405180910390a295945050505050565b60d38181548110611918575f80fd5b5f918252602090912001546001600160a01b0316905081565b6119396137a6565b335f90815260db602052604090205460ff166119675760405162461bcd60e51b81526004016115c790614bbf565b60c954604051637c561c3960e11b81526001600160a01b039091169063f8ac38729061199f9088908890889088908890600401614d72565b5f604051808303815f87803b1580156119b6575f5ffd5b505af11580156119c8573d5f5f3e3d5ffd5b505050505050505050565b5f54610100900460ff16158080156119f157505f54600160ff909116105b80611a115750611a00306138b8565b158015611a1157505f5460ff166001145b611a745760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016115c7565b5f805460ff191660011790558015611a95575f805461ff0019166101001790555b6001600160a01b0388161580611ab257506001600160a01b038716155b80611ac457506001600160a01b038616155b80611ad657506001600160a01b038516155b80611ae857506001600160a01b038416155b15611b065760405163baca868960e01b815260040160405180910390fd5b611b0e6138c7565b611b166138f5565b60ce80546001600160a01b03199081166001600160a01b038b81169190911790925560c9805482168a841617905560ca8054821689841617905560cc8054821688841617905560cd8054821687841617905560dc8054600160881b6001600160901b031990911617905560d98054821686841617905560d2805490911691841691909117905560de805460ff60a01b191690558015611bee575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611c405760405162461bcd60e51b81526004016115c790614dd1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611c7261391b565b6001600160a01b031614611c985760405162461bcd60e51b81526004016115c790614e0a565b611ca181613936565b604080515f80825260208201909252611cbc9183919061398e565b50565b60cf545f90611ce0906001600160801b03600160801b820481169116614272565b6001600160801b0316905090565b5f611cf76137a6565b5f611d0183611e11565b90506001600160601b03831180611d16575082155b80611d1f575080155b15611d3d5760405163162908e360e11b815260040160405180910390fd5b60d25460ce54611d5c916001600160a01b039182169133911686613858565b60d25460405163019691cb60e41b81525f916001600160a01b0316906319691cb090611d9290879086908a908790600401614be9565b6020604051808303815f875af1158015611dae573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd29190614953565b9050336001600160a01b03165f5160206150625f395f51905f5286866001604051611dff93929190614c3b565b60405180910390a29150505b92915050565b5f5f611e1b611cbf565b9050805f03611e2c57505f92915050565b60ce5460408051633a98ef3960e01b8152905183926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015611e73573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e979190614953565b611ea19085614af2565b610e9b9190614e43565b60e05460408051633bd48c9f60e11b815290516001600160a01b03909216916391d148549183916377a9193e916004808201926020929091908290030181865afa158015611efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1f9190614953565b336040518363ffffffff1660e01b8152600401611f3d92919061490d565b602060405180830381865afa158015611f58573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7c9190614924565b611f995760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff1615611fee5760405162461bcd60e51b815260206004820152601860248201527714185d5cd8589b194e88185b1c9958591e481c185d5cd95960421b60448201526064016115c7565b60dc805460ff60881b1916600160881b1790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589061203190339061451c565b60405180910390a1565b612043613af8565b60df546001600160a01b031615801561206457506001600160a01b03811615155b6120805760405162461bcd60e51b81526004016115c790614e62565b60e0546001600160a01b0316156120cf5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016115c7565b60df80546001600160a01b038084166001600160a01b03199283161790925560e08054928516929091169190911790555f612108611cbf565b60cf80546001600160801b03478116600160801b908102928216929092179283905592935061213a9291041682614253565b60cf80546001600160801b0319166001600160801b0392909216919091179055612162611cbf565b816001600160801b031614610f94575f5ffd5b61217d613af8565b6001600160a01b0382161580159061219d57506001600160a01b03811615155b80156121b2575060dd546001600160a01b0316155b80156121c7575060de546001600160a01b0316155b6121e35760405162461bcd60e51b81526004016115c790614e62565b60dd80546001600160a01b039384166001600160a01b03199182161790915560de8054929093169116179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036122595760405162461bcd60e51b81526004016115c790614dd1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661228b61391b565b6001600160a01b0316146122b15760405162461bcd60e51b81526004016115c790614e0a565b6122ba82613936565b6105098282600161398e565b5f5f5f60ce5f9054906101000a90046001600160a01b03166001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015612319573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061233d9190614953565b905080156123d35760ce5460405163673e156160e11b815282916001600160a01b03169063ce7c2ac29061237590889060040161451c565b602060405180830381865afa158015612390573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b49190614953565b6123bc611cbf565b6123c69190614af2565b6123d09190614e43565b91505b5092915050565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146124745760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60648201526084016115c7565b505f516020614ffb5f395f51905f5290565b5f5f60ce5f9054906101000a90046001600160a01b03166001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124fc9190614953565b9050805f0361250d57505f92915050565b80611e97611cbf565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612555905f5160206150a25f395f51905f5290339060040161490d565b602060405180830381865afa158015612570573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125949190614924565b6125b15760405163209296a360e01b815260040160405180910390fd5b6001600160a01b0381165f90815260db602052604090205460ff161561260e5760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b60448201526064016115c7565b6040805160208082018352600182526001600160a01b0384165f90815260db9091528290209051815460ff1916901515179055517f8bef88cac8d05094711d367d04bf4f2fcb4b589ca12a6ed8c8f375000e1e848e906116b990839061451c565b60e054604051632474521560e21b81526001600160a01b03909116906391d14854906126ae905f5160206150a25f395f51905f5290339060040161490d565b602060405180830381865afa1580156126c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ed9190614924565b61270a5760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec8000008110806127295750686f05b59d3b2000000081115b1561274757604051633f4219cd60e21b815260040160405180910390fd5b60e155565b612754613af8565b61275d5f613b57565b565b5f612769826128ce565b60df549091506001600160a01b03163314612797576040516317fe949f60e01b815260040160405180910390fd5b8215806127a2575081155b156127c05760405163162908e360e11b815260040160405180910390fd5b828111156127e15760405163162908e360e11b815260040160405180910390fd5b60cf80548391905f906127fe9084906001600160801b0316614253565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b81526001600160a01b039091169063ee7a7c04906128539033908790600401614e83565b5f604051808303815f87803b15801561286a575f5ffd5b505af115801561287c573d5f5f3e3d5ffd5b505060408051868152602081018690527f888a2432cd9af74ee23f9ebdf262368f5434dffe681b3c7426880c6639b2a74a935001905060405180910390a1505050565b6033546001600160a01b031690565b5f5f6128d8611cbf565b9050805f036128e957505f92915050565b60ce5460408051633a98ef3960e01b815290515f926001600160a01b031691633a98ef399160048083019260209291908290030181865afa158015612930573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129549190614953565b61295e9085614af2565b905081600161296d8284614e9c565b612977919061496a565b6129819190614e43565b949350505050565b5f61299261391b565b905090565b5f6129a06137a6565b60de546001600160a01b03163314806129c3575060d9546001600160a01b031633145b6129df5760405162461bcd60e51b81526004016115c790614bbf565b836001600160a01b03165f516020614fbb5f395f51905f5284600185604051612a0a93929190614eaf565b60405180910390a2610e98845f85613ba8565b612a256137a6565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612a64905f5160206150825f395f51905f5290339060040161490d565b602060405180830381865afa158015612a7f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa39190614924565b612ac05760405163209296a360e01b815260040160405180910390fd5b6801bc16d674ec800000811080612adf5750686f05b59d3b2000000081115b15612afd57604051633f4219cd60e21b815260040160405180910390fd5b60c954604080516321edd09760e01b815290515f926001600160a01b0316916321edd097916004808301926020929190829003018187875af1158015612b45573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b699190614953565b612b73908361496a565b90505f612b808483614af2565b9050612b8b816137f3565b60c954604051635d57f88b60e11b81526001600160a01b039091169063baaff116908390612bc190899089908990600401614edc565b5f604051808303818588803b158015612bd8575f5ffd5b505af1158015612bea573d5f5f3e3d5ffd5b50505050505050505050565b60e0546040805163421d0eb360e01b815290516001600160a01b03909216916391d1485491839163421d0eb3916004808201926020929091908290030181865afa158015612c46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c6a9190614953565b336040518363ffffffff1660e01b8152600401612c8892919061490d565b602060405180830381865afa158015612ca3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc79190614924565b612ce45760405163209296a360e01b815260040160405180910390fd5b60dc54600160881b900460ff16612d345760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016115c7565b60dc805460ff60881b191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9061203190339061451c565b60cc546001600160a01b03163314612d9c576040516317fe949f60e01b815260040160405180910390fd5b60cf54612db39082906001600160801b0316614eff565b60cf80546001600160801b0319166001600160801b03929092169190911790557f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511612dfc611cbf565b60ce5f9054906101000a90046001600160a01b03166001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e709190614953565b604080519283526020830191909152016116b9565b5f6129925f6132a5565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612ece905f5160206150a25f395f51905f5290339060040161490d565b602060405180830381865afa158015612ee9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0d9190614924565b612f2a5760405163209296a360e01b815260040160405180910390fd5b60dc805460ff1916911515919091179055565b612f456137a6565b60e054604051632474521560e21b81526001600160a01b03909116906391d1485490612f84905f51602061501b5f395f51905f5290339060040161490d565b602060405180830381865afa158015612f9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fc39190614924565b612fe05760405163209296a360e01b815260040160405180910390fd5b5f612ff383670de0b6b3a7640000614af2565b9050612ffe816137f3565b60c954604051632dc4817560e21b81526001600160a01b039091169063b71205d4908390613038908a908a908a908a908a90600401614d72565b5f604051808303818588803b15801561304f575f5ffd5b505af1158015613061573d5f5f3e3d5ffd5b5050505050505050505050565b60e054604051632474521560e21b81526001600160a01b03909116906391d14854906130ad905f5160206150a25f395f51905f5290339060040161490d565b602060405180830381865afa1580156130c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec9190614924565b6131095760405163209296a360e01b815260040160405180910390fd5b60d080546001600160a01b0319166001600160a01b0383161790556040517fbf5406678e9fe702eaea01d92d3b62ac5be0a14e1802562e2a428364d30d1b11906116b990839061451c565b60df546001600160a01b0316331480159061317a575060d2546001600160a01b03163314155b80156131af5750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156131cd576040516317fe949f60e01b815260040160405180910390fd5b60ce54604051633b9e9f0160e21b81526001600160a01b039091169063ee7a7c04906131ff9033908590600401614e83565b5f604051808303815f87803b158015613216575f5ffd5b505af1158015613228573d5f5f3e3d5ffd5b5050505050565b613237613af8565b6001600160a01b03811661329c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016115c7565b611cbc81613b57565b5f6132ae6137a6565b336001600160a01b03165f516020614fbb5f395f51905f52346001856040516132d993929190614eaf565b60405180910390a26132ec33345f613ba8565b90505b919050565b5f6132fd6137a6565b5f613307836128ce565b60d2549091506001600160a01b031633148061332d575060cc546001600160a01b031633145b80613342575060df546001600160a01b031633145b806133755750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6133915760405162461bcd60e51b81526004016115c790614bbf565b60cf54600160801b90046001600160801b031683118061341d575060ce546040516370a0823160e01b815284916001600160a01b0316906370a08231906133dc90339060040161451c565b602060405180830381865afa1580156133f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341b9190614953565b105b1561343b5760405163bb55fd2760e01b815260040160405180910390fd5b6001600160801b0383118061344e575082155b80613457575080155b156134755760405163162908e360e11b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156134de575060dc5460cf5484916134d3916001600160801b03610100909204821691600160801b90910416614253565b6001600160801b0316105b156134fc5760405163bb55fd2760e01b815260040160405180910390fd5b60d2546001600160a01b031633036136855760dc5461010090046001600160801b031683111561353f5760405163bb55fd2760e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161561363c575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663341c6b3b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135ef9190614f2c565b60cf549091508490613612908390600160801b90046001600160801b0316614253565b6001600160801b0316101561363a5760405163bb55fd2760e01b815260040160405180910390fd5b505b8260dc60018282829054906101000a90046001600160801b03166136609190614253565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b8260cf60108282829054906101000a90046001600160801b03166136a99190614253565b82546001600160801b039182166101009390930a92830291909202199091161790555060ce54604051633b9e9f0160e21b81526001600160a01b039091169063ee7a7c04906136fe9033908590600401614e83565b5f604051808303815f87803b158015613715575f5ffd5b505af1158015613727573d5f5f3e3d5ffd5b50505050610e9b8484613cf6565b5f61373e6137a6565b60cc546001600160a01b031633146137685760405162461bcd60e51b81526004016115c790614bbf565b336001600160a01b03165f516020614fbb5f395f51905f523460028560405161379393929190614eaf565b60405180910390a2610e9b33345f613ba8565b60dc54600160881b900460ff161561275d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016115c7565b60cf80548291905f906138109084906001600160801b0316614272565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508060cf60108282829054906101000a90046001600160801b03166117139190614253565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526138b2908590613d96565b50505050565b6001600160a01b03163b151590565b5f54610100900460ff166138ed5760405162461bcd60e51b81526004016115c790614f47565b61275d613e67565b5f54610100900460ff1661275d5760405162461bcd60e51b81526004016115c790614f47565b5f516020614ffb5f395f51905f52546001600160a01b031690565b60e054604051635006bb7b60e01b81526001600160a01b0390911690635006bb7b9061396690339060040161451c565b5f6040518083038186803b15801561397c575f5ffd5b505afa158015613228573d5f5f3e3d5ffd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156139c157610f9483613e96565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613a1b575060408051601f3d908101601f19168201909252613a1891810190614953565b60015b613a7e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016115c7565b5f516020614ffb5f395f51905f528114613aec5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016115c7565b50610f94838383613f2f565b33613b016128bf565b6001600160a01b03161461275d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016115c7565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8260cf60108282829054906101000a90046001600160801b0316613bcd9190614272565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508160cf5f8282829054906101000a90046001600160801b0316613c149190614272565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505f8284613c459190614e9c565b90505f613c5182613f53565b90506001600160801b03821180613c66575081155b80613c6f575080155b15613c8d5760405163162908e360e11b815260040160405180910390fd5b60ce546040516329460cc560e11b81526001600160a01b039091169063528c198a90613cbf9089908590600401614e83565b5f604051808303815f87803b158015613cd6575f5ffd5b505af1158015613ce8573d5f5f3e3d5ffd5b509298975050505050505050565b60405147905f906001600160a01b0385169084908381818185875af1925050503d805f8114613d40576040519150601f19603f3d011682016040523d82523d5f602084013e613d45565b606091505b50509050808015613d5f5750613d5b838361496a565b4710155b6138b25760405162461bcd60e51b815260206004820152600860248201526714d95b9911985a5b60c21b60448201526064016115c7565b5f613dea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f789092919063ffffffff16565b805190915015610f945780806020019051810190613e089190614924565b610f945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016115c7565b5f54610100900460ff16613e8d5760405162461bcd60e51b81526004016115c790614f47565b61275d33613b57565b613e9f816138b8565b613f015760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016115c7565b5f516020614ffb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b613f3883613f86565b5f82511180613f445750805b15610f94576138b28383613fc5565b5f5f82613f5e611cbf565b613f68919061496a565b9050805f03611e2c575090919050565b6060610e9884845f856140b3565b613f8f81613e96565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060613fd0836138b8565b61402b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016115c7565b5f5f846001600160a01b0316846040516140459190614f92565b5f60405180830381855af49150503d805f811461407d576040519150601f19603f3d011682016040523d82523d5f602084013e614082565b606091505b50915091506140aa828260405180606001604052806027815260200161503b6027913961418a565b95945050505050565b6060824710156141145760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016115c7565b5f5f866001600160a01b0316858760405161412f9190614f92565b5f6040518083038185875af1925050503d805f8114614169576040519150601f19603f3d011682016040523d82523d5f602084013e61416e565b606091505b509150915061417f878383876141a3565b979650505050505050565b60608315614199575081610e9b565b610e9b8383614215565b6060831561420f5782515f03614208576141bc856138b8565b6142085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115c7565b5081612981565b61298183835b8151156142255781518083602001fd5b8060405162461bcd60e51b81526004016115c79190614fa8565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b038281168282160390811115611e0b57611e0b61423f565b6001600160801b038181168382160190811115611e0b57611e0b61423f565b6001600160a01b0381168114611cbc575f5ffd5b5f5f5f83850360e08112156142b8575f5ffd5b84356142c381614291565b93506020850135925060a0603f19820112156142dd575f5ffd5b506040840190509250925092565b5f5f83601f8401126142fb575f5ffd5b5081356001600160401b03811115614311575f5ffd5b6020830191508360208260051b850101111561432b575f5ffd5b9250929050565b5f5f60208385031215614343575f5ffd5b82356001600160401b03811115614358575f5ffd5b614364858286016142eb565b90969095509350505050565b5f60208284031215614380575f5ffd5b8135610e9b81614291565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156143c7576143c761438b565b604052919050565b5f5f5f5f5f606086880312156143e3575f5ffd5b85356001600160401b038111156143f8575f5ffd5b8601601f81018813614408575f5ffd5b80356001600160401b038111156144215761442161438b565b8060051b6144316020820161439f565b9182526020818401810192908101908b84111561444c575f5ffd5b6020850194505b8385101561447257843580835260209586019590935090910190614453565b9850505050602087013590506001600160401b03811115614491575f5ffd5b61449d888289016142eb565b90955093505060408601356001600160401b038111156144bb575f5ffd5b6144c7888289016142eb565b969995985093965092949392505050565b803563ffffffff811681146132ef575f5ffd5b5f5f604083850312156144fc575f5ffd5b614505836144d8565b9150614513602084016144d8565b90509250929050565b6001600160a01b0391909116815260200190565b6001600160801b0391909116815260200190565b6001600160801b0381168114611cbc575f5ffd5b5f60208284031215614568575f5ffd5b8135610e9b81614544565b5f5f5f60608486031215614585575f5ffd5b833561459081614291565b95602085013595506040909401359392505050565b5f602082840312156145b5575f5ffd5b5035919050565b5f5f5f5f5f606086880312156145d0575f5ffd5b85356001600160401b038111156145e5575f5ffd5b6145f1888289016142eb565b90965094505060208601356001600160401b0381111561460f575f5ffd5b61461b888289016142eb565b909450925050604086013561462f81614291565b809150509295509295909350565b5f6020828403121561464d575f5ffd5b813560048110610e9b575f5ffd5b5f5f5f5f5f5f5f60e0888a031215614671575f5ffd5b873561467c81614291565b9650602088013561468c81614291565b9550604088013561469c81614291565b945060608801356146ac81614291565b935060808801356146bc81614291565b925060a08801356146cc81614291565b915060c08801356146dc81614291565b8091505092959891949750929550565b5f5f604083850312156146fd575f5ffd5b823561470881614291565b946020939093013593505050565b5f5f60408385031215614727575f5ffd5b823561473281614291565b9150602083013561474281614291565b809150509250929050565b5f6001600160401b038211156147655761476561438b565b50601f01601f191660200190565b5f5f60408385031215614784575f5ffd5b823561478f81614291565b915060208301356001600160401b038111156147a9575f5ffd5b8301601f810185136147b9575f5ffd5b80356147cc6147c78261474d565b61439f565b8181528660208385010111156147e0575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f60408385031215614810575f5ffd5b50508035926020909101359150565b5f5f5f60608486031215614831575f5ffd5b833561483c81614291565b925060208401359150604084013561485381614291565b809150509250925092565b5f5f5f60408486031215614870575f5ffd5b83356001600160401b03811115614885575f5ffd5b614891868287016142eb565b909790965060209590950135949350505050565b5f602082840312156148b5575f5ffd5b813580600f0b8114610e9b575f5ffd5b8015158114611cbc575f5ffd5b5f602082840312156148e2575f5ffd5b8135610e9b816148c5565b5f602082840312156148fd575f5ffd5b813560ff81168114610e9b575f5ffd5b9182526001600160a01b0316602082015260400190565b5f60208284031215614934575f5ffd5b8151610e9b816148c5565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614963575f5ffd5b5051919050565b81810381811115611e0b57611e0b61423f565b5f6020828403121561498d575f5ffd5b8151610e9b81614291565b5f602082840312156149a8575f5ffd5b81516001600160401b038111156149bd575f5ffd5b8201601f810184136149cd575f5ffd5b80516149db6147c78261474d565b8181528560208385010111156149ef575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f8335601e19843603018112614a21575f5ffd5b8301803591506001600160401b03821115614a3a575f5ffd5b60200191503681900382131561432b575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b608081525f614ab760808301888a614a4e565b8281036020840152614aca818789614a4e565b90508281036040840152614ade8186614a76565b915050826060830152979650505050505050565b8082028115828204841417611e0b57611e0b61423f565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b82811015614bab57605f198786030184528151805160808752614b556080880182614a76565b905060208201518782036020890152614b6e8282614a76565b91505060408201516040880152606082015191508681036060880152614b948183614a76565b965050506020938401939190910190600101614b2f565b505050506020929092019290925292915050565b60208082526010908201526f24b731b7b93932b1ba1021b0b63632b960811b604082015260600190565b6001600160601b0394851681529290931660208301526001600160a01b03166040820152606081019190915260800190565b60048110614c3757634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b038416815260208101839052606081016129816040830184614c1b565b5f5f8335601e19843603018112614c74575f5ffd5b83016020810192503590506001600160401b03811115614c92575f5ffd5b80360382131561432b575f5ffd5b5f8383855260208501945060208460051b820101835f5b86811015614d6657838303601f19018852813536879003607e19018112614cdc575f5ffd5b8601614ce88180614c5f565b60808652614cfa608087018284614a4e565b915050614d0a6020830183614c5f565b8683036020880152614d1d838284614a4e565b9250505060408201356040860152614d386060830183614c5f565b92508582036060870152614d4d828483614a4e565b60209b8c019b9096509490940193505050600101614cb7565b50909695505050505050565b606081525f614d85606083018789614ca0565b82810360208401528481526001600160fb1b03851115614da3575f5ffd5b8460051b808760208401376001600160a01b0394909416604093909301929092525001602001949350505050565b6020808252602c908201525f516020614fdb5f395f51905f5260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201525f516020614fdb5f395f51905f5260408201526b6163746976652070726f787960a01b606082015260800190565b5f82614e5d57634e487b7160e01b5f52601260045260245ffd5b500490565b602080825260079082015266125b9d985b1a5960ca1b604082015260600190565b6001600160a01b03929092168252602082015260400190565b80820180821115611e0b57611e0b61423f565b83815260608101614ec36020830185614c1b565b6001600160a01b03929092166040919091015292915050565b604081525f614eef604083018587614ca0565b9050826020830152949350505050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715611e0b57611e0b61423f565b5f60208284031215614f3c575f5ffd5b8151610e9b81614544565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f82518060208501845e5f920191825250919050565b602081525f610e9b6020830184614a7656fea241faf62e66ce518d1934ce4c936d806a02289ba483fac23beb8c15755be90d46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc20e7d93f475a4a8dd621285797dd2d68da59e4450b89aea5ca9bf079e95c1db5416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564b9da3f3df62c28aca604806cc6ee9678189d7591ef511a77bb040fa8361e9e02c6ace799356a5a236ccaa6708c68b77b7de838b1700b6e0c40f48a1407a5eef00e8d94121b3383f03d9ae60b39295aa793469d7230d51a3f62cbf47cd45481d9