diff --git a/.github/workflows/slither_v2.yaml b/.github/workflows/slither_v2.yaml index 1b855a03..26292f30 100644 --- a/.github/workflows/slither_v2.yaml +++ b/.github/workflows/slither_v2.yaml @@ -55,7 +55,10 @@ jobs: with: sarif: results.sarif node-version: "21.1.0" - fail-on: none + slither-config: "v2/slither.config.json" + solc-version: "0.8.26" + fail-on: medium + target: "v2/" - name: Upload SARIF file uses: github/codeql-action/upload-sarif@v3 diff --git a/v2/pkg/erc20custody.sol/erc20custody.go b/v2/pkg/erc20custody.sol/erc20custody.go index 16bd9024..7abae95e 100644 --- a/v2/pkg/erc20custody.sol/erc20custody.go +++ b/v2/pkg/erc20custody.sol/erc20custody.go @@ -31,8 +31,8 @@ var ( // ERC20CustodyMetaData contains all meta data concerning the ERC20Custody contract. var ERC20CustodyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a0033", } // ERC20CustodyABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var ERC20CustodyABI = ERC20CustodyMetaData.ABI var ERC20CustodyBin = ERC20CustodyMetaData.Bin // DeployERC20Custody deploys a new Ethereum contract, binding an instance of ERC20Custody to it. -func DeployERC20Custody(auth *bind.TransactOpts, backend bind.ContractBackend, _gateway common.Address, _tssAddress common.Address, _admin common.Address) (common.Address, *types.Transaction, *ERC20Custody, error) { +func DeployERC20Custody(auth *bind.TransactOpts, backend bind.ContractBackend, gateway_ common.Address, tssAddress_ common.Address, admin_ common.Address) (common.Address, *types.Transaction, *ERC20Custody, error) { parsed, err := ERC20CustodyMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployERC20Custody(auth *bind.TransactOpts, backend bind.ContractBackend, _ return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20CustodyBin), backend, _gateway, _tssAddress, _admin) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20CustodyBin), backend, gateway_, tssAddress_, admin_) if err != nil { return common.Address{}, nil, nil, err } @@ -450,37 +450,6 @@ func (_ERC20Custody *ERC20CustodyCallerSession) SupportsInterface(interfaceId [4 return _ERC20Custody.Contract.SupportsInterface(&_ERC20Custody.CallOpts, interfaceId) } -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ERC20Custody *ERC20CustodyCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ERC20Custody.contract.Call(opts, &out, "tssAddress") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ERC20Custody *ERC20CustodySession) TssAddress() (common.Address, error) { - return _ERC20Custody.Contract.TssAddress(&_ERC20Custody.CallOpts) -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ERC20Custody *ERC20CustodyCallerSession) TssAddress() (common.Address, error) { - return _ERC20Custody.Contract.TssAddress(&_ERC20Custody.CallOpts) -} - // GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. // // Solidity: function grantRole(bytes32 role, address account) returns() diff --git a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go index 4e6fce27..2d06346e 100644 --- a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go +++ b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go @@ -31,8 +31,8 @@ var ( // ERC20CustodyEchidnaTestMetaData contains all meta data concerning the ERC20CustodyEchidnaTest contract. var ERC20CustodyEchidnaTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x600580546001600160a01b03191633908117909155600e60809081526d11d85d195dd85e5155934b9cdbdb60921b60a05260e49190915261012361010481905261012452606460c090815261014460405260e080516001600160e01b0390811663c0c53b8b60e01b1790915261007792919061027f16565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100ae57600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e657506001600160a01b038216155b156101045760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b03191691841691909117905561014e60008261029e565b506101797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261029e565b506101a47f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361029e565b505050506040516101b49061382a565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610206573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506148ab565b6000610289613837565b610294848483610331565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103295760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610298565b506000610298565b60008061033e85846103ad565b90506103a26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161038c929190613940565b60408051601f19818403018152919052856103b9565b9150505b9392505050565b60006103a683836103ed565b60c081015151600090156103e3576103dc84848460c0015161040e60201b60201c565b90506103a6565b6103dc8484610587565b60006103f98383610654565b6103a6838360200151846103b960201b60201c565b600080610419610664565b9050600061042786836106fe565b905060006104448260600151836020015185610b2160201b60201c565b9050600061045483838989610cd6565b9050600061046182611952565b602081015181519192509060030b156104ba5789826040015160405160200161048b929190613964565b60408051601f198184030181529082905262461bcd60e51b82526104b1916004016139ca565b60405180910390fd5b60006105036040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611ae960201b60201c565b60405163c6ce059d60e01b8152909150600080516020616ad08339815191529063c6ce059d906105379084906004016139ca565b602060405180830381865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057891906139dd565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616ad083398151915290638d1cc925906105bd9087906004016139ca565b600060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106029190810190613ad2565b90506000610631828560405160200161061c929190613b06565b60408051601f19818403018152919052611c89565b90506001600160a01b03811661029457848460405160200161048b929190613b35565b61066082826000611c9c565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616ad083398151915291829063d145736c906106b2908490600401613bc4565b600060405180830381865afa1580156106cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106f79190810190613bf9565b9250505090565b6107306040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616ad083398151915290506107756040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61077e85611d76565b6020820152600061078e86611fcb565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f89190810190613bf9565b868385602001516040516020016108129493929190613c41565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108519085906004016139ca565b600060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108969190810190613bf9565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108c5908490600401613cd9565b602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613d12565b61091b578160405160200161048b9190613d34565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610947908490600401613dab565b600060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261098c9190810190613bf9565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ba908490600401613df1565b602060405180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613d12565b15610a77576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a2c908490600401613df1565b600060405180830381865afa158015610a49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a719190810190613bf9565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a9c9190613e32565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610ac8929190613e8d565b600060405180830381865afa158015610ae5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b0d9190810190613bf9565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b3d579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b8457610b84613eb2565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bbe57610bbe613eb2565b602002602001018190525084604051602001610bda9190613ec8565b60405160208183030381529060405281600281518110610bfc57610bfc613eb2565b602002602001018190525082604051602001610c189190613efd565b60405160208183030381529060405281600381518110610c3a57610c3a613eb2565b60209081029190910101526000610c5082611952565b9050600081602001519050610cb7610c8a60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061217b565b610ccc578560405160200161048b9190613f2c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616ad08339815191529015610d20565b511590565b610e3c57826020015115610db05760405162461bcd60e51b81526020600482015260586024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104b1565b8260c0015115610e3c5760405162461bcd60e51b81526020600482015260536024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104b1565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e555790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e9690613fc1565b935060ff1681518110610eab57610eab613eb2565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610eec9190613fe0565b604051602081830303815290604052828280610f0790613fc1565b935060ff1681518110610f1c57610f1c613eb2565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f5290613fc1565b935060ff1681518110610f6757610f67613eb2565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fa590613fc1565b935060ff1681518110610fba57610fba613eb2565b60200260200101819052508760200151828280610fd690613fc1565b935060ff1681518110610feb57610feb613eb2565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061102990613fc1565b935060ff168151811061103e5761103e613eb2565b60209081029190910101528751828261105681613fc1565b935060ff168151811061106b5761106b613eb2565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110a490613fc1565b935060ff16815181106110b9576110b9613eb2565b60209081029190910101526110cd466121dc565b82826110d881613fc1565b935060ff16815181106110ed576110ed613eb2565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061112c90613fc1565b935060ff168151811061114157611141613eb2565b60200260200101819052508682828061115990613fc1565b935060ff168151811061116e5761116e613eb2565b602090810291909101015285511561127c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111bf81613fc1565b935060ff16815181106111d4576111d4613eb2565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061120b9089906004016139ca565b600060405180830381865afa158015611228573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112509190810190613bf9565b828261125b81613fc1565b935060ff168151811061127057611270613eb2565b60200260200101819052505b846020015115611329576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ba81613fc1565b935060ff16815181106112cf576112cf613eb2565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061130490613fc1565b935060ff168151811061131957611319613eb2565b6020026020010181905250611490565b61133f610d1b8660a0015161214e60201b60201c565b6113c25760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261137281613fc1565b935060ff168151811061138757611387613eb2565b60200260200101819052508460a001516040516020016113a79190613ec8565b60405160208183030381529060405282828061130490613fc1565b8460c001511580156113e757506113e5610d1b896040015161214e60201b60201c565b155b156114905760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261141b81613fc1565b935060ff168151811061143057611430613eb2565b60209081029190910101526114448861226e565b6040516020016114549190613ec8565b60405160208183030381529060405282828061146f90613fc1565b935060ff168151811061148457611484613eb2565b60200260200101819052505b6114a6610d1b866040015161214e60201b60201c565b6115295760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114d781613fc1565b935060ff16815181106114ec576114ec613eb2565b6020026020010181905250846040015182828061150890613fc1565b935060ff168151811061151d5761151d613eb2565b60200260200101819052505b60608501511561161a576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261155b81613fc1565b935060ff168151811061157057611570613eb2565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ee9190810190613bf9565b82826115f981613fc1565b935060ff168151811061160e5761160e613eb2565b60200260200101819052505b60e085015151156116ac5760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261165181613fc1565b935060ff168151811061166657611666613eb2565b602090810291909101015260e085015151611680906121dc565b828261168b81613fc1565b935060ff16815181106116a0576116a0613eb2565b60200260200101819052505b60e085015160200151156117495760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116e681613fc1565b935060ff16815181106116fb576116fb613eb2565b602002602001018190525061171d8560e00151602001516121dc60201b60201c565b828261172881613fc1565b935060ff168151811061173d5761173d613eb2565b60200260200101819052505b60e085015160400151156117ea5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261178781613fc1565b935060ff168151811061179c5761179c613eb2565b60200260200101819052506117be8560e00151604001516121dc60201b60201c565b82826117c981613fc1565b935060ff16815181106117de576117de613eb2565b60200260200101819052505b60e0850151606001511561189a5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261183781613fc1565b935060ff168151811061184c5761184c613eb2565b602002602001018190525061186e8560e00151606001516121dc60201b60201c565b828261187981613fc1565b935060ff168151811061188e5761188e613eb2565b60200260200101819052505b60008160ff166001600160401b038111156118b7576118b7613a06565b6040519080825280602002602001820160405280156118ea57816020015b60608152602001906001900390816118d55790505b50905060005b8260ff168160ff16101561194357838160ff168151811061191357611913613eb2565b6020026020010151828260ff168151811061193057611930613eb2565b60209081029190910101526001016118f0565b5093505050505b949350505050565b6119796040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616ad083398151915292600091849163d145736c916119c791869101614037565b600060405180830381865afa1580156119e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a0c9190810190613bf9565b90506000611a1a8683612924565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a4a919061407e565b6000604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a9191908101906140e3565b805190915060030b15801590611aaa5750602081015151155b8015611ab95750604081015151155b15610ccc5781600081518110611ad157611ad1613eb2565b602002602001015160405160200161048b9190614196565b60606000611b1e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b559082905b90612a5e565b15611c52576000611bd282611bcc81611bc6611b988a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a85565b90612ae2565b9050611c06611bff604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612a5e565b15611c4057611c3d611c36604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612b67565b90505b611c4981612b8d565b925050506103a6565b8215611c6b57848460405160200161048b929190614366565b50506040805160208101909152600081526103a6565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cab57505050565b6000611cb8848484612bf2565b90506000611cc582611952565b602081015181519192509060030b158015611d385750611d38611d0c604051806040016040528060078152602001665355434345535360c81b81525061214e60201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b4f565b15611d4557505050505050565b60408201515115611d6557816040015160405160200161048b91906143e1565b8060405160200161048b919061442b565b60606000611dab8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611de2611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b829061217b565b15611e24576103a6611e1f611e18604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b8390613105565b612b8d565b611e56611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b829061318f565b600103611ebe57611e88611c36604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b506103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b8390612b67565b611eed611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba576000611f2582611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b613224565b905060008160018351611f38919061447b565b81518110611f4857611f48613eb2565b60200260200101519050611fb1611e1f611f8460405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613105565b95945050505050565b8260405160200161048b919061448e565b606060006120008360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612030611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b1561203e576103a681612b8d565b612069611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b60010361209e576103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b6120cd611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba57600061210082611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b905060018151111561213c57806002825161211b919061447b565b8151811061212b5761212b613eb2565b602002602001015192505050919050565b508260405160200161048b919061448e565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b80518251600091111561219057506000610298565b815183516020850151600092916121a691614548565b6121b0919061447b565b9050826020015181036121c7576001915050610298565b82516020840151819020912014905092915050565b606060006121e9836132c8565b60010190506000816001600160401b0381111561220857612208613a06565b6040519080825280601f01601f191660200182016040528015612232576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461223c57509392505050565b60606000612285836040015161214e60201b60201c565b90506122c26122bb6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061214e60201b60201c565b82906133aa565b156122e95750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61231c6122bb60405180604001604052806009815260200168556e6c6963656e736560b81b81525061214e60201b60201c565b15612348575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123756122bb6040518060400160405280600381526020016213525560ea1b81525061214e60201b60201c565b1561239b57505060408051808201909152600381526213525560ea1b6020820152919050565b6123d16122bb6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061214e60201b60201c565b8061241157506124116122bb6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061214e60201b60201c565b1561243d57505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124736122bb6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061214e60201b60201c565b806124b357506124b36122bb6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061214e60201b60201c565b156124df575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6125166122bb6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061214e60201b60201c565b8061255757506125576122bb604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061214e60201b60201c565b1561258657505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125bd6122bb6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b806125fe57506125fe6122bb604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b1561262b57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126616122bb6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061214e60201b60201c565b1561269057505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126c66122bb6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061214e60201b60201c565b156126f557505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b6127266122bb6040518060400160405280600781526020016604d504c2d322e360cc1b81525061214e60201b60201c565b1561275057505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127816122bb6040518060400160405280600781526020016604f534c2d332e360cc1b81525061214e60201b60201c565b156127ab57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127df6122bb6040518060400160405280600a81526020016904170616368652d322e360b41b81525061214e60201b60201c565b1561280c57505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128436122bb6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b8061288457506128846122bb6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b156128b157505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128e36122bb604051806040016040528060088152602001674255534c2d312e3160c01b81525061214e60201b60201c565b1561290d57505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161048b929060200161455b565b60608060005b84518110156129af578185828151811061294657612946613eb2565b602002602001015160405160200161295f929190613b06565b60405160208183030381529060405291506001855161297e919061447b565b81146129a7578160405160200161299591906146ab565b60405160208183030381529060405291505b60010161292a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129c857905050905083816000815181106129f3576129f3613eb2565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a2c57612a2c613eb2565b60200260200101819052508181600281518110612a4b57612a4b613eb2565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a7c92918491906133be565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ab293906134cf565b9050836020015181612ac4919061447b565b84518590612ad390839061447b565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b07575081610298565b6020808301519084015160019114612b2e5750815160208481015190840151829020919020145b8015612b5f57825184518590612b4590839061447b565b9052508251602085018051612b5b908390614548565b9052505b509192915050565b6040805180820190915260008082526020820152612b868383836135ef565b5092915050565b6060600082600001516001600160401b03811115612bad57612bad613a06565b6040519080825280601f01601f191660200182016040528015612bd7576020820181803683370190505b50602084810151855192935090830191612b86918391613695565b60606000612bfe610664565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c1b5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c5c90613fc1565b935060ff1681518110612c7157612c71613eb2565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cac91906146d0565b604051602081830303815290604052828280612cc790613fc1565b935060ff1681518110612cdc57612cdc613eb2565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d1490613fc1565b935060ff1681518110612d2957612d29613eb2565b602002602001018190525082604051602001612d459190613efd565b604051602081830303815290604052828280612d6090613fc1565b935060ff1681518110612d7557612d75613eb2565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612daf90613fc1565b935060ff1681518110612dc457612dc4613eb2565b6020908102919091010152612dd9878461370f565b8282612de481613fc1565b935060ff1681518110612df957612df9613eb2565b602090810291909101015285515115612e915760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e3981613fc1565b935060ff1681518110612e4e57612e4e613eb2565b60209081029190910101528551612e65908461370f565b8282612e7081613fc1565b935060ff1681518110612e8557612e85613eb2565b60200260200101819052505b856080015115612eff5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eda81613fc1565b935060ff1681518110612eef57612eef613eb2565b6020026020010181905250612f5a565b8415612f5a576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f3981613fc1565b935060ff1681518110612f4e57612f4e613eb2565b60200260200101819052505b60408601515115612fe65760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f9481613fc1565b935060ff1681518110612fa957612fa9613eb2565b60200260200101819052508560400151828280612fc590613fc1565b935060ff1681518110612fda57612fda613eb2565b60200260200101819052505b8560600151156130505760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261302f81613fc1565b935060ff168151811061304457613044613eb2565b60200260200101819052505b60008160ff166001600160401b0381111561306d5761306d613a06565b6040519080825280602002602001820160405280156130a057816020015b606081526020019060019003908161308b5790505b50905060005b8260ff168160ff1610156130f957838160ff16815181106130c9576130c9613eb2565b6020026020010151828260ff16815181106130e6576130e6613eb2565b60209081029190910101526001016130a6565b50979650505050505050565b604080518082019091526000808252602082015281518351101561312a575081610298565b8151835160208501516000929161314091614548565b61314a919061447b565b6020840151909150600190821461316b575082516020840151819020908220145b80156131865783518551869061318290839061447b565b9052505b50929392505050565b8051825160208085015190840151600093849390926131af9284906134cf565b6131b99190614548565b90505b835160208501516131cd9190614548565b8111612b8657816131dd81614715565b92505082600001516132138560200151836131f8919061447b565b8651613204919061447b565b855160208701518591906134cf565b61321d9190614548565b90506131bc565b60606000613232848461318f565b61323d906001614548565b6001600160401b0381111561325457613254613a06565b60405190808252806020026020018201604052801561328757816020015b60608152602001906001900390816132725790505b50905060005b8151811015611c81576132a3611e1f8686612b67565b8282815181106132b5576132b5613eb2565b602090810291909101015260010161328d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613311577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061333d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061335b57662386f26fc10000830492506010015b6305f5e1008310613373576305f5e100830492506008015b612710831061338757612710830492506004015b60648310613399576064830492506002015b600a83106102985760010192915050565b60006133b6838361374f565b159392505050565b6000808584116134c5576020841161347157600084156134095760016133e586602061447b565b6133f090600861472e565b6133fb90600261482c565b613405919061447b565b1990505b83518116856134188989614548565b613422919061447b565b805190935082165b81811461345c57878411613444578794505050505061194a565b8361344e81614838565b94505082845116905061342a565b6134668785614548565b94505050505061194a565b83832061347e858861447b565b6134889087614548565b91505b8582106134c3578482208082036134b0576134a68684614548565b935050505061194a565b6134bb60018461447b565b92505061348b565b505b5092949350505050565b600083818685116135da5760208511613589576000851561351b5760016134f787602061447b565b61350290600861472e565b61350d90600261482c565b613517919061447b565b1990505b8451811660008761352c8b8b614548565b613536919061447b565b855190915083165b82811461357b57818610613563576135568b8b614548565b965050505050505061194a565b8561356d81614715565b96505083865116905061353e565b85965050505050505061194a565b508383206000905b61359b868961447b565b82116135d8578583208082036135b7578394505050505061194a565b6135c2600185614548565b93505081806135d090614715565b925050613591565b505b6135e48787614548565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161361c93906134cf565b602080870180519186019190915251909150613638908261447b565b83528451602086015161364b9190614548565b810361365a576000855261368c565b835183516136689190614548565b8551869061367790839061447b565b90525083516136869082614548565b60208601525b50909392505050565b602081106136cd57815183526136ac602084614548565b92506136b9602083614548565b91506136c660208261447b565b9050613695565b60001981156136fc5760016136e383602061447b565b6136ef9061010061482c565b6136f9919061447b565b90505b9151835183169219169190911790915250565b6060600061371d84846106fe565b80516020808301516040519394506137379390910161484f565b60405160208183030381529060405291505092915050565b8151815160009190811115613762575081515b6020808501519084015160005b8381101561381b57825182518082146137eb5760001960208710156137ca5760018461379c89602061447b565b6137a69190614548565b6137b190600861472e565b6137bc90600261482c565b6137c6919061447b565b1990505b81811683821681810391146137e85797506102989650505050505050565b50505b6137f6602086614548565b9450613803602085614548565b935050506020816138149190614548565b905061376f565b5084518651610ccc919061488b565b610c9f80615e3183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161387a61387f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161387a6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561390b5781810151838201526020016138f3565b50506000910152565b6000815180845261392c8160208601602086016138f0565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061194a90830184613914565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161399c81601a8501602088016138f0565b6101d160f51b601a9184019182015283516139be81601c8401602088016138f0565b01601c01949350505050565b6020815260006103a66020830184613914565b6000602082840312156139ef57600080fd5b81516001600160a01b03811681146103a657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a3e57613a3e613a06565b60405290565b6000806001600160401b03841115613a5e57613a5e613a06565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a8c57613a8c613a06565b604052838152905080828401851015613aa457600080fd5b611c818460208301856138f0565b600082601f830112613ac357600080fd5b6103a683835160208501613a44565b600060208284031215613ae457600080fd5b81516001600160401b03811115613afa57600080fd5b61029484828501613ab2565b60008351613b188184602088016138f0565b835190830190613b2c8183602088016138f0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b6d81601a8501602088016138f0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613baa8160338401602088016138f0565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103a66080830184613914565b600060208284031215613c0b57600080fd5b81516001600160401b03811115613c2157600080fd5b8201601f81018413613c3257600080fd5b61029484825160208401613a44565b60008551613c53818460208a016138f0565b602f60f81b9083019081528551613c71816001840160208a016138f0565b602f60f81b600192909101918201528451613c938160028401602089016138f0565b600181830101915050602f60f81b60018201528351613cb98160028401602088016138f0565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cec6040830184613914565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d2457600080fd5b815180151581146103a657600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d6c81601f8501602087016138f0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dbe6040830184613914565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e046040830184613914565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e6a8160148501602087016138f0565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ea06040830185613914565b82810360208401526103a28185613914565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ee58160018501602087016138f0565b601160f91b6001939091019283015250600201919050565b60008251613f0f8184602087016138f0565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f9e81604b8501602087016138f0565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fd757613fd7613fab565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161402a8160298501602087016138f0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103a66080830184613914565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140d757603f198786030184526140c2858351613914565b945060209384019391909101906001016140a6565b50929695505050505050565b6000602082840312156140f557600080fd5b81516001600160401b0381111561410b57600080fd5b82016060818503121561411d57600080fd5b614125613a1c565b81518060030b811461413657600080fd5b815260208201516001600160401b0381111561415157600080fd5b61415d86828501613ab2565b60208301525060408201516001600160401b0381111561417c57600080fd5b61418886828501613ab2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141d88160218501602087016138f0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143a88160218501602088016138f0565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143d581602e8401602088016138f0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161402a8160298501602087016138f0565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b60208201526000825161446e8160228501602087016138f0565b9190910160220192915050565b8181038181111561029857610298613fab565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144b781600e8501602087016138f0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561029857610298613fab565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145938160188501602088016138f0565b6301034b7160e51b60189184019182015283516145b781601c8401602088016138f0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146bd8184602087016138f0565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161470881601c8501602087016138f0565b91909101601c0192915050565b60006001820161472757614727613fab565b5060010190565b808202811582820484141761029857610298613fab565b6001815b60018411156147805780850481111561476457614764613fab565b600184161561477257908102905b60019390931c928002614749565b935093915050565b60008261479757506001610298565b816147a457506000610298565b81600181146147ba57600281146147c4576147e0565b6001915050610298565b60ff8411156147d5576147d5613fab565b50506001821b610298565b5060208310610133831016604e8410600b8410161715614803575081810a610298565b6148106000198484614745565b806000190482111561482457614824613fab565b029392505050565b60006103a68383614788565b60008161484757614847613fab565b506000190190565b600083516148618184602088016138f0565b601d60f91b908301908152835161487f8160018401602088016138f0565b01600101949350505050565b8181036000831280158383131683831282161715612b8657612b86613fab565b611577806148ba6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610366578063d9caed1214610379578063e63ab1e91461038c57600080fd5b8063a217fddf1461034b578063c8a023621461035357600080fd5b80638456cb59116100b25780638456cb59146102d657806385f438c1146102de57806391d148541461030557600080fd5b80636133b4bb146102a357806381100bf0146102b657600080fd5b806336568abe116101245780633f4ba83a116101095780633f4ba83a146102705780635b112591146102785780635c975abb1461029857600080fd5b806336568abe1461023d5780633c2f05a81461025057600080fd5b806321fc65f21161015557806321fc65f2146101e3578063248a9ca3146101f85780632f2ff15d1461022a57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f3660046111a6565b6103b3565b60405190151581526020015b60405180910390f35b6002546101be90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f66101f136600461125a565b61044c565b005b61021c6102063660046112c9565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f66102383660046112e2565b6105c1565b6101f661024b3660046112e2565b6105ed565b6004546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661064b565b6003546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610184565b6101f66102b136600461130e565b610680565b6005546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661089f565b61021c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103133660046112e2565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61021c600081565b6101f661036136600461125a565b6108d1565b6101f66103743660046112e2565b610a2c565b6101f6610387366004611368565b610a52565b61021c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610454610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047e81610b62565b610486610b6c565b6002546104b29073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061051490899089908990899089906004016113ee565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a79392919061144b565b60405180910390a3506105ba6001600055565b5050505050565b600082815260016020819052604090912001546105dd81610b62565b6105e78383610c38565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461063c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106468282610d03565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61067581610b62565b61067d610dc2565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106aa86600561146e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071557600080fd5b505af1158015610729573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156107aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ce91906114a8565b506004546107f59073ffffffffffffffffffffffffffffffffffffffff168585858561044c565b600480546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff61010090920482169381019390935216906370a0823190602401602060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089291906114ca565b156105e7576105e76114e3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108c981610b62565b61067d610e3f565b6108d9610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090381610b62565b61090b610b6c565b6002546109379073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd49061099990899089908990899089906004016113ee565b600060405180830381600087803b1580156109b357600080fd5b505af11580156109c7573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a79392919061144b565b60008281526001602081905260409091200154610a4881610b62565b6105e78383610d03565b610a5a610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8481610b62565b610a8c610b6c565b610aad73ffffffffffffffffffffffffffffffffffffffff85168484610bab565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b0c91815260200190565b60405180910390a3506106466001600055565b600260005403610b5b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61067d8133610e9a565b60025460ff1615610ba9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610646908490610f2b565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610cfb57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610446565b506000610446565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610cfb57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610446565b610dca610fc1565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e47610b6c565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e153390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f27576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f4d73ffffffffffffffffffffffffffffffffffffffff841683610ffd565b90508051600014158015610f72575080806020019051810190610f7091906114a8565b155b15610646576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f1e565b60025460ff16610ba9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061100b83836000611012565b9392505050565b606081471015611050576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f1e565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110799190611512565b60006040518083038185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b50915091506110cb8683836110d5565b9695505050505050565b6060826110ea576110e582611164565b61100b565b815115801561110e575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561115d576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f1e565b508061100b565b8051156111745780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111b857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461120c57600080fd5b919050565b60008083601f84011261122357600080fd5b50813567ffffffffffffffff81111561123b57600080fd5b60208301915083602082850101111561125357600080fd5b9250929050565b60008060008060006080868803121561127257600080fd5b61127b866111e8565b9450611289602087016111e8565b935060408601359250606086013567ffffffffffffffff8111156112ac57600080fd5b6112b888828901611211565b969995985093965092949392505050565b6000602082840312156112db57600080fd5b5035919050565b600080604083850312156112f557600080fd5b82359150611305602084016111e8565b90509250929050565b6000806000806060858703121561132457600080fd5b61132d856111e8565b935060208501359250604085013567ffffffffffffffff81111561135057600080fd5b61135c87828801611211565b95989497509550505050565b60008060006060848603121561137d57600080fd5b611386846111e8565b9250611394602085016111e8565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114406080830184866113a5565b979650505050505050565b8381526040602082015260006114656040830184866113a5565b95945050505050565b80820180821115610446577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156114ba57600080fd5b8151801515811461100b57600080fd5b6000602082840312156114dc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156115335760208186018101518583015201611519565b50600092019182525091905056fea2646970667358221220e3eceeff6045b5584ad5b26814ad7e9728c8428c7219e4a4930ed3899cab596964736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x600380546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061026316565b600480546001600160a01b03929092166001600160a01b03199283168117909155600580549092161790553480156100b057600080fd5b5060055460035460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316608052610130600082610282565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610282565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610282565b505050506040516101969061380e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156101e8573d6000803e3d6000fd5b5060028054610100600160a81b0319166101006001600160a01b039384160217905560055460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561024657600080fd5b505af115801561025a573d6000803e3d6000fd5b5050505061488f565b600061026d61381b565b610278848483610315565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661030d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161027c565b50600061027c565b6000806103228584610391565b90506103866040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001610370929190613924565b60408051601f198184030181529190528561039d565b9150505b9392505050565b600061038a83836103d1565b60c081015151600090156103c7576103c084848460c001516103f260201b60201c565b905061038a565b6103c0848461056b565b60006103dd8383610638565b61038a8383602001518461039d60201b60201c565b6000806103fd610648565b9050600061040b86836106e2565b905060006104288260600151836020015185610b0560201b60201c565b9050600061043883838989610cba565b9050600061044582611936565b602081015181519192509060030b1561049e5789826040015160405160200161046f929190613948565b60408051601f198184030181529082905262461bcd60e51b8252610495916004016139ae565b60405180910390fd5b60006104e76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611acd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616b378339815191529063c6ce059d9061051b9084906004016139ae565b602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906139c1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616b3783398151915290638d1cc925906105a19087906004016139ae565b600060405180830381865afa1580156105be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105e69190810190613ab6565b905060006106158285604051602001610600929190613aea565b60408051601f19818403018152919052611c6d565b90506001600160a01b03811661027857848460405160200161046f929190613b19565b61064482826000611c80565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616b3783398151915291829063d145736c90610696908490600401613ba8565b600060405180830381865afa1580156106b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106db9190810190613bdd565b9250505090565b6107146040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616b3783398151915290506107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61076285611d5a565b6020820152600061077286611faf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107dc9190810190613bdd565b868385602001516040516020016107f69493929190613c25565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108359085906004016139ae565b600060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190613bdd565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108a9908490600401613cbd565b602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea9190613cf6565b6108ff578160405160200161046f9190613d18565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061092b908490600401613d8f565b600060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109709190810190613bdd565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f69061099e908490600401613dd5565b602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190613cf6565b15610a5b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a10908490600401613dd5565b600060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a559190810190613bdd565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a809190613e16565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610aac929190613e71565b600060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af19190810190613bdd565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b21579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b6857610b68613e96565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610ba257610ba2613e96565b602002602001018190525084604051602001610bbe9190613eac565b60405160208183030381529060405281600281518110610be057610be0613e96565b602002602001018190525082604051602001610bfc9190613ee1565b60405160208183030381529060405281600381518110610c1e57610c1e613e96565b60209081029190910101526000610c3482611936565b9050600081602001519050610c9b610c6e60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061215f565b610cb0578560405160200161046f9190613f10565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616b378339815191529015610d04565b511590565b610e2057826020015115610d945760405162461bcd60e51b81526020600482015260586024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401610495565b8260c0015115610e205760405162461bcd60e51b81526020600482015260536024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401610495565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e395790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e7a90613fa5565b935060ff1681518110610e8f57610e8f613e96565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610ed09190613fc4565b604051602081830303815290604052828280610eeb90613fa5565b935060ff1681518110610f0057610f00613e96565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f3690613fa5565b935060ff1681518110610f4b57610f4b613e96565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610f8990613fa5565b935060ff1681518110610f9e57610f9e613e96565b60200260200101819052508760200151828280610fba90613fa5565b935060ff1681518110610fcf57610fcf613e96565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061100d90613fa5565b935060ff168151811061102257611022613e96565b60209081029190910101528751828261103a81613fa5565b935060ff168151811061104f5761104f613e96565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b81525082828061108890613fa5565b935060ff168151811061109d5761109d613e96565b60209081029190910101526110b1466121c0565b82826110bc81613fa5565b935060ff16815181106110d1576110d1613e96565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061111090613fa5565b935060ff168151811061112557611125613e96565b60200260200101819052508682828061113d90613fa5565b935060ff168151811061115257611152613e96565b60209081029190910101528551156112605760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111a381613fa5565b935060ff16815181106111b8576111b8613e96565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906111ef9089906004016139ae565b600060405180830381865afa15801561120c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112349190810190613bdd565b828261123f81613fa5565b935060ff168151811061125457611254613e96565b60200260200101819052505b84602001511561130d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b6020820152828261129e81613fa5565b935060ff16815181106112b3576112b3613e96565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b8152508282806112e890613fa5565b935060ff16815181106112fd576112fd613e96565b6020026020010181905250611474565b611323610cff8660a0015161213260201b60201c565b6113a65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261135681613fa5565b935060ff168151811061136b5761136b613e96565b60200260200101819052508460a0015160405160200161138b9190613eac565b6040516020818303038152906040528282806112e890613fa5565b8460c001511580156113cb57506113c9610cff896040015161213260201b60201c565b155b156114745760408051808201909152600d81526c2d2d6c6963656e73655479706560981b602082015282826113ff81613fa5565b935060ff168151811061141457611414613e96565b602090810291909101015261142888612252565b6040516020016114389190613eac565b60405160208183030381529060405282828061145390613fa5565b935060ff168151811061146857611468613e96565b60200260200101819052505b61148a610cff866040015161213260201b60201c565b61150d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114bb81613fa5565b935060ff16815181106114d0576114d0613e96565b602002602001018190525084604001518282806114ec90613fa5565b935060ff168151811061150157611501613e96565b60200260200101819052505b6060850151156115fe576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261153f81613fa5565b935060ff168151811061155457611554613e96565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d29190810190613bdd565b82826115dd81613fa5565b935060ff16815181106115f2576115f2613e96565b60200260200101819052505b60e085015151156116905760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261163581613fa5565b935060ff168151811061164a5761164a613e96565b602090810291909101015260e085015151611664906121c0565b828261166f81613fa5565b935060ff168151811061168457611684613e96565b60200260200101819052505b60e0850151602001511561172d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116ca81613fa5565b935060ff16815181106116df576116df613e96565b60200260200101819052506117018560e00151602001516121c060201b60201c565b828261170c81613fa5565b935060ff168151811061172157611721613e96565b60200260200101819052505b60e085015160400151156117ce5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261176b81613fa5565b935060ff168151811061178057611780613e96565b60200260200101819052506117a28560e00151604001516121c060201b60201c565b82826117ad81613fa5565b935060ff16815181106117c2576117c2613e96565b60200260200101819052505b60e0850151606001511561187e5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261181b81613fa5565b935060ff168151811061183057611830613e96565b60200260200101819052506118528560e00151606001516121c060201b60201c565b828261185d81613fa5565b935060ff168151811061187257611872613e96565b60200260200101819052505b60008160ff166001600160401b0381111561189b5761189b6139ea565b6040519080825280602002602001820160405280156118ce57816020015b60608152602001906001900390816118b95790505b50905060005b8260ff168160ff16101561192757838160ff16815181106118f7576118f7613e96565b6020026020010151828260ff168151811061191457611914613e96565b60209081029190910101526001016118d4565b5093505050505b949350505050565b61195d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616b3783398151915292600091849163d145736c916119ab9186910161401b565b600060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f09190810190613bdd565b905060006119fe8683612908565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a2e9190614062565b6000604051808303816000875af1158015611a4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7591908101906140c7565b805190915060030b15801590611a8e5750602081015151155b8015611a9d5750604081015151155b15610cb05781600081518110611ab557611ab5613e96565b602002602001015160405160200161046f919061417a565b60606000611b028560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b399082905b90612a42565b15611c36576000611bb682611bb081611baa611b7c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a69565b90612ac6565b9050611bea611be3604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612a42565b15611c2457611c21611c1a604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612b4b565b90505b611c2d81612b71565b9250505061038a565b8215611c4f57848460405160200161046f92919061434a565b505060408051602081019091526000815261038a565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611c8f57505050565b6000611c9c848484612bd6565b90506000611ca982611936565b602081015181519192509060030b158015611d1c5750611d1c611cf0604051806040016040528060078152602001665355434345535360c81b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b33565b15611d2957505050505050565b60408201515115611d4957816040015160405160200161046f91906143c5565b8060405160200161046f919061440f565b60606000611d8f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611dc6611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b829061215f565b15611e085761038a611e03611dfc604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b83906130e9565b612b71565b611e3a611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8290613173565b600103611ea257611e6c611c1a604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b5061038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8390612b4b565b611ed1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e576000611f0982611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b613208565b905060008160018351611f1c919061445f565b81518110611f2c57611f2c613e96565b60200260200101519050611f95611e03611f6860405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528551825280860190820152906130e9565b95945050505050565b8260405160200161046f9190614472565b60606000611fe48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612014611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b156120225761038a81612b71565b61204d611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6001036120825761038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6120b1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e5760006120e482611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b90506001815111156121205780600282516120ff919061445f565b8151811061210f5761210f613e96565b602002602001015192505050919050565b508260405160200161046f9190614472565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121745750600061027c565b8151835160208501516000929161218a9161452c565b612194919061445f565b9050826020015181036121ab57600191505061027c565b82516020840151819020912014905092915050565b606060006121cd836132ac565b60010190506000816001600160401b038111156121ec576121ec6139ea565b6040519080825280601f01601f191660200182016040528015612216576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461222057509392505050565b60606000612269836040015161213260201b60201c565b90506122a661229f6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061213260201b60201c565b829061338e565b156122cd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61230061229f60405180604001604052806009815260200168556e6c6963656e736560b81b81525061213260201b60201c565b1561232c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61235961229f6040518060400160405280600381526020016213525560ea1b81525061213260201b60201c565b1561237f57505060408051808201909152600381526213525560ea1b6020820152919050565b6123b561229f6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061213260201b60201c565b806123f557506123f561229f6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061213260201b60201c565b1561242157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61245761229f6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061213260201b60201c565b80612497575061249761229f6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061213260201b60201c565b156124c3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6124fa61229f6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061213260201b60201c565b8061253b575061253b61229f604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061213260201b60201c565b1561256a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125a161229f6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b806125e257506125e261229f604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561260f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61264561229f6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061213260201b60201c565b1561267457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126aa61229f6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061213260201b60201c565b156126d957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61270a61229f6040518060400160405280600781526020016604d504c2d322e360cc1b81525061213260201b60201c565b1561273457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b61276561229f6040518060400160405280600781526020016604f534c2d332e360cc1b81525061213260201b60201c565b1561278f57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127c361229f6040518060400160405280600a81526020016904170616368652d322e360b41b81525061213260201b60201c565b156127f057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61282761229f6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b80612868575061286861229f6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561289557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128c761229f604051806040016040528060088152602001674255534c2d312e3160c01b81525061213260201b60201c565b156128f157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161046f929060200161453f565b60608060005b8451811015612993578185828151811061292a5761292a613e96565b6020026020010151604051602001612943929190613aea565b604051602081830303815290604052915060018551612962919061445f565b811461298b5781604051602001612979919061468f565b60405160208183030381529060405291505b60010161290e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129ac57905050905083816000815181106129d7576129d7613e96565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a1057612a10613e96565b60200260200101819052508181600281518110612a2f57612a2f613e96565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a6092918491906133a2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612a9693906134b3565b9050836020015181612aa8919061445f565b84518590612ab790839061445f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612aeb57508161027c565b6020808301519084015160019114612b125750815160208481015190840151829020919020145b8015612b4357825184518590612b2990839061445f565b9052508251602085018051612b3f90839061452c565b9052505b509192915050565b6040805180820190915260008082526020820152612b6a8383836135d3565b5092915050565b6060600082600001516001600160401b03811115612b9157612b916139ea565b6040519080825280601f01601f191660200182016040528015612bbb576020820181803683370190505b50602084810151855192935090830191612b6a918391613679565b60606000612be2610648565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612bff5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c4090613fa5565b935060ff1681518110612c5557612c55613e96565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612c9091906146b4565b604051602081830303815290604052828280612cab90613fa5565b935060ff1681518110612cc057612cc0613e96565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612cf890613fa5565b935060ff1681518110612d0d57612d0d613e96565b602002602001018190525082604051602001612d299190613ee1565b604051602081830303815290604052828280612d4490613fa5565b935060ff1681518110612d5957612d59613e96565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612d9390613fa5565b935060ff1681518110612da857612da8613e96565b6020908102919091010152612dbd87846136f3565b8282612dc881613fa5565b935060ff1681518110612ddd57612ddd613e96565b602090810291909101015285515115612e755760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e1d81613fa5565b935060ff1681518110612e3257612e32613e96565b60209081029190910101528551612e4990846136f3565b8282612e5481613fa5565b935060ff1681518110612e6957612e69613e96565b60200260200101819052505b856080015115612ee35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612ebe81613fa5565b935060ff1681518110612ed357612ed3613e96565b6020026020010181905250612f3e565b8415612f3e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f1d81613fa5565b935060ff1681518110612f3257612f32613e96565b60200260200101819052505b60408601515115612fca5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f7881613fa5565b935060ff1681518110612f8d57612f8d613e96565b60200260200101819052508560400151828280612fa990613fa5565b935060ff1681518110612fbe57612fbe613e96565b60200260200101819052505b8560600151156130345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261301381613fa5565b935060ff168151811061302857613028613e96565b60200260200101819052505b60008160ff166001600160401b03811115613051576130516139ea565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b50905060005b8260ff168160ff1610156130dd57838160ff16815181106130ad576130ad613e96565b6020026020010151828260ff16815181106130ca576130ca613e96565b602090810291909101015260010161308a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561310e57508161027c565b815183516020850151600092916131249161452c565b61312e919061445f565b6020840151909150600190821461314f575082516020840151819020908220145b801561316a5783518551869061316690839061445f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131939284906134b3565b61319d919061452c565b90505b835160208501516131b1919061452c565b8111612b6a57816131c1816146f9565b92505082600001516131f78560200151836131dc919061445f565b86516131e8919061445f565b855160208701518591906134b3565b613201919061452c565b90506131a0565b606060006132168484613173565b61322190600161452c565b6001600160401b03811115613238576132386139ea565b60405190808252806020026020018201604052801561326b57816020015b60608152602001906001900390816132565790505b50905060005b8151811015611c6557613287611e038686612b4b565b82828151811061329957613299613e96565b6020908102919091010152600101613271565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106132f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613321576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061333f57662386f26fc10000830492506010015b6305f5e1008310613357576305f5e100830492506008015b612710831061336b57612710830492506004015b6064831061337d576064830492506002015b600a831061027c5760010192915050565b600061339a8383613733565b159392505050565b6000808584116134a9576020841161345557600084156133ed5760016133c986602061445f565b6133d4906008614712565b6133df906002614810565b6133e9919061445f565b1990505b83518116856133fc898961452c565b613406919061445f565b805190935082165b81811461344057878411613428578794505050505061192e565b836134328161481c565b94505082845116905061340e565b61344a878561452c565b94505050505061192e565b838320613462858861445f565b61346c908761452c565b91505b8582106134a7578482208082036134945761348a868461452c565b935050505061192e565b61349f60018461445f565b92505061346f565b505b5092949350505050565b600083818685116135be576020851161356d57600085156134ff5760016134db87602061445f565b6134e6906008614712565b6134f1906002614810565b6134fb919061445f565b1990505b845181166000876135108b8b61452c565b61351a919061445f565b855190915083165b82811461355f578186106135475761353a8b8b61452c565b965050505050505061192e565b85613551816146f9565b965050838651169050613522565b85965050505050505061192e565b508383206000905b61357f868961445f565b82116135bc5785832080820361359b578394505050505061192e565b6135a660018561452c565b93505081806135b4906146f9565b925050613575565b505b6135c8878761452c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161360093906134b3565b60208087018051918601919091525190915061361c908261445f565b83528451602086015161362f919061452c565b810361363e5760008552613670565b8351835161364c919061452c565b8551869061365b90839061445f565b905250835161366a908261452c565b60208601525b50909392505050565b602081106136b1578151835261369060208461452c565b925061369d60208361452c565b91506136aa60208261445f565b9050613679565b60001981156136e05760016136c783602061445f565b6136d390610100614810565b6136dd919061445f565b90505b9151835183169219169190911790915250565b6060600061370184846106e2565b805160208083015160405193945061371b93909101614833565b60405160208183030381529060405291505092915050565b8151815160009190811115613746575081515b6020808501519084015160005b838110156137ff57825182518082146137cf5760001960208710156137ae5760018461378089602061445f565b61378a919061452c565b613795906008614712565b6137a0906002614810565b6137aa919061445f565b1990505b81811683821681810391146137cc57975061027c9650505050505050565b50505b6137da60208661452c565b94506137e760208561452c565b935050506020816137f8919061452c565b9050613753565b5084518651610cb0919061486f565b610c9f80615e9883390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161385e613863565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161385e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b838110156138ef5781810151838201526020016138d7565b50506000910152565b600081518084526139108160208601602086016138d4565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061192e908301846138f8565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161398081601a8501602088016138d4565b6101d160f51b601a9184019182015283516139a281601c8401602088016138d4565b01601c01949350505050565b60208152600061038a60208301846138f8565b6000602082840312156139d357600080fd5b81516001600160a01b038116811461038a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a2257613a226139ea565b60405290565b6000806001600160401b03841115613a4257613a426139ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a7057613a706139ea565b604052838152905080828401851015613a8857600080fd5b611c658460208301856138d4565b600082601f830112613aa757600080fd5b61038a83835160208501613a28565b600060208284031215613ac857600080fd5b81516001600160401b03811115613ade57600080fd5b61027884828501613a96565b60008351613afc8184602088016138d4565b835190830190613b108183602088016138d4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b5181601a8501602088016138d4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613b8e8160338401602088016138d4565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b606082015260806020820152600061038a60808301846138f8565b600060208284031215613bef57600080fd5b81516001600160401b03811115613c0557600080fd5b8201601f81018413613c1657600080fd5b61027884825160208401613a28565b60008551613c37818460208a016138d4565b602f60f81b9083019081528551613c55816001840160208a016138d4565b602f60f81b600192909101918201528451613c778160028401602089016138d4565b600181830101915050602f60f81b60018201528351613c9d8160028401602088016138d4565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cd060408301846138f8565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d0857600080fd5b8151801515811461038a57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d5081601f8501602087016138d4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613da260408301846138f8565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613de860408301846138f8565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e4e8160148501602087016138d4565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613e8460408301856138f8565b828103602084015261038681856138f8565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ec98160018501602087016138d4565b601160f91b6001939091019283015250600201919050565b60008251613ef38184602087016138d4565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f8281604b8501602087016138d4565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fbb57613fbb613f8f565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161400e8160298501602087016138d4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061038a60808301846138f8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140bb57603f198786030184526140a68583516138f8565b9450602093840193919091019060010161408a565b50929695505050505050565b6000602082840312156140d957600080fd5b81516001600160401b038111156140ef57600080fd5b82016060818503121561410157600080fd5b614109613a00565b81518060030b811461411a57600080fd5b815260208201516001600160401b0381111561413557600080fd5b61414186828501613a96565b60208301525060408201516001600160401b0381111561416057600080fd5b61416c86828501613a96565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141bc8160218501602087016138d4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b60208201526000835161438c8160218501602088016138d4565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143b981602e8401602088016138d4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161400e8160298501602087016138d4565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b6020820152600082516144528160228501602087016138d4565b9190910160220192915050565b8181038181111561027c5761027c613f8f565b6d021b7b73a3930b1ba103730b6b2960951b81526000825161449b81600e8501602087016138d4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561027c5761027c613f8f565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145778160188501602088016138d4565b6301034b7160e51b601891840191820152835161459b81601c8401602088016138d4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146a18184602087016138d4565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516146ec81601c8501602087016138d4565b91909101601c0192915050565b60006001820161470b5761470b613f8f565b5060010190565b808202811582820484141761027c5761027c613f8f565b6001815b60018411156147645780850481111561474857614748613f8f565b600184161561475657908102905b60019390931c92800261472d565b935093915050565b60008261477b5750600161027c565b816147885750600061027c565b816001811461479e57600281146147a8576147c4565b600191505061027c565b60ff8411156147b9576147b9613f8f565b50506001821b61027c565b5060208310610133831016604e8410600b84101617156147e7575081810a61027c565b6147f46000198484614729565b806000190482111561480857614808613f8f565b029392505050565b600061038a838361476c565b60008161482b5761482b613f8f565b506000190190565b600083516148458184602088016138d4565b601d60f91b90830190815283516148638160018401602088016138d4565b01600101949350505050565b8181036000831280158383131683831282161715612b6a57612b6a613f8f565b6080516115cb6148cd600039600081816101830152818161046e015281816104d00152818161083f0152818161094e01526109b001526115cb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610332578063d9caed1214610345578063e63ab1e91461035857600080fd5b8063a217fddf14610317578063c8a023621461031f57600080fd5b80638456cb59116100b25780638456cb59146102a257806385f438c1146102aa57806391d14854146102d157600080fd5b80636133b4bb1461026f57806381100bf01461028257600080fd5b80632f2ff15d116101245780633c2f05a8116101095780633c2f05a8146102375780633f4ba83a1461025c5780635c975abb1461026457600080fd5b80632f2ff15d1461021157806336568abe1461022457600080fd5b806301ffc9a714610156578063116191b61461017e57806321fc65f2146101ca578063248a9ca3146101df575b600080fd5b6101696101643660046111fa565b61037f565b60405190151581526020015b60405180910390f35b6101a57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101dd6101d83660046112ae565b610418565b005b6102036101ed36600461131d565b6000908152600160208190526040909120015490565b604051908152602001610175565b6101dd61021f366004611336565b6105ba565b6101dd610232366004611336565b6105e6565b6002546101a590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101dd610644565b60025460ff16610169565b6101dd61027d366004611362565b610679565b6003546101a59073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd6108c6565b6102037f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102df366004611336565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610203600081565b6101dd61032d3660046112ae565b6108f8565b6101dd610340366004611336565b610a80565b6101dd6103533660046113bc565b610aa6565b6102037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610420610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044a81610bb6565b610452610bc0565b61049373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061050d9089908990899089908990600401611442565b600060405180830381600087803b15801561052757600080fd5b505af115801561053b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a09392919061149f565b60405180910390a3506105b36001600055565b5050505050565b600082815260016020819052604090912001546105d681610bb6565b6105e08383610c8c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610635576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063f8282610d57565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61066e81610bb6565b610676610e16565b50565b600254610100900473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106a88660056114c2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071357600080fd5b505af1158015610727573d6000803e3d6000fd5b5050600254600580546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810192909252610100909204909116925063a9059cbb91506044016020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d391906114fc565b506002546107ff90610100900473ffffffffffffffffffffffffffffffffffffffff1685858585610418565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152610100909204909116906370a0823190602401602060405180830381865afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b9919061151e565b156105e0576105e0611537565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108f081610bb6565b610676610e93565b610900610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461092a81610bb6565b610932610bc0565b61097373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109ed9089908990899089908990600401611442565b600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a09392919061149f565b60008281526001602081905260409091200154610a9c81610bb6565b6105e08383610d57565b610aae610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ad881610bb6565b610ae0610bc0565b610b0173ffffffffffffffffffffffffffffffffffffffff85168484610bff565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6091815260200190565b60405180910390a35061063f6001600055565b600260005403610baf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6106768133610eee565b60025460ff1615610bfd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063f908490610f7f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610412565b506000610412565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610412565b610e1e611015565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e9b610bc0565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e693390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f7b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fa173ffffffffffffffffffffffffffffffffffffffff841683611051565b90508051600014158015610fc6575080806020019051810190610fc491906114fc565b155b1561063f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f72565b60025460ff16610bfd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061105f83836000611066565b9392505050565b6060814710156110a4576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f72565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110cd9190611566565b60006040518083038185875af1925050503d806000811461110a576040519150601f19603f3d011682016040523d82523d6000602084013e61110f565b606091505b509150915061111f868383611129565b9695505050505050565b60608261113e57611139826111b8565b61105f565b8151158015611162575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111b1576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f72565b508061105f565b8051156111c85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561120c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461105f57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b919050565b60008083601f84011261127757600080fd5b50813567ffffffffffffffff81111561128f57600080fd5b6020830191508360208285010111156112a757600080fd5b9250929050565b6000806000806000608086880312156112c657600080fd5b6112cf8661123c565b94506112dd6020870161123c565b935060408601359250606086013567ffffffffffffffff81111561130057600080fd5b61130c88828901611265565b969995985093965092949392505050565b60006020828403121561132f57600080fd5b5035919050565b6000806040838503121561134957600080fd5b823591506113596020840161123c565b90509250929050565b6000806000806060858703121561137857600080fd5b6113818561123c565b935060208501359250604085013567ffffffffffffffff8111156113a457600080fd5b6113b087828801611265565b95989497509550505050565b6000806000606084860312156113d157600080fd5b6113da8461123c565b92506113e86020850161123c565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114946080830184866113f9565b979650505050505050565b8381526040602082015260006114b96040830184866113f9565b95945050505050565b80820180821115610412577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561150e57600080fd5b8151801515811461105f57600080fd5b60006020828403121561153057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611587576020818601810151858301520161156d565b50600092019182525091905056fea2646970667358221220c22f4256b34c7ceff39a5acf8d5ae318549565a6265a9a23b2d9459a9845ff3f64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", } // ERC20CustodyEchidnaTestABI is the input ABI used to generate the binding from. @@ -512,37 +512,6 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) TestERC20( return _ERC20CustodyEchidnaTest.Contract.TestERC20(&_ERC20CustodyEchidnaTest.CallOpts) } -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ERC20CustodyEchidnaTest.contract.Call(opts, &out, "tssAddress") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) TssAddress() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.TssAddress(&_ERC20CustodyEchidnaTest.CallOpts) -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestCallerSession) TssAddress() (common.Address, error) { - return _ERC20CustodyEchidnaTest.Contract.TssAddress(&_ERC20CustodyEchidnaTest.CallOpts) -} - // GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. // // Solidity: function grantRole(bytes32 role, address account) returns() diff --git a/v2/pkg/gatewayevm.sol/gatewayevm.go b/v2/pkg/gatewayevm.sol/gatewayevm.go index 32a32fa6..5eb9dcca 100644 --- a/v2/pkg/gatewayevm.sol/gatewayevm.go +++ b/v2/pkg/gatewayevm.sol/gatewayevm.go @@ -31,8 +31,8 @@ var ( // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d9a6100fd60003960008181611b5701528181611b800152611fc90152612d9a6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b5061020861020336600461280d565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d61023836600461286b565b61074e565b005b34801561024b57600080fd5b5061023d61025a3660046128cf565b610842565b61027261026d3660046128cf565b61089c565b6040516102149190612990565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d23660046129a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d6103223660046128cf565b61092d565b34801561033357600080fd5b5061023d6103423660046129bc565b610a5a565b61023d6103553660046128cf565b610aa4565b34801561036657600080fd5b5061023d6103753660046129bc565b610c2b565b34801561038657600080fd5b5061023d610c7c565b61023d61039d366004612a17565b610cb1565b3480156103ae57600080fd5b5061023d6103bd366004612b1e565b610cd0565b3480156103ce57600080fd5b50610306610fad565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fdc565b3480156104a357600080fd5b5061023d6104b2366004612b8d565b61100e565b3480156104c357600080fd5b506102086104d23660046129bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c936600461286b565b6110b3565b3480156105da57600080fd5b5061023d6105e9366004612b1e565b6111a7565b3480156105fa57600080fd5b5061023d610609366004612bdf565b611321565b34801561061a57600080fd5b5061023d6106293660046129bc565b6115d6565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d61069036600461286b565b61161a565b3480156106a157600080fd5b5061023d6106b0366004612c22565b611747565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117fa565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a6118f1565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161088f929190612c9e565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c8816117fa565b6108d06118f1565b60006108dd86868661194f565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161091c93929190612cba565b60405180910390a295945050505050565b6109356118f1565b3460000361096f576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109bc576040519150601f19603f3d011682016040523d82523d6000602084013e6109c1565b606091505b5090915050801515600003610a02576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a4c9493929190612cd4565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a94816117fa565b610a9e8383611804565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ace816117fa565b610ad66118f1565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b24576040519150601f19603f3d011682016040523d82523d6000602084013e610b29565b606091505b509150915081610b65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610bac9088908890600401612c9e565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610c1b93929190612cba565b60405180910390a2505050505050565b6001600160a01b0381163314610c6d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c7782826119f8565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ca6816117fa565b610cae611abc565b50565b610cb9611b4c565b610cc282611c1c565b610ccc8282611c27565b5050565b610cd8611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d02816117fa565b610d0a6118f1565b83600003610d44576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4e8686611dcc565b610d84576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e109190612cfd565b610e46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e5386858561194f565b9050610e5f8787611dcc565b610e95576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f199190612d1f565b90508015610f2b57610f2b8882611e5c565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f7293929190612cba565b60405180910390a3505050610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610fb7611fbe565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611006816117fa565b610cae612020565b6110166118f1565b83600003611050576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105b338486612099565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110a49493929190612cd4565b60405180910390a35050505050565b60006110be816117fa565b6000546001600160a01b031615611101576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611141576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6111af611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111d9816117fa565b6111e16118f1565b8360000361121b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61122f6001600160a01b03871686866121ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906112769086908690600401612c9e565b600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112ef93929190612cba565b60405180910390a350610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561136c5750825b905060008267ffffffffffffffff1660011480156113895750303b155b905081158015611397575080155b156113ce576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561142f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061144c57506001600160a01b038716155b15611483576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61148b612261565b611493612269565b61149b612261565b6114a3612279565b6114ae600087611804565b506114d97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611804565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115377f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611804565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115cc5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611610816117fa565b610a9e83836119f8565b6116226118f1565b3460000361165c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146116a9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ae565b606091505b50909150508015156000036116ef576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61174f6118f1565b81600003611789576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611794338284612099565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4848460405161088f9291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610cae8133612289565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118e7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561189d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561194d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b031634868660405161196f929190612d38565b60006040518083038185875af1925050503d80600081146119ac576040519150601f19603f3d011682016040523d82523d6000602084013e6119b1565b606091505b5091509150816119ed576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118e7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611ac4612316565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611be557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611bd97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ccc816117fa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c9f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9c91810190612d1f565b60015b611ce5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611d41576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611cdc565b610c778383612371565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611dc6576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611e38573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612cfd565b6003546001600160a01b0390811690831603611f7e576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f029190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611f6257600080fd5b505af1158015611f76573d6000803e3d6000fd5b505050505050565b600054610ccc906001600160a01b038481169116836121ed565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120286118f1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611b2e565b6003546001600160a01b03908116908316036121d1576120c46001600160a01b0383168430846123c7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156121b457600080fd5b505af11580156121c8573d6000803e3d6000fd5b50505050505050565b600054610c77906001600160a01b0384811691869116846123c7565b6040516001600160a01b03838116602483015260448201839052610c7791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612400565b61194d61247c565b61227161247c565b61194d6124e3565b61228161247c565b61194d6124eb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ccc576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611cdc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661194d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237a8261253c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156123bf57610c7782826125e4565b610ccc61265a565b6040516001600160a01b038481166024830152838116604483015260648201839052610a9e9186918216906323b872dd9060840161221a565b60006124156001600160a01b03841683612692565b9050805160001415801561243a5750808060200190518101906124389190612cfd565b155b15610c77576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611cdc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661194d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9861247c565b6124f361247c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b60000361258b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611cdc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516126019190612d48565b600060405180830381855af49150503d806000811461263c576040519150601f19603f3d011682016040523d82523d6000602084013e612641565b606091505b50915091506126518583836126a0565b95945050505050565b341561194d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606119f183836000612715565b6060826126b5576126b0826127cb565b6119f1565b81511580156126cc57506001600160a01b0384163b155b1561270e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611cdc565b50806119f1565b606081471015612753576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611cdc565b600080856001600160a01b0316848660405161276f9190612d48565b60006040518083038185875af1925050503d80600081146127ac576040519150601f19603f3d011682016040523d82523d6000602084013e6127b1565b606091505b50915091506127c18683836126a0565b9695505050505050565b8051156127db5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561281f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119f157600080fd5b80356001600160a01b038116811461286657600080fd5b919050565b60006020828403121561287d57600080fd5b6119f18261284f565b60008083601f84011261289857600080fd5b50813567ffffffffffffffff8111156128b057600080fd5b6020830191508360208285010111156128c857600080fd5b9250929050565b6000806000604084860312156128e457600080fd5b6128ed8461284f565b9250602084013567ffffffffffffffff81111561290957600080fd5b61291586828701612886565b9497909650939450505050565b60005b8381101561293d578181015183820152602001612925565b50506000910152565b6000815180845261295e816020860160208601612922565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119f16020830184612946565b6000602082840312156129b557600080fd5b5035919050565b600080604083850312156129cf57600080fd5b823591506129df6020840161284f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612a2a57600080fd5b612a338361284f565b9150602083013567ffffffffffffffff811115612a4f57600080fd5b8301601f81018513612a6057600080fd5b803567ffffffffffffffff811115612a7a57612a7a6129e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ae657612ae66129e8565b604052818152828201602001871015612afe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612b3657600080fd5b612b3f8661284f565b9450612b4d6020870161284f565b935060408601359250606086013567ffffffffffffffff811115612b7057600080fd5b612b7c88828901612886565b969995985093965092949392505050565b600080600080600060808688031215612ba557600080fd5b612bae8661284f565b945060208601359350612bc36040870161284f565b9250606086013567ffffffffffffffff811115612b7057600080fd5b600080600060608486031215612bf457600080fd5b612bfd8461284f565b9250612c0b6020850161284f565b9150612c196040850161284f565b90509250925092565b600080600060608486031215612c3757600080fd5b612c408461284f565b925060208401359150612c196040850161284f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612cb2602083018486612c55565b949350505050565b838152604060208201526000612651604083018486612c55565b8481526001600160a01b03841660208201526060604082015260006127c1606083018486612c55565b600060208284031215612d0f57600080fd5b815180151581146119f157600080fd5b600060208284031215612d3157600080fd5b5051919050565b8183823760009101908152919050565b60008251612d5a818460208701612922565b919091019291505056fea26469706673582212201821442f44389baeb888640e13de33662eed4aff4f3c0ea195d55f55d8f2920864736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612f486100fd60003960008181611d4a01528181611d7301526121420152612f486000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046129bb565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612a19565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612a7d565b610842565b61027261026d366004612a7d565b6108cd565b6040516102149190612b3e565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612b51565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612a7d565b610990565b34801561033357600080fd5b5061023d610342366004612b6a565b610ae3565b61023d610355366004612a7d565b610b2d565b34801561036657600080fd5b5061023d610375366004612b6a565b610d1c565b34801561038657600080fd5b5061023d610d68565b61023d61039d366004612bc5565b610d9d565b3480156103ae57600080fd5b5061023d6103bd366004612ccc565b610dbc565b3480156103ce57600080fd5b50610306611099565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d6110c8565b3480156104a357600080fd5b5061023d6104b2366004612d3b565b6110fa565b3480156104c357600080fd5b506102086104d2366004612b6a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612a19565b6111d0565b3480156105da57600080fd5b5061023d6105e9366004612ccc565b6112c4565b3480156105fa57600080fd5b5061023d610609366004612d8d565b61143d565b34801561061a57600080fd5b5061023d610629366004612b6a565b6116f2565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612a19565b611736565b3480156106a157600080fd5b5061023d6106b0366004612dd0565b61188b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611946565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611950565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611a3d565b610852611a9b565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190612e4c565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611946565b610901611a3d565b610909611a9b565b6000610916868686611b42565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161095593929190612e68565b60405180910390a2915061098860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610998611a3d565b6109a0611a9b565b346000036109da576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a27576040519150601f19603f3d011682016040523d82523d6000602084013e610a2c565b606091505b5050905080610a67576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610ab19493929190612e82565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b1d81611946565b610b278383611950565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b5781611946565b610b5f611a3d565b610b67611a9b565b6001600160a01b038416610ba7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bf4576040519150601f19603f3d011682016040523d82523d6000602084013e610bf9565b606091505b5050905080610c34576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610c7b9087908790600401612e4c565b600060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610cea93929190612e68565b60405180910390a250610b2760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610d5e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611beb565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d9281611946565b610d9a611caf565b50565b610da5611d3f565b610dae82611e0f565b610db88282611e1a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610de681611946565b610dee611a3d565b610df6611a9b565b83600003610e30576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e3a8686611f3e565b610e70576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190612eab565b610f32576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f3f868585611b42565b9050610f4b8787611f3e565b610f81576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110059190612ecd565b90508015611017576110178882611fce565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161105e93929190612e68565b60405180910390a3505061109160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006110a3612137565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6110f281611946565b610d9a612199565b611102611a3d565b61110a611a9b565b83600003611144576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114f338486612212565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516111989493929190612e82565b60405180910390a36111c960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006111db81611946565b6000546001600160a01b03161561121e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661125e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112887f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611950565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96112ee81611946565b6112f6611a3d565b6112fe611a9b565b83600003611338576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61134c6001600160a01b038716868661239b565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906113939086908690600401612e4c565b600060405180830381600087803b1580156113ad57600080fd5b505af11580156113c1573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161140c93929190612e68565b60405180910390a361109160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156114885750825b905060008267ffffffffffffffff1660011480156114a55750303b155b9050811580156114b3575080155b156114ea576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561154b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061156857506001600160a01b038716155b1561159f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a761240f565b6115af612417565b6115b761240f565b6115bf612427565b6115ca600087611950565b506115f57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611950565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556116537f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611950565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116e85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461172c81611946565b610b278383611beb565b61173e611a3d565b611746611a9b565b34600003611780576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146117cd576040519150601f19603f3d011682016040523d82523d6000602084013e6117d2565b606091505b505090508061180d576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610d9a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611893611a3d565b61189b611a9b565b816000036118d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e0338284612212565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d9a8133612437565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611a33576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556119e93390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611a99576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611b16576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611b62929190612ee6565b60006040518083038185875af1925050503d8060008114611b9f576040519150601f19603f3d011682016040523d82523d6000602084013e611ba4565b606091505b509150915081611be0576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611a33576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611cb76124c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dd857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dcc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611a99576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610db881611946565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e92575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e8f91810190612ecd565b60015b611ed8576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f34576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611ecf565b6108c8838361251f565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be49190612eab565b6003546001600160a01b039081169083160361211d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190612eab565b6120aa576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561210957600080fd5b505af1158015611091573d6000803e3d6000fd5b600054610db8906001600160a01b0384811691168361239b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a99576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121a1611a3d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d21565b6003546001600160a01b039081169083160361237f5761223d6001600160a01b038316843084612575565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156122a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cd9190612eab565b612303576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561236257600080fd5b505af1158015612376573d6000803e3d6000fd5b50505050505050565b6000546108c8906001600160a01b038481169186911684612575565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125ae565b611a9961262a565b61241f61262a565b611a99612691565b61242f61262a565b611a99612699565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610db8576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611ecf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611a99576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612528826126ea565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561256d576108c88282612792565b610db8612808565b6040516001600160a01b038481166024830152838116604483015260648201839052610b279186918216906323b872dd906084016123c8565b60006125c36001600160a01b03841683612840565b905080516000141580156125e85750808060200190518101906125e69190612eab565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611ecf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611a99576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c61262a565b6126a161262a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612739576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611ecf565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127af9190612ef6565b600060405180830381855af49150503d80600081146127ea576040519150601f19603f3d011682016040523d82523d6000602084013e6127ef565b606091505b50915091506127ff85838361284e565b95945050505050565b3415611a99576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611be4838360006128c3565b6060826128635761285e82612979565b611be4565b815115801561287a57506001600160a01b0384163b155b156128bc576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611ecf565b5080611be4565b606081471015612901576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611ecf565b600080856001600160a01b0316848660405161291d9190612ef6565b60006040518083038185875af1925050503d806000811461295a576040519150601f19603f3d011682016040523d82523d6000602084013e61295f565b606091505b509150915061296f86838361284e565b9695505050505050565b8051156129895780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129cd57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611be457600080fd5b80356001600160a01b0381168114612a1457600080fd5b919050565b600060208284031215612a2b57600080fd5b611be4826129fd565b60008083601f840112612a4657600080fd5b50813567ffffffffffffffff811115612a5e57600080fd5b602083019150836020828501011115612a7657600080fd5b9250929050565b600080600060408486031215612a9257600080fd5b612a9b846129fd565b9250602084013567ffffffffffffffff811115612ab757600080fd5b612ac386828701612a34565b9497909650939450505050565b60005b83811015612aeb578181015183820152602001612ad3565b50506000910152565b60008151808452612b0c816020860160208601612ad0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611be46020830184612af4565b600060208284031215612b6357600080fd5b5035919050565b60008060408385031215612b7d57600080fd5b82359150612b8d602084016129fd565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612bd857600080fd5b612be1836129fd565b9150602083013567ffffffffffffffff811115612bfd57600080fd5b8301601f81018513612c0e57600080fd5b803567ffffffffffffffff811115612c2857612c28612b96565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612c9457612c94612b96565b604052818152828201602001871015612cac57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ce457600080fd5b612ced866129fd565b9450612cfb602087016129fd565b935060408601359250606086013567ffffffffffffffff811115612d1e57600080fd5b612d2a88828901612a34565b969995985093965092949392505050565b600080600080600060808688031215612d5357600080fd5b612d5c866129fd565b945060208601359350612d71604087016129fd565b9250606086013567ffffffffffffffff811115612d1e57600080fd5b600080600060608486031215612da257600080fd5b612dab846129fd565b9250612db9602085016129fd565b9150612dc7604085016129fd565b90509250925092565b600080600060608486031215612de557600080fd5b612dee846129fd565b925060208401359150612dc7604085016129fd565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612e60602083018486612e03565b949350505050565b8381526040602082015260006127ff604083018486612e03565b8481526001600160a01b038416602082015260606040820152600061296f606083018486612e03565b600060208284031215612ebd57600080fd5b81518015158114611be457600080fd5b600060208284031215612edf57600080fd5b5051919050565b8183823760009101908152919050565b60008251612f08818460208701612ad0565b919091019291505056fea26469706673582212208889b449de125bcd9995c2452115e4c4e941948f5ff17d068f0677c925a7730064736f6c634300081a0033", } // GatewayEVMABI is the input ABI used to generate the binding from. @@ -827,23 +827,23 @@ func (_GatewayEVM *GatewayEVMTransactorSession) GrantRole(role [32]byte, account // Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function initialize(address _tssAddress, address _zetaToken, address _admin) returns() -func (_GatewayEVM *GatewayEVMTransactor) Initialize(opts *bind.TransactOpts, _tssAddress common.Address, _zetaToken common.Address, _admin common.Address) (*types.Transaction, error) { - return _GatewayEVM.contract.Transact(opts, "initialize", _tssAddress, _zetaToken, _admin) +// Solidity: function initialize(address tssAddress_, address zetaToken_, address admin_) returns() +func (_GatewayEVM *GatewayEVMTransactor) Initialize(opts *bind.TransactOpts, tssAddress_ common.Address, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayEVM.contract.Transact(opts, "initialize", tssAddress_, zetaToken_, admin_) } // Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function initialize(address _tssAddress, address _zetaToken, address _admin) returns() -func (_GatewayEVM *GatewayEVMSession) Initialize(_tssAddress common.Address, _zetaToken common.Address, _admin common.Address) (*types.Transaction, error) { - return _GatewayEVM.Contract.Initialize(&_GatewayEVM.TransactOpts, _tssAddress, _zetaToken, _admin) +// Solidity: function initialize(address tssAddress_, address zetaToken_, address admin_) returns() +func (_GatewayEVM *GatewayEVMSession) Initialize(tssAddress_ common.Address, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayEVM.Contract.Initialize(&_GatewayEVM.TransactOpts, tssAddress_, zetaToken_, admin_) } // Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function initialize(address _tssAddress, address _zetaToken, address _admin) returns() -func (_GatewayEVM *GatewayEVMTransactorSession) Initialize(_tssAddress common.Address, _zetaToken common.Address, _admin common.Address) (*types.Transaction, error) { - return _GatewayEVM.Contract.Initialize(&_GatewayEVM.TransactOpts, _tssAddress, _zetaToken, _admin) +// Solidity: function initialize(address tssAddress_, address zetaToken_, address admin_) returns() +func (_GatewayEVM *GatewayEVMTransactorSession) Initialize(tssAddress_ common.Address, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayEVM.Contract.Initialize(&_GatewayEVM.TransactOpts, tssAddress_, zetaToken_, admin_) } // Pause is a paid mutator transaction binding the contract method 0x8456cb59. @@ -932,44 +932,44 @@ func (_GatewayEVM *GatewayEVMTransactorSession) RevokeRole(role [32]byte, accoun // SetConnector is a paid mutator transaction binding the contract method 0x10188aef. // -// Solidity: function setConnector(address _zetaConnector) returns() -func (_GatewayEVM *GatewayEVMTransactor) SetConnector(opts *bind.TransactOpts, _zetaConnector common.Address) (*types.Transaction, error) { - return _GatewayEVM.contract.Transact(opts, "setConnector", _zetaConnector) +// Solidity: function setConnector(address zetaConnector_) returns() +func (_GatewayEVM *GatewayEVMTransactor) SetConnector(opts *bind.TransactOpts, zetaConnector_ common.Address) (*types.Transaction, error) { + return _GatewayEVM.contract.Transact(opts, "setConnector", zetaConnector_) } // SetConnector is a paid mutator transaction binding the contract method 0x10188aef. // -// Solidity: function setConnector(address _zetaConnector) returns() -func (_GatewayEVM *GatewayEVMSession) SetConnector(_zetaConnector common.Address) (*types.Transaction, error) { - return _GatewayEVM.Contract.SetConnector(&_GatewayEVM.TransactOpts, _zetaConnector) +// Solidity: function setConnector(address zetaConnector_) returns() +func (_GatewayEVM *GatewayEVMSession) SetConnector(zetaConnector_ common.Address) (*types.Transaction, error) { + return _GatewayEVM.Contract.SetConnector(&_GatewayEVM.TransactOpts, zetaConnector_) } // SetConnector is a paid mutator transaction binding the contract method 0x10188aef. // -// Solidity: function setConnector(address _zetaConnector) returns() -func (_GatewayEVM *GatewayEVMTransactorSession) SetConnector(_zetaConnector common.Address) (*types.Transaction, error) { - return _GatewayEVM.Contract.SetConnector(&_GatewayEVM.TransactOpts, _zetaConnector) +// Solidity: function setConnector(address zetaConnector_) returns() +func (_GatewayEVM *GatewayEVMTransactorSession) SetConnector(zetaConnector_ common.Address) (*types.Transaction, error) { + return _GatewayEVM.Contract.SetConnector(&_GatewayEVM.TransactOpts, zetaConnector_) } // SetCustody is a paid mutator transaction binding the contract method 0xae7a3a6f. // -// Solidity: function setCustody(address _custody) returns() -func (_GatewayEVM *GatewayEVMTransactor) SetCustody(opts *bind.TransactOpts, _custody common.Address) (*types.Transaction, error) { - return _GatewayEVM.contract.Transact(opts, "setCustody", _custody) +// Solidity: function setCustody(address custody_) returns() +func (_GatewayEVM *GatewayEVMTransactor) SetCustody(opts *bind.TransactOpts, custody_ common.Address) (*types.Transaction, error) { + return _GatewayEVM.contract.Transact(opts, "setCustody", custody_) } // SetCustody is a paid mutator transaction binding the contract method 0xae7a3a6f. // -// Solidity: function setCustody(address _custody) returns() -func (_GatewayEVM *GatewayEVMSession) SetCustody(_custody common.Address) (*types.Transaction, error) { - return _GatewayEVM.Contract.SetCustody(&_GatewayEVM.TransactOpts, _custody) +// Solidity: function setCustody(address custody_) returns() +func (_GatewayEVM *GatewayEVMSession) SetCustody(custody_ common.Address) (*types.Transaction, error) { + return _GatewayEVM.Contract.SetCustody(&_GatewayEVM.TransactOpts, custody_) } // SetCustody is a paid mutator transaction binding the contract method 0xae7a3a6f. // -// Solidity: function setCustody(address _custody) returns() -func (_GatewayEVM *GatewayEVMTransactorSession) SetCustody(_custody common.Address) (*types.Transaction, error) { - return _GatewayEVM.Contract.SetCustody(&_GatewayEVM.TransactOpts, _custody) +// Solidity: function setCustody(address custody_) returns() +func (_GatewayEVM *GatewayEVMTransactorSession) SetCustody(custody_ common.Address) (*types.Transaction, error) { + return _GatewayEVM.Contract.SetCustody(&_GatewayEVM.TransactOpts, custody_) } // Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go index af1ce1ad..1a9ebe47 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMInboundTestMetaData contains all meta data concerning the GatewayEVMInboundTest contract. var GatewayEVMInboundTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061b7c8806100436000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063ba414fa61161008c578063e20c9f7111610066578063e20c9f711461027b578063f96c02df14610283578063fa7626d41461028b57600080fd5b8063ba414fa614610253578063bb93f11e1461026b578063c13d738f1461027357600080fd5b8063aa030c1c116100bd578063aa030c1c1461023b578063b0464fdc14610243578063b5508aa91461024b57600080fd5b8063916a17c61461021e5780639fd1e5971461023357600080fd5b806330f7c04f1161013a5780636459542a116101145780636459542a146101ec57806366d9a9a0146101f457806385226c811461020957600080fd5b806330f7c04f146101d45780633e5e3c23146101dc5780633f7286f4146101e457600080fd5b80630a9254e41161016b5780630a9254e4146101995780631ed7831c146101a15780632ade3880146101bf57600080fd5b806306978ca3146101875780630724d8e314610191575b600080fd5b61018f610298565b005b61018f6103c5565b61018f61057c565b6101a9610cb3565b6040516101b691906168aa565b60405180910390f35b6101c7610d15565b6040516101b69190616946565b61018f610e57565b6101a96112c4565b6101a9611324565b61018f611384565b6101fc611781565b6040516101b69190616aac565b610211611903565b6040516101b69190616b4a565b6102266119d3565b6040516101b69190616bc1565b61018f611ace565b61018f611cea565b610226611ecf565b610211611fca565b61025b61209a565b60405190151581526020016101b6565b61018f61216e565b61018f612308565b6101a96124b7565b61018f612517565b601f5461025b9060ff1681565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561032e57600080fd5b505af1158015610342573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024016000604051808303818588803b1580156103a957600080fd5b505af11580156103bd573d6000803e3d6000fd5b505050505050565b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561053b57600080fd5b505af115801561054f573d6000803e3d6000fd5b50506027546001600160a01b0316319250610577915061057190508484616c87565b826126b9565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516105ce906167ca565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610653573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610698906167ca565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561071c573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261080d919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052612738565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610899906167d7565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108d5573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610930906167e4565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610974573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2057600080fd5b505af1158015610a34573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b9e57600080fd5b505af1158015610bb2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c1457600080fd5b505af1158015610c28573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610d0b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ced575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610e37578382906000526020600020018054610daa90616c9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd690616c9a565b8015610e235780601f10610df857610100808354040283529160200191610e23565b820191906000526020600020905b815481529060010190602001808311610e0657829003601f168201915b505050505081526020019060010190610d8b565b505050508152505081526020019060010190610d39565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190616ce7565b9050610ef46000826126b9565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4926110f1928992909116908790616d22565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f9361115293908216928992909116908790600401616d4a565b600060405180830381600087803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112109190616ce7565b905061121c84826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190616ce7565b90506112bd856028546105719190616d81565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156113f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114149190616ce7565b90506114216000826126b9565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561154257600080fd5b505af1158015611556573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b15801561163057600080fd5b505af1158015611644573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190616ce7565b90506116e083826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190616ce7565b9050610cad846028546105719190616d81565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002090600202016040518060400160405290816000820180546117d890616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461180490616c9a565b80156118515780601f1061182657610100808354040283529160200191611851565b820191906000526020600020905b81548152906001019060200180831161183457829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156118eb57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116118985790505b505050505081525050815260200190600101906117a5565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461194690616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461197290616c9a565b80156119bf5780601f10611994576101008083540402835291602001916119bf565b820191906000526020600020905b8154815290600101906020018083116119a257829003601f168201915b505050505081526020019060010190611927565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611ab657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611a635790505b505050505081525050815260200190600101906119f7565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a490611c419087906000908790616d22565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d928792611c9b92909116908690600401616d94565b6000604051808303818588803b158015611cb457600080fd5b505af1158015611cc8573d6000803e3d6000fd5b50506027546001600160a01b0316319250610cad915061057190508585616c87565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde390611e4a908590616db6565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611ea1929116908590600401616d94565b600060405180830381600087803b158015611ebb57600080fd5b505af11580156112bd573d6000803e3d6000fd5b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611fb257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f5f5790505b50505050508152505081526020019060010190611ef3565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461200d90616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461203990616c9a565b80156120865780601f1061205b57610100808354040283529160200191612086565b820191906000526020600020905b81548152906001019060200180831161206957829003601f168201915b505050505081526020019060010190611fee565b60085460009060ff16156120b2575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121679190616ce7565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906122659060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b15801561227f57600080fd5b505af1158015612293573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f94506122ee9392831692889216908790600401616d4a565b600060405180830381600087803b1580156103a957600080fd5b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906123ff9060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d935086926124819216908690600401616d94565b6000604051808303818588803b15801561249a57600080fd5b505af11580156124ae573d6000803e3d6000fd5b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af115801561258a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ae9190616d00565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561264257600080fd5b505af1158015612656573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611ea1565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561272457600080fd5b505afa1580156103bd573d6000803e3d6000fd5b60006127426167f1565b61274d848483612757565b9150505b92915050565b60008061276485846127d2565b90506127c76040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016127b2929190616d94565b604051602081830303815290604052856127de565b9150505b9392505050565b60006127cb838361280c565b60c08101515160009015612802576127fb84848460c00151612827565b90506127cb565b6127fb84846129cd565b60006128188383612ab8565b6127cb838360200151846127de565b600080612832612ac8565b905060006128408683612b9b565b905060006128578260600151836020015185613041565b9050600061286783838989613253565b90506000612874826140d0565b602081015181519192509060030b156128e75789826040015160405160200161289e929190616dc9565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526128de91600401616db6565b60405180910390fd5b600061292a6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161429f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061297d908490600401616db6565b602060405180830381865afa15801561299a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129be9190616e4a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590612a22908790600401616db6565b600060405180830381865afa158015612a3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a679190810190616f5b565b90506000612a958285604051602001612a81929190616f90565b60405160208183030381529060405261449f565b90506001600160a01b03811661274d57848460405160200161289e929190616fbf565b612ac4828260006144b2565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90612b4f90849060040161706a565b600060405180830381865afa158015612b6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b9491908101906170b1565b9250505090565b612bcd6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050612c186040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b612c21856145b5565b60208201526000612c318661499a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015612c73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c9b91908101906170b1565b86838560200151604051602001612cb594939291906170fa565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190612d0d908590600401616db6565b600060405180830381865afa158015612d2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5291908101906170b1565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690612d9a9084906004016171fe565b602060405180830381865afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddb9190616d00565b612df0578160405160200161289e9190617250565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612e359084906004016172e2565b600060405180830381865afa158015612e52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e7a91908101906170b1565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690612ec1908490600401617334565b602060405180830381865afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f029190616d00565b15612f97576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612f4c908490600401617334565b600060405180830381865afa158015612f69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612f9191908101906170b1565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001612fbc9190617386565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612fe89291906173f2565b600060405180830381865afa158015613005573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261302d91908101906170b1565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161305d5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106130bd576130bd617417565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061311157613111617417565b60200260200101819052508460405160200161312d9190617446565b6040516020818303038152906040528160028151811061314f5761314f617417565b60200260200101819052508260405160200161316b91906174b2565b6040516020818303038152906040528160038151811061318d5761318d617417565b602002602001018190525060006131a3826140d0565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506132349060408051808201825260008082526020918201528151808301909252845182528085019082015290614c1d565b613249578560405160200161289e91906174f3565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156132a3565b511590565b6134175782602001511561335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016128de565b8260c0015115613417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016128de565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161343057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061348b90617584565b935060ff16815181106134a0576134a0617417565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016134f191906175a3565b60405160208183030381529060405282828061350c90617584565b935060ff168151811061352157613521617417565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061356e90617584565b935060ff168151811061358357613583617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806135d090617584565b935060ff16815181106135e5576135e5617417565b6020026020010181905250876020015182828061360190617584565b935060ff168151811061361657613616617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061366390617584565b935060ff168151811061367857613678617417565b60209081029190910101528751828261369081617584565b935060ff16815181106136a5576136a5617417565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806136f290617584565b935060ff168151811061370757613707617417565b602002602001018190525061371b46614c7e565b828261372681617584565b935060ff168151811061373b5761373b617417565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061378890617584565b935060ff168151811061379d5761379d617417565b6020026020010181905250868282806137b590617584565b935060ff16815181106137ca576137ca617417565b60209081029190910101528551156138f15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261381b81617584565b935060ff168151811061383057613830617417565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90613880908990600401616db6565b600060405180830381865afa15801561389d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138c591908101906170b1565b82826138d081617584565b935060ff16815181106138e5576138e5617417565b60200260200101819052505b8460200151156139c15760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261393a81617584565b935060ff168151811061394f5761394f617417565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061399c90617584565b935060ff16815181106139b1576139b1617417565b6020026020010181905250613b88565b6139f961329e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b613a8c5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613a3c81617584565b935060ff1681518110613a5157613a51617417565b60200260200101819052508460a00151604051602001613a719190617446565b60405160208183030381529060405282828061399c90617584565b8460c00151158015613acf575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152613acd90511590565b155b15613b885760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613b1381617584565b935060ff1681518110613b2857613b28617417565b6020026020010181905250613b3c88614d1e565b604051602001613b4c9190617446565b604051602081830303815290604052828280613b6790617584565b935060ff1681518110613b7c57613b7c617417565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152613bbc90511590565b613c515760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282613bff81617584565b935060ff1681518110613c1457613c14617417565b60200260200101819052508460400151828280613c3090617584565b935060ff1681518110613c4557613c45617417565b60200260200101819052505b606085015115613d725760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282613c9a81617584565b935060ff1681518110613caf57613caf617417565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613d1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d4691908101906170b1565b8282613d5181617584565b935060ff1681518110613d6657613d66617417565b60200260200101819052505b60e08501515115613e195760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282613dbc81617584565b935060ff1681518110613dd157613dd1617417565b6020026020010181905250613ded8560e0015160000151614c7e565b8282613df881617584565b935060ff1681518110613e0d57613e0d617417565b60200260200101819052505b60e08501516020015115613ec35760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282613e6681617584565b935060ff1681518110613e7b57613e7b617417565b6020026020010181905250613e978560e0015160200151614c7e565b8282613ea281617584565b935060ff1681518110613eb757613eb7617417565b60200260200101819052505b60e08501516040015115613f6d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282613f1081617584565b935060ff1681518110613f2557613f25617417565b6020026020010181905250613f418560e0015160400151614c7e565b8282613f4c81617584565b935060ff1681518110613f6157613f61617417565b60200260200101819052505b60e085015160600151156140175760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282613fba81617584565b935060ff1681518110613fcf57613fcf617417565b6020026020010181905250613feb8560e0015160600151614c7e565b8282613ff681617584565b935060ff168151811061400b5761400b617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561403557614035616e73565b60405190808252806020026020018201604052801561406857816020015b60608152602001906001900390816140535790505b50905060005b8260ff168160ff1610156140c157838160ff168151811061409157614091617417565b6020026020010151828260ff16815181106140ae576140ae617417565b602090810291909101015260010161406e565b5093505050505b949350505050565b6140f76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161417d9186910161760e565b600060405180830381865afa15801561419a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141c291908101906170b1565b905060006141d0868361580d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016142009190616b4a565b6000604051808303816000875af115801561421f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142479190810190617655565b805190915060030b158015906142605750602081015151155b801561426f5750604081015151155b15613249578160008151811061428757614287617417565b602002602001015160405160200161289e919061770b565b606060006142d48560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061430b9082905b90615962565b15614468576000614388826143828461437c61434e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90615989565b906159eb565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506143ec908290615962565b1561445657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614453905b8290615a70565b90505b61445f81615a96565b925050506127cb565b821561448157848460405160200161289e9291906178f7565b50506040805160208101909152600081526127cb565b509392505050565b6000808251602084016000f09392505050565b8160a00151156144c157505050565b60006144ce848484615aff565b905060006144db826140d0565b602081015181519192509060030b1580156145775750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261457790604080518082018252600080825260209182015281518083019092528451825280850190820152614305565b1561458457505050505050565b604082015151156145a457816040015160405160200161289e919061799e565b8060405160200161289e91906179fc565b606060006145ea8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061464f905b8290614c1d565b156146be57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b990839061609a565b615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614720905b8290616124565b6001036147ed57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147869061444c565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9905b8390615a70565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261484c90614648565b1561498357604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906148b49083906161be565b9050600081600183516148c79190616d81565b815181106148d7576148d7617417565b6020026020010151905061497a6146b961494d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061609a565b95945050505050565b8260405160200161289e9190617a67565b50919050565b606060006149cf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150614a3190614648565b15614a3f576127cb81615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a9e90614719565b600103614b0857604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9906147e6565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6790614648565b1561498357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614bcf9083906161be565b9050600181511115614c0b578060028251614bea9190616d81565b81518110614bfa57614bfa617417565b602002602001015192505050919050565b508260405160200161289e9190617a67565b805182516000911115614c3257506000612751565b81518351602085015160009291614c4891616c87565b614c529190616d81565b905082602001518103614c69576001915050612751565b82516020840151819020912014905092915050565b60606000614c8b83616263565b600101905060008167ffffffffffffffff811115614cab57614cab616e73565b6040519080825280601f01601f191660200182016040528015614cd5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084614cdf57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614daa905b8290616345565b15614dea57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4990614da3565b15614e8957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ee890614da3565b15614f2857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f8790614da3565b80614fec5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614fec90614da3565b1561502c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508b90614da3565b806150f05750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526150f090614da3565b1561513057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261518f90614da3565b806151f45750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526151f490614da3565b1561523457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261529390614da3565b806152f85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526152f890614da3565b1561533857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261539790614da3565b156153d757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261543690614da3565b1561547657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154d590614da3565b1561551557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261557490614da3565b156155b457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261561390614da3565b1561565357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156b290614da3565b806157175750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261571790614da3565b1561575757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157b690614da3565b156157f657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161289e9290602001617b45565b60608060005b8451811015615898578185828151811061582f5761582f617417565b6020026020010151604051602001615848929190616f90565b6040516020818303038152906040529150600185516158679190616d81565b8114615890578160405160200161587e9190617cae565b60405160208183030381529060405291505b600101615813565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816158b157905050905083816000815181106158dc576158dc617417565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061593057615930617417565b6020026020010181905250818160028151811061594f5761594f617417565b6020908102919091010152949350505050565b60208083015183518351928401516000936159809291849190616359565b14159392505050565b604080518082019091526000808252602082015260006159bb846000015185602001518560000151866020015161646a565b90508360200151816159cd9190616d81565b845185906159dc908390616d81565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615a10575081612751565b6020808301519084015160019114615a375750815160208481015190840151829020919020145b8015615a6857825184518590615a4e908390616d81565b9052508251602085018051615a64908390616c87565b9052505b509192915050565b6040805180820190915260008082526020820152615a8f83838361658a565b5092915050565b60606000826000015167ffffffffffffffff811115615ab757615ab7616e73565b6040519080825280601f01601f191660200182016040528015615ae1576020820181803683370190505b5090506000602082019050615a8f8185602001518660000151616635565b60606000615b0b612ac8565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081615b2857905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615b8390617584565b935060ff1681518110615b9857615b98617417565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001615be99190617cef565b604051602081830303815290604052828280615c0490617584565b935060ff1681518110615c1957615c19617417565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280615c6690617584565b935060ff1681518110615c7b57615c7b617417565b602002602001018190525082604051602001615c9791906174b2565b604051602081830303815290604052828280615cb290617584565b935060ff1681518110615cc757615cc7617417565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280615d1490617584565b935060ff1681518110615d2957615d29617417565b6020026020010181905250615d3e87846166af565b8282615d4981617584565b935060ff1681518110615d5e57615d5e617417565b602090810291909101015285515115615e0a5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282615db081617584565b935060ff1681518110615dc557615dc5617417565b6020026020010181905250615dde8660000151846166af565b8282615de981617584565b935060ff1681518110615dfe57615dfe617417565b60200260200101819052505b856080015115615e785760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282615e5381617584565b935060ff1681518110615e6857615e68617417565b6020026020010181905250615ede565b8415615ede5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282615ebd81617584565b935060ff1681518110615ed257615ed2617417565b60200260200101819052505b60408601515115615f7a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282615f2881617584565b935060ff1681518110615f3d57615f3d617417565b60200260200101819052508560400151828280615f5990617584565b935060ff1681518110615f6e57615f6e617417565b60200260200101819052505b856060015115615fe45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615fc381617584565b935060ff1681518110615fd857615fd8617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561600257616002616e73565b60405190808252806020026020018201604052801561603557816020015b60608152602001906001900390816160205790505b50905060005b8260ff168160ff16101561608e57838160ff168151811061605e5761605e617417565b6020026020010151828260ff168151811061607b5761607b617417565b602090810291909101015260010161603b565b50979650505050505050565b60408051808201909152600080825260208201528151835110156160bf575081612751565b815183516020850151600092916160d591616c87565b6160df9190616d81565b60208401519091506001908214616100575082516020840151819020908220145b801561611b57835185518690616117908390616d81565b9052505b50929392505050565b6000808260000151616148856000015186602001518660000151876020015161646a565b6161529190616c87565b90505b835160208501516161669190616c87565b8111615a8f578161617681617d34565b92505082600001516161ad8560200151836161919190616d81565b865161619d9190616d81565b838660000151876020015161646a565b6161b79190616c87565b9050616155565b606060006161cc8484616124565b6161d7906001616c87565b67ffffffffffffffff8111156161ef576161ef616e73565b60405190808252806020026020018201604052801561622257816020015b606081526020019060019003908161620d5790505b50905060005b81518110156144975761623e6146b98686615a70565b82828151811061625057616250617417565b6020908102919091010152600101616228565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106162ac577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106162d8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106162f657662386f26fc10000830492506010015b6305f5e100831061630e576305f5e100830492506008015b612710831061632257612710830492506004015b60648310616334576064830492506002015b600a83106127515760010192915050565b600061635183836166ef565b159392505050565b600080858411616460576020841161640c57600084156163a4576001616380866020616d81565b61638b906008617d4e565b616396906002617e4c565b6163a09190616d81565b1990505b83518116856163b38989616c87565b6163bd9190616d81565b805190935082165b8181146163f7578784116163df57879450505050506140c8565b836163e981617e58565b9450508284511690506163c5565b6164018785616c87565b9450505050506140c8565b8383206164198588616d81565b6164239087616c87565b91505b85821061645e5784822080820361644b576164418684616c87565b93505050506140c8565b616456600184616d81565b925050616426565b505b5092949350505050565b60008381868511616575576020851161652457600085156164b6576001616492876020616d81565b61649d906008617d4e565b6164a8906002617e4c565b6164b29190616d81565b1990505b845181166000876164c78b8b616c87565b6164d19190616d81565b855190915083165b828114616516578186106164fe576164f18b8b616c87565b96505050505050506140c8565b8561650881617d34565b9650508386511690506164d9565b8596505050505050506140c8565b508383206000905b6165368689616d81565b82116165735785832080820361655257839450505050506140c8565b61655d600185616c87565b935050818061656b90617d34565b92505061652c565b505b61657f8787616c87565b979650505050505050565b604080518082019091526000808252602082015260006165bc856000015186602001518660000151876020015161646a565b6020808701805191860191909152519091506165d89082616d81565b8352845160208601516165eb9190616c87565b81036165fa576000855261662c565b835183516166089190616c87565b85518690616617908390616d81565b90525083516166269082616c87565b60208601525b50909392505050565b6020811061666d578151835261664c602084616c87565b9250616659602083616c87565b9150616666602082616d81565b9050616635565b600019811561669c576001616683836020616d81565b61668f90610100617e4c565b6166999190616d81565b90505b9151835183169219169190911790915250565b606060006166bd8484612b9b565b80516020808301516040519394506166d793909101617e6f565b60405160208183030381529060405291505092915050565b8151815160009190811115616702575081515b6020808501519084015160005b838110156167bb578251825180821461678b57600019602087101561676a5760018461673c896020616d81565b6167469190616c87565b616751906008617d4e565b61675c906002617e4c565b6167669190616d81565b1990505b81811683821681810391146167885797506127519650505050505050565b50505b616796602086616c87565b94506167a3602085616c87565b935050506020816167b49190616c87565b905061670f565b50845186516132499190617ec7565b610c9f80617ee883390190565b6113e280618b8783390190565b61182a80619f6983390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001616834616839565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016168346040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156168eb5783516001600160a01b03168352602093840193909201916001016168c4565b509095945050505050565b60005b838110156169115781810151838201526020016168f9565b50506000910152565b600081518084526169328160208601602086016168f6565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616a28577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352616a1284865161691a565b60209586019590945092909201916001016169d8565b50919750505060209485019492909201915060010161696e565b50929695505050505050565b600081518084526020840193506020830160005b82811015616aa25781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101616a62565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616b18604088018261691a565b9050602082015191508681036020880152616b338183616a4e565b965050506020938401939190910190600101616ad4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452616bac85835161691a565b94506020938401939190910190600101616b72565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152616c426040870182616a4e565b9550506020938401939190910190600101616be9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561275157612751616c58565b600181811c90821680616cae57607f821691505b602082108103614994577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215616cf957600080fd5b5051919050565b600060208284031215616d1257600080fd5b815180151581146127cb57600080fd5b8381526001600160a01b038316602082015260606040820152600061497a606083018461691a565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000613249608083018461691a565b8181038181111561275157612751616c58565b6001600160a01b03831681526040602082015260006140c8604083018461691a565b6020815260006127cb602083018461691a565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616e0181601a8501602088016168f6565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351616e3e81601c8401602088016168f6565b01601c01949350505050565b600060208284031215616e5c57600080fd5b81516001600160a01b03811681146127cb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715616ec557616ec5616e73565b60405290565b60008067ffffffffffffffff841115616ee657616ee6616e73565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715616f1557616f15616e73565b604052838152905080828401851015616f2d57600080fd5b6144978460208301856168f6565b600082601f830112616f4c57600080fd5b6127cb83835160208501616ecb565b600060208284031215616f6d57600080fd5b815167ffffffffffffffff811115616f8457600080fd5b61274d84828501616f3b565b60008351616fa28184602088016168f6565b835190830190616fb68183602088016168f6565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616ff781601a8501602088016168f6565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516170348160338401602088016168f6565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006127cb608083018461691a565b6000602082840312156170c357600080fd5b815167ffffffffffffffff8111156170da57600080fd5b8201601f810184136170eb57600080fd5b61274d84825160208401616ecb565b6000855161710c818460208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551617146816001840160208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516171848160028401602089016168f6565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516171c68160028401602088016168f6565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000617211604083018461691a565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161728881601f8501602087016168f6565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006172f5604083018461691a565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000617347604083018461691a565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516173be8160148501602087016168f6565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000617405604083018561691a565b82810360208401526127c7818561691a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161747e8160018501602087016168f6565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516174c48184602087016168f6565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161757781604b8501602087016168f6565b91909101604b0192915050565b600060ff821660ff810361759a5761759a616c58565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006127cb608083018461691a565b60006020828403121561766757600080fd5b815167ffffffffffffffff81111561767e57600080fd5b82016060818503121561769057600080fd5b617698616ea2565b81518060030b81146176a957600080fd5b8152602082015167ffffffffffffffff8111156176c557600080fd5b6176d186828501616f3b565b602083015250604082015167ffffffffffffffff8111156176f157600080fd5b6176fd86828501616f3b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516177698160218501602087016168f6565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516179558160218501602088016168f6565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161799281602e8401602088016168f6565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251617a5a8160228501602087016168f6565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251617a9f81600e8501602087016168f6565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617b7d8160188501602088016168f6565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351617bba81601c8401602088016168f6565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251617cc08184602087016168f6565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251617d2781601c8501602087016168f6565b91909101601c0192915050565b60006000198203617d4757617d47616c58565b5060010190565b808202811582820484141761275157612751616c58565b6001815b6001841115617da057808504811115617d8457617d84616c58565b6001841615617d9257908102905b60019390931c928002617d69565b935093915050565b600082617db757506001612751565b81617dc457506000612751565b8160018114617dda5760028114617de457617e00565b6001915050612751565b60ff841115617df557617df5616c58565b50506001821b612751565b5060208310610133831016604e8410600b8410161715617e23575081810a612751565b617e306000198484617d65565b8060001904821115617e4457617e44616c58565b029392505050565b60006127cb8383617da8565b600081617e6757617e67616c58565b506000190190565b60008351617e818184602088016168f6565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351617ebb8160018401602088016168f6565b01600101949350505050565b8181036000831280158383131683831282161715615a8f57615a8f616c5856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a0033a2646970667358221220b68ef6a2e59ebd6ec07004817f94d2e8ad26c5b98e5fa2bbd022b8eb674f554764736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602855348015603357600080fd5b5061b7c0806100436000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063ba414fa61161008c578063e20c9f7111610066578063e20c9f711461027b578063f96c02df14610283578063fa7626d41461028b57600080fd5b8063ba414fa614610253578063bb93f11e1461026b578063c13d738f1461027357600080fd5b8063aa030c1c116100bd578063aa030c1c1461023b578063b0464fdc14610243578063b5508aa91461024b57600080fd5b8063916a17c61461021e5780639fd1e5971461023357600080fd5b806330f7c04f1161013a5780636459542a116101145780636459542a146101ec57806366d9a9a0146101f457806385226c811461020957600080fd5b806330f7c04f146101d45780633e5e3c23146101dc5780633f7286f4146101e457600080fd5b80630a9254e41161016b5780630a9254e4146101995780631ed7831c146101a15780632ade3880146101bf57600080fd5b806306978ca3146101875780630724d8e314610191575b600080fd5b61018f610298565b005b61018f6103c5565b61018f61057c565b6101a9610cb3565b6040516101b691906168aa565b60405180910390f35b6101c7610d15565b6040516101b69190616946565b61018f610e57565b6101a96112c4565b6101a9611324565b61018f611384565b6101fc611781565b6040516101b69190616aac565b610211611903565b6040516101b69190616b4a565b6102266119d3565b6040516101b69190616bc1565b61018f611ace565b61018f611cea565b610226611ecf565b610211611fca565b61025b61209a565b60405190151581526020016101b6565b61018f61216e565b61018f612308565b6101a96124b7565b61018f612517565b601f5461025b9060ff1681565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561032e57600080fd5b505af1158015610342573d6000803e3d6000fd5b50506020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063f340fa01915083906024016000604051808303818588803b1580156103a957600080fd5b505af11580156103bd573d6000803e3d6000fd5b505050505050565b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b505060265460255460408051878152600060208201819052606082840181905282015290516001600160a01b0393841695509290911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa019084906024016000604051808303818588803b15801561053b57600080fd5b505af115801561054f573d6000803e3d6000fd5b50506027546001600160a01b0316319250610577915061057190508484616c87565b826126b9565b505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780549091166156781790556040516105ce906167ca565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610653573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610698906167ca565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561071c573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261080d919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052612738565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610899906167d7565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108d5573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610930906167e4565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610974573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2057600080fd5b505af1158015610a34573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b9e57600080fd5b505af1158015610bb2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c1457600080fd5b505af1158015610c28573d6000803e3d6000fd5b50506023546025546028546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610d0b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ced575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610e37578382906000526020600020018054610daa90616c9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd690616c9a565b8015610e235780601f10610df857610100808354040283529160200191610e23565b820191906000526020600020905b815481529060010190602001808311610e0657829003601f168201915b505050505081526020019060010190610d8b565b505050508152505081526020019060010190610d39565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190616ce7565b9050610ef46000826126b9565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4926110f1928992909116908790616d22565b60405180910390a36020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841693638c6f037f9361115293908216928992909116908790600401616d4a565b600060405180830381600087803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112109190616ce7565b905061121c84826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190616ce7565b90506112bd856028546105719190616d81565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156113f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114149190616ce7565b90506114216000826126b9565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190616d00565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561154257600080fd5b505af1158015611556573d6000803e3d6000fd5b5050602654602554602354604080518881526001600160a01b039283166020820152606081830181905260009082015290519382169550911692507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4919081900360800190a36020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052908216604482015291169063f45346dc90606401600060405180830381600087803b15801561163057600080fd5b505af1158015611644573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190616ce7565b90506116e083826126b9565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190616ce7565b9050610cad846028546105719190616d81565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002090600202016040518060400160405290816000820180546117d890616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461180490616c9a565b80156118515780601f1061182657610100808354040283529160200191611851565b820191906000526020600020905b81548152906001019060200180831161183457829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156118eb57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116118985790505b505050505081525050815260200190600101906117a5565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461194690616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461197290616c9a565b80156119bf5780601f10611994576101008083540402835291602001916119bf565b820191906000526020600020905b8154815290600101906020018083116119a257829003601f168201915b505050505081526020019060010190611927565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611ab657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611a635790505b505050505081525050815260200190600101906119f7565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a490611c419087906000908790616d22565b60405180910390a36020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926329c59b5d928792611c9b92909116908690600401616d94565b6000604051808303818588803b158015611cb457600080fd5b505af1158015611cc8573d6000803e3d6000fd5b50506027546001600160a01b0316319250610cad915061057190508585616c87565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde390611e4a908590616db6565b60405180910390a36020546026546040517f1b8b921d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631b8b921d92611ea1929116908590600401616d94565b600060405180830381600087803b158015611ebb57600080fd5b505af11580156112bd573d6000803e3d6000fd5b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610e4e5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611fb257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f5f5790505b50505050508152505081526020019060010190611ef3565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610e4e57838290600052602060002001805461200d90616c9a565b80601f016020809104026020016040519081016040528092919081815260200182805461203990616c9a565b80156120865780601f1061205b57610100808354040283529160200191612086565b820191906000526020600020905b81548152906001019060200180831161206957829003601f168201915b505050505081526020019060010190611fee565b60085460009060ff16156120b2575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121679190616ce7565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906122659060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b15801561227f57600080fd5b505af1158015612293573d6000803e3d6000fd5b50506020546026546023546040517f8c6f037f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550638c6f037f94506122ee9392831692889216908790600401616d4a565b600060405180830381600087803b1580156103a957600080fd5b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906123ff9060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b50506020546026546040517f29c59b5d0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506329c59b5d935086926124819216908690600401616d94565b6000604051808303818588803b15801561249a57600080fd5b505af11580156124ae573d6000803e3d6000fd5b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015610d0b576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ced575050505050905090565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af115801561258a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ae9190616d00565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561264257600080fd5b505af1158015612656573d6000803e3d6000fd5b50506020546026546023546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401611ea1565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561272457600080fd5b505afa1580156103bd573d6000803e3d6000fd5b60006127426167f1565b61274d848483612757565b9150505b92915050565b60008061276485846127d2565b90506127c76040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016127b2929190616d94565b604051602081830303815290604052856127de565b9150505b9392505050565b60006127cb838361280c565b60c08101515160009015612802576127fb84848460c00151612827565b90506127cb565b6127fb84846129cd565b60006128188383612ab8565b6127cb838360200151846127de565b600080612832612ac8565b905060006128408683612b9b565b905060006128578260600151836020015185613041565b9050600061286783838989613253565b90506000612874826140d0565b602081015181519192509060030b156128e75789826040015160405160200161289e929190616dc9565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526128de91600401616db6565b60405180910390fd5b600061292a6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161429f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061297d908490600401616db6565b602060405180830381865afa15801561299a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129be9190616e4a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590612a22908790600401616db6565b600060405180830381865afa158015612a3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a679190810190616f5b565b90506000612a958285604051602001612a81929190616f90565b60405160208183030381529060405261449f565b90506001600160a01b03811661274d57848460405160200161289e929190616fbf565b612ac4828260006144b2565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90612b4f90849060040161706a565b600060405180830381865afa158015612b6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b9491908101906170b1565b9250505090565b612bcd6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050612c186040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b612c21856145b5565b60208201526000612c318661499a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015612c73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c9b91908101906170b1565b86838560200151604051602001612cb594939291906170fa565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190612d0d908590600401616db6565b600060405180830381865afa158015612d2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5291908101906170b1565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690612d9a9084906004016171fe565b602060405180830381865afa158015612db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddb9190616d00565b612df0578160405160200161289e9190617250565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612e359084906004016172e2565b600060405180830381865afa158015612e52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e7a91908101906170b1565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690612ec1908490600401617334565b602060405180830381865afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f029190616d00565b15612f97576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612f4c908490600401617334565b600060405180830381865afa158015612f69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612f9191908101906170b1565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001612fbc9190617386565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612fe89291906173f2565b600060405180830381865afa158015613005573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261302d91908101906170b1565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161305d5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106130bd576130bd617417565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061311157613111617417565b60200260200101819052508460405160200161312d9190617446565b6040516020818303038152906040528160028151811061314f5761314f617417565b60200260200101819052508260405160200161316b91906174b2565b6040516020818303038152906040528160038151811061318d5761318d617417565b602002602001018190525060006131a3826140d0565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506132349060408051808201825260008082526020918201528151808301909252845182528085019082015290614c1d565b613249578560405160200161289e91906174f3565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156132a3565b511590565b6134175782602001511561335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016128de565b8260c0015115613417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016128de565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161343057905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061348b90617584565b935060ff16815181106134a0576134a0617417565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016134f191906175a3565b60405160208183030381529060405282828061350c90617584565b935060ff168151811061352157613521617417565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061356e90617584565b935060ff168151811061358357613583617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806135d090617584565b935060ff16815181106135e5576135e5617417565b6020026020010181905250876020015182828061360190617584565b935060ff168151811061361657613616617417565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061366390617584565b935060ff168151811061367857613678617417565b60209081029190910101528751828261369081617584565b935060ff16815181106136a5576136a5617417565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806136f290617584565b935060ff168151811061370757613707617417565b602002602001018190525061371b46614c7e565b828261372681617584565b935060ff168151811061373b5761373b617417565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061378890617584565b935060ff168151811061379d5761379d617417565b6020026020010181905250868282806137b590617584565b935060ff16815181106137ca576137ca617417565b60209081029190910101528551156138f15760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261381b81617584565b935060ff168151811061383057613830617417565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90613880908990600401616db6565b600060405180830381865afa15801561389d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138c591908101906170b1565b82826138d081617584565b935060ff16815181106138e5576138e5617417565b60200260200101819052505b8460200151156139c15760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261393a81617584565b935060ff168151811061394f5761394f617417565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061399c90617584565b935060ff16815181106139b1576139b1617417565b6020026020010181905250613b88565b6139f961329e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b613a8c5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613a3c81617584565b935060ff1681518110613a5157613a51617417565b60200260200101819052508460a00151604051602001613a719190617446565b60405160208183030381529060405282828061399c90617584565b8460c00151158015613acf575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152613acd90511590565b155b15613b885760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282613b1381617584565b935060ff1681518110613b2857613b28617417565b6020026020010181905250613b3c88614d1e565b604051602001613b4c9190617446565b604051602081830303815290604052828280613b6790617584565b935060ff1681518110613b7c57613b7c617417565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152613bbc90511590565b613c515760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282613bff81617584565b935060ff1681518110613c1457613c14617417565b60200260200101819052508460400151828280613c3090617584565b935060ff1681518110613c4557613c45617417565b60200260200101819052505b606085015115613d725760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282613c9a81617584565b935060ff1681518110613caf57613caf617417565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613d1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d4691908101906170b1565b8282613d5181617584565b935060ff1681518110613d6657613d66617417565b60200260200101819052505b60e08501515115613e195760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282613dbc81617584565b935060ff1681518110613dd157613dd1617417565b6020026020010181905250613ded8560e0015160000151614c7e565b8282613df881617584565b935060ff1681518110613e0d57613e0d617417565b60200260200101819052505b60e08501516020015115613ec35760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282613e6681617584565b935060ff1681518110613e7b57613e7b617417565b6020026020010181905250613e978560e0015160200151614c7e565b8282613ea281617584565b935060ff1681518110613eb757613eb7617417565b60200260200101819052505b60e08501516040015115613f6d5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282613f1081617584565b935060ff1681518110613f2557613f25617417565b6020026020010181905250613f418560e0015160400151614c7e565b8282613f4c81617584565b935060ff1681518110613f6157613f61617417565b60200260200101819052505b60e085015160600151156140175760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282613fba81617584565b935060ff1681518110613fcf57613fcf617417565b6020026020010181905250613feb8560e0015160600151614c7e565b8282613ff681617584565b935060ff168151811061400b5761400b617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561403557614035616e73565b60405190808252806020026020018201604052801561406857816020015b60608152602001906001900390816140535790505b50905060005b8260ff168160ff1610156140c157838160ff168151811061409157614091617417565b6020026020010151828260ff16815181106140ae576140ae617417565b602090810291909101015260010161406e565b5093505050505b949350505050565b6140f76040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161417d9186910161760e565b600060405180830381865afa15801561419a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141c291908101906170b1565b905060006141d0868361580d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016142009190616b4a565b6000604051808303816000875af115801561421f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142479190810190617655565b805190915060030b158015906142605750602081015151155b801561426f5750604081015151155b15613249578160008151811061428757614287617417565b602002602001015160405160200161289e919061770b565b606060006142d48560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061430b9082905b90615962565b15614468576000614388826143828461437c61434e8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90615989565b906159eb565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506143ec908290615962565b1561445657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614453905b8290615a70565b90505b61445f81615a96565b925050506127cb565b821561448157848460405160200161289e9291906178f7565b50506040805160208101909152600081526127cb565b509392505050565b6000808251602084016000f09392505050565b8160a00151156144c157505050565b60006144ce848484615aff565b905060006144db826140d0565b602081015181519192509060030b1580156145775750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261457790604080518082018252600080825260209182015281518083019092528451825280850190820152614305565b1561458457505050505050565b604082015151156145a457816040015160405160200161289e919061799e565b8060405160200161289e91906179fc565b606060006145ea8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061464f905b8290614c1d565b156146be57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b990839061609a565b615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614720905b8290616124565b6001036147ed57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147869061444c565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9905b8390615a70565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261484c90614648565b1561498357604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906148b49083906161be565b9050600081600183516148c79190616d81565b815181106148d7576148d7617417565b6020026020010151905061497a6146b961494d6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061609a565b95945050505050565b8260405160200161289e9190617a67565b50919050565b606060006149cf8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150614a3190614648565b15614a3f576127cb81615a96565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a9e90614719565b600103614b0857604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526127cb906146b9906147e6565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6790614648565b1561498357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614bcf9083906161be565b9050600181511115614c0b578060028251614bea9190616d81565b81518110614bfa57614bfa617417565b602002602001015192505050919050565b508260405160200161289e9190617a67565b805182516000911115614c3257506000612751565b81518351602085015160009291614c4891616c87565b614c529190616d81565b905082602001518103614c69576001915050612751565b82516020840151819020912014905092915050565b60606000614c8b83616263565b600101905060008167ffffffffffffffff811115614cab57614cab616e73565b6040519080825280601f01601f191660200182016040528015614cd5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084614cdf57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614daa905b8290616345565b15614dea57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4990614da3565b15614e8957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ee890614da3565b15614f2857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f8790614da3565b80614fec5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614fec90614da3565b1561502c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508b90614da3565b806150f05750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526150f090614da3565b1561513057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261518f90614da3565b806151f45750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526151f490614da3565b1561523457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261529390614da3565b806152f85750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526152f890614da3565b1561533857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261539790614da3565b156153d757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261543690614da3565b1561547657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154d590614da3565b1561551557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261557490614da3565b156155b457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261561390614da3565b1561565357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526156b290614da3565b806157175750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261571790614da3565b1561575757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157b690614da3565b156157f657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161289e9290602001617b45565b60608060005b8451811015615898578185828151811061582f5761582f617417565b6020026020010151604051602001615848929190616f90565b6040516020818303038152906040529150600185516158679190616d81565b8114615890578160405160200161587e9190617cae565b60405160208183030381529060405291505b600101615813565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816158b157905050905083816000815181106158dc576158dc617417565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061593057615930617417565b6020026020010181905250818160028151811061594f5761594f617417565b6020908102919091010152949350505050565b60208083015183518351928401516000936159809291849190616359565b14159392505050565b604080518082019091526000808252602082015260006159bb846000015185602001518560000151866020015161646a565b90508360200151816159cd9190616d81565b845185906159dc908390616d81565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615a10575081612751565b6020808301519084015160019114615a375750815160208481015190840151829020919020145b8015615a6857825184518590615a4e908390616d81565b9052508251602085018051615a64908390616c87565b9052505b509192915050565b6040805180820190915260008082526020820152615a8f83838361658a565b5092915050565b60606000826000015167ffffffffffffffff811115615ab757615ab7616e73565b6040519080825280601f01601f191660200182016040528015615ae1576020820181803683370190505b5090506000602082019050615a8f8185602001518660000151616635565b60606000615b0b612ac8565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081615b2857905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615b8390617584565b935060ff1681518110615b9857615b98617417565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001615be99190617cef565b604051602081830303815290604052828280615c0490617584565b935060ff1681518110615c1957615c19617417565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280615c6690617584565b935060ff1681518110615c7b57615c7b617417565b602002602001018190525082604051602001615c9791906174b2565b604051602081830303815290604052828280615cb290617584565b935060ff1681518110615cc757615cc7617417565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280615d1490617584565b935060ff1681518110615d2957615d29617417565b6020026020010181905250615d3e87846166af565b8282615d4981617584565b935060ff1681518110615d5e57615d5e617417565b602090810291909101015285515115615e0a5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282615db081617584565b935060ff1681518110615dc557615dc5617417565b6020026020010181905250615dde8660000151846166af565b8282615de981617584565b935060ff1681518110615dfe57615dfe617417565b60200260200101819052505b856080015115615e785760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282615e5381617584565b935060ff1681518110615e6857615e68617417565b6020026020010181905250615ede565b8415615ede5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282615ebd81617584565b935060ff1681518110615ed257615ed2617417565b60200260200101819052505b60408601515115615f7a5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282615f2881617584565b935060ff1681518110615f3d57615f3d617417565b60200260200101819052508560400151828280615f5990617584565b935060ff1681518110615f6e57615f6e617417565b60200260200101819052505b856060015115615fe45760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615fc381617584565b935060ff1681518110615fd857615fd8617417565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561600257616002616e73565b60405190808252806020026020018201604052801561603557816020015b60608152602001906001900390816160205790505b50905060005b8260ff168160ff16101561608e57838160ff168151811061605e5761605e617417565b6020026020010151828260ff168151811061607b5761607b617417565b602090810291909101015260010161603b565b50979650505050505050565b60408051808201909152600080825260208201528151835110156160bf575081612751565b815183516020850151600092916160d591616c87565b6160df9190616d81565b60208401519091506001908214616100575082516020840151819020908220145b801561611b57835185518690616117908390616d81565b9052505b50929392505050565b6000808260000151616148856000015186602001518660000151876020015161646a565b6161529190616c87565b90505b835160208501516161669190616c87565b8111615a8f578161617681617d34565b92505082600001516161ad8560200151836161919190616d81565b865161619d9190616d81565b838660000151876020015161646a565b6161b79190616c87565b9050616155565b606060006161cc8484616124565b6161d7906001616c87565b67ffffffffffffffff8111156161ef576161ef616e73565b60405190808252806020026020018201604052801561622257816020015b606081526020019060019003908161620d5790505b50905060005b81518110156144975761623e6146b98686615a70565b82828151811061625057616250617417565b6020908102919091010152600101616228565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106162ac577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106162d8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106162f657662386f26fc10000830492506010015b6305f5e100831061630e576305f5e100830492506008015b612710831061632257612710830492506004015b60648310616334576064830492506002015b600a83106127515760010192915050565b600061635183836166ef565b159392505050565b600080858411616460576020841161640c57600084156163a4576001616380866020616d81565b61638b906008617d4e565b616396906002617e4c565b6163a09190616d81565b1990505b83518116856163b38989616c87565b6163bd9190616d81565b805190935082165b8181146163f7578784116163df57879450505050506140c8565b836163e981617e58565b9450508284511690506163c5565b6164018785616c87565b9450505050506140c8565b8383206164198588616d81565b6164239087616c87565b91505b85821061645e5784822080820361644b576164418684616c87565b93505050506140c8565b616456600184616d81565b925050616426565b505b5092949350505050565b60008381868511616575576020851161652457600085156164b6576001616492876020616d81565b61649d906008617d4e565b6164a8906002617e4c565b6164b29190616d81565b1990505b845181166000876164c78b8b616c87565b6164d19190616d81565b855190915083165b828114616516578186106164fe576164f18b8b616c87565b96505050505050506140c8565b8561650881617d34565b9650508386511690506164d9565b8596505050505050506140c8565b508383206000905b6165368689616d81565b82116165735785832080820361655257839450505050506140c8565b61655d600185616c87565b935050818061656b90617d34565b92505061652c565b505b61657f8787616c87565b979650505050505050565b604080518082019091526000808252602082015260006165bc856000015186602001518660000151876020015161646a565b6020808701805191860191909152519091506165d89082616d81565b8352845160208601516165eb9190616c87565b81036165fa576000855261662c565b835183516166089190616c87565b85518690616617908390616d81565b90525083516166269082616c87565b60208601525b50909392505050565b6020811061666d578151835261664c602084616c87565b9250616659602083616c87565b9150616666602082616d81565b9050616635565b600019811561669c576001616683836020616d81565b61668f90610100617e4c565b6166999190616d81565b90505b9151835183169219169190911790915250565b606060006166bd8484612b9b565b80516020808301516040519394506166d793909101617e6f565b60405160208183030381529060405291505092915050565b8151815160009190811115616702575081515b6020808501519084015160005b838110156167bb578251825180821461678b57600019602087101561676a5760018461673c896020616d81565b6167469190616c87565b616751906008617d4e565b61675c906002617e4c565b6167669190616d81565b1990505b81811683821681810391146167885797506127519650505050505050565b50505b616796602086616c87565b94506167a3602085616c87565b935050506020816167b49190616c87565b905061670f565b50845186516132499190617ec7565b610c9f80617ee883390190565b61140b80618b8783390190565b6117f980619f9283390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001616834616839565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016168346040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156168eb5783516001600160a01b03168352602093840193909201916001016168c4565b509095945050505050565b60005b838110156169115781810151838201526020016168f9565b50506000910152565b600081518084526169328160208601602086016168f6565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616a28577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352616a1284865161691a565b60209586019590945092909201916001016169d8565b50919750505060209485019492909201915060010161696e565b50929695505050505050565b600081518084526020840193506020830160005b82811015616aa25781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101616a62565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616b18604088018261691a565b9050602082015191508681036020880152616b338183616a4e565b965050506020938401939190910190600101616ad4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452616bac85835161691a565b94506020938401939190910190600101616b72565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015616a42577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152616c426040870182616a4e565b9550506020938401939190910190600101616be9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561275157612751616c58565b600181811c90821680616cae57607f821691505b602082108103614994577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215616cf957600080fd5b5051919050565b600060208284031215616d1257600080fd5b815180151581146127cb57600080fd5b8381526001600160a01b038316602082015260606040820152600061497a606083018461691a565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000613249608083018461691a565b8181038181111561275157612751616c58565b6001600160a01b03831681526040602082015260006140c8604083018461691a565b6020815260006127cb602083018461691a565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616e0181601a8501602088016168f6565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351616e3e81601c8401602088016168f6565b01601c01949350505050565b600060208284031215616e5c57600080fd5b81516001600160a01b03811681146127cb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715616ec557616ec5616e73565b60405290565b60008067ffffffffffffffff841115616ee657616ee6616e73565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715616f1557616f15616e73565b604052838152905080828401851015616f2d57600080fd5b6144978460208301856168f6565b600082601f830112616f4c57600080fd5b6127cb83835160208501616ecb565b600060208284031215616f6d57600080fd5b815167ffffffffffffffff811115616f8457600080fd5b61274d84828501616f3b565b60008351616fa28184602088016168f6565b835190830190616fb68183602088016168f6565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351616ff781601a8501602088016168f6565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516170348160338401602088016168f6565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006127cb608083018461691a565b6000602082840312156170c357600080fd5b815167ffffffffffffffff8111156170da57600080fd5b8201601f810184136170eb57600080fd5b61274d84825160208401616ecb565b6000855161710c818460208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551617146816001840160208a016168f6565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516171848160028401602089016168f6565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516171c68160028401602088016168f6565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000617211604083018461691a565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161728881601f8501602087016168f6565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006172f5604083018461691a565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000617347604083018461691a565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516173be8160148501602087016168f6565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000617405604083018561691a565b82810360208401526127c7818561691a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161747e8160018501602087016168f6565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516174c48184602087016168f6565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161757781604b8501602087016168f6565b91909101604b0192915050565b600060ff821660ff810361759a5761759a616c58565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006127cb608083018461691a565b60006020828403121561766757600080fd5b815167ffffffffffffffff81111561767e57600080fd5b82016060818503121561769057600080fd5b617698616ea2565b81518060030b81146176a957600080fd5b8152602082015167ffffffffffffffff8111156176c557600080fd5b6176d186828501616f3b565b602083015250604082015167ffffffffffffffff8111156176f157600080fd5b6176fd86828501616f3b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516177698160218501602087016168f6565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516179558160218501602088016168f6565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161799281602e8401602088016168f6565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516176018160298501602087016168f6565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251617a5a8160228501602087016168f6565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251617a9f81600e8501602087016168f6565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617b7d8160188501602088016168f6565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351617bba81601c8401602088016168f6565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251617cc08184602087016168f6565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251617d2781601c8501602087016168f6565b91909101601c0192915050565b60006000198203617d4757617d47616c58565b5060010190565b808202811582820484141761275157612751616c58565b6001815b6001841115617da057808504811115617d8457617d84616c58565b6001841615617d9257908102905b60019390931c928002617d69565b935093915050565b600082617db757506001612751565b81617dc457506000612751565b8160018114617dda5760028114617de457617e00565b6001915050612751565b60ff841115617df557617df5616c58565b50506001821b612751565b5060208310610133831016604e8410600b8410161715617e23575081810a612751565b617e306000198484617d65565b8060001904821115617e4457617e44616c58565b029392505050565b60006127cb8383617da8565b600081617e6757617e67616c58565b506000190190565b60008351617e818184602088016168f6565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351617ebb8160018401602088016168f6565b01600101949350505050565b8181036000831280158383131683831282161715615a8f57615a8f616c5856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a0033a2646970667358221220d241a552b987784414eec7a8a805c4c558fef3be7a48c3b80252cba36be86fd864736f6c634300081a0033", } // GatewayEVMInboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go index 0fb8f15e..02e781f0 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMTestMetaData contains all meta data concerning the GatewayEVMTest contract. var GatewayEVMTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustoryOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustoryOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff4d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063a3f9d0e011610160578063dd51e82f116100d8578063fa18c09b1161008c578063fb176c1211610071578063fb176c121461049a578063fe7bdbb2146104a2578063fe8e5f1b146104aa57600080fd5b8063fa18c09b14610485578063fa7626d41461048d57600080fd5b8063e63ab1e9116100bd578063e63ab1e91461044e578063eb1ce7f914610475578063f68bd1c01461047d57600080fd5b8063dd51e82f1461043e578063e20c9f711461044657600080fd5b8063b5508aa91161012f578063c9350b7f11610114578063c9350b7f14610426578063cbd57e2f1461042e578063cebad2a61461043657600080fd5b8063b5508aa914610406578063ba414fa61461040e57600080fd5b8063a3f9d0e0146103c7578063a4943deb146103cf578063a783c789146103d7578063b0464fdc146103fe57600080fd5b80633f7286f41161020e57806371149c94116101c257806385226c81116101a757806385226c811461037657806385f438c11461038b578063916a17c6146103b257600080fd5b806371149c94146103665780637d7f772a1461036e57600080fd5b80635d62c860116101f35780635d62c8601461031457806366d9a9a0146103495780636a6218541461035e57600080fd5b80633f7286f41461030457806344671b941461030c57600080fd5b80632206eb65116102655780633e5e3c231161024a5780633e5e3c23146102ec5780633e73ecb4146102f45780633ee92923146102fc57600080fd5b80632206eb65146102cf5780632ade3880146102d757600080fd5b80630a9254e4146102975780630eee72a9146102a15780631779672f146102a95780631ed7831c146102b1575b600080fd5b61029f6104b2565b005b61029f610d62565b61029f610fdd565b6102b9611132565b6040516102c6919061a168565b60405180910390f35b61029f611194565b6102df6113d8565b6040516102c6919061a204565b6102b961151a565b61029f61157a565b61029f611adb565b6102b9611b95565b61029f611bf5565b61033b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6040519081526020016102c6565b610351611f78565b6040516102c6919061a36a565b61029f6120e5565b61029f61219c565b61029f612992565b61037e612ccb565b6040516102c6919061a464565b61033b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6103ba612d9b565b6040516102c6919061a477565b61029f612e81565b61029f61345f565b61033b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103ba61366f565b61037e613755565b610416613825565b60405190151581526020016102c6565b61029f6138f9565b61029f613b3d565b61029f61409e565b61029f6142d7565b6102b9614a8d565b61033b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61029f614aed565b61029f614c12565b61029f614fc0565b601f546104169060ff1681565b61029f6152e6565b61029f61593a565b61029f615d68565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516105049061a07b565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610589573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105ce9061a07b565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610652573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261072c919060840160408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615f6e565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906107b89061a088565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156107f4573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061084f9061a095565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610893573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516108d89061a0a2565b604051809103906000f0801580156108f4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156109a057600080fd5b505af11580156109b4573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610a2a57600080fd5b505af1158015610a3e573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9457600080fd5b505af1158015610ba8573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc7919061a50e565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610d4857600080fd5b505af1158015610d5c573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610e3257600080fd5b505af1158015610e46573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610f1c919060040161a530565b600060405180830381600087803b158015610f3657600080fd5b505af1158015610f4a573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450610fa79392831692909116908790879060040161a543565b600060405180830381600087803b158015610fc157600080fd5b505af1158015610fd5573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156110aa57600080fd5b505af11580156110be573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401610f1c565b6060601680548060200260200160405190810160405280929190818152602001828054801561118a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161116c575b5050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561126357600080fd5b505af1158015611277573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061134d919060040161a530565b600060405180830381600087803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd49450610fa79392831692909116908790879060040161a543565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561151157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114fa57838290600052602060002001805461146d9061a57a565b80601f01602080910402602001604051908101604052809291908181526020018280546114999061a57a565b80156114e65780601f106114bb576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116114c957829003601f168201915b50505050508152602001906001019061144e565b5050505081525050815260200190600101906113fc565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f3919061a5c7565b9050611600816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611650573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611674919061a5c7565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611742916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156117e957600080fd5b505af11580156117fd573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118a257600080fd5b505af11580156118b6573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bc919061a5c7565b90506119c88186615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3c919061a5c7565b9050611a5181611a4c888761a637565b615f8d565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac5919061a5c7565b9050611ad2816000615f8d565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610e18565b6060601780548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b6040805160048082526024820183526020820180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611c96926001600160a01b03169160009187910161a5e0565b600060405180830381600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611e0a57600080fd5b505af1158015611e1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611e6490600090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ec557600080fd5b505af1158015611ed9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611f2d9290911690859060040161a663565b6000604051808303816000875af1158015611f4c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f74919081019061a76d565b5050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156115115783829060005260206000209060020201604051806040016040529081600082018054611fcf9061a57a565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffb9061a57a565b80156120485780601f1061201d57610100808354040283529160200191612048565b820191906000526020600020905b81548152906001019060200180831161202b57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156120cd57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161208f5790505b50505050508152505081526020019060010190611f9c565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612253919061a5c7565b9050612260816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d4919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916123a2916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b1580156123bc57600080fd5b505af11580156123d0573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506124a092506001600160a01b0390911690879061a663565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561251d57600080fd5b505af1158015612531573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda79061257c908990899061a64a565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c890612658908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126b957600080fd5b505af11580156126cd573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a02362945061272a9392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561274457600080fd5b505af1158015612758573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf919061a5c7565b90506127db8187615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561282b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284f919061a5c7565b905061285f81611a4c898761a637565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f9919061a5c7565b9050612906816000615f8d565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a919061a5c7565b9050612987816000615f8d565b505050505050505050565b604080516001808252818301909252600091816020015b60608152602001906001900390816129a95790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110612a0957612a0961a7a2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110612a4d57612a4d61a7a2565b6020908102919091010152604051600190600090612a739085908590859060240161a803565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b1157600080fd5b505af1158015612b25573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612bfb919060040161a530565b600060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350612c7d9290911690859060040161a663565b6000604051808303816000875af1158015612c9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cc4919081019061a76d565b5050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611511578382906000526020600020018054612d0e9061a57a565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3a9061a57a565b8015612d875780601f10612d5c57610100808354040283529160200191612d87565b820191906000526020600020905b815481529060010190602001808311612d6a57829003601f168201915b505050505081526020019060010190612cef565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156115115760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e6957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411612e2b5790505b50505050508152505081526020019060010190612dbf565b604080516004808252602480830184526020830180516001600160e01b03167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3a919061a5c7565b9050612f47816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbb919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613089916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b1580156130a357600080fd5b505af11580156130b7573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561313057600080fd5b505af1158015613144573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156131fd57600080fd5b505af1158015613211573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e9061325c908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156132bd57600080fd5b505af11580156132d1573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061332e9392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561334857600080fd5b505af115801561335c573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156133ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d2919061a5c7565b90506133df816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561342f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613453919061a5c7565b905061285f8185615f8d565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156134fa57600080fd5b505af115801561350e573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506135e4919060040161a530565b600060405180830381600087803b1580156135fe57600080fd5b505af1158015613612573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450610fa79392831692909116908790879060040161a543565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156115115760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561373d57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116136ff5790505b50505050508152505081526020019060010190613693565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156115115783829060005260206000200180546137989061a57a565b80601f01602080910402602001604051908101604052809291908181526020018280546137c49061a57a565b80156138115780601f106137e657610100808354040283529160200191613811565b820191906000526020600020905b8154815290600101906020018083116137f457829003601f168201915b505050505081526020019060010190613779565b60085460009060ff161561383d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156138ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f2919061a5c7565b1415905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156139c857600080fd5b505af11580156139dc573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613ab2919060040161a530565b600060405180830381600087803b158015613acc57600080fd5b505af1158015613ae0573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab599450610fa79392831692909116908790879060040161a543565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c25919061a5c7565b9050613c32816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca6919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613d74916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b158015613d8e57600080fd5b505af1158015613da2573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e1b57600080fd5b505af1158015613e2f573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f0557600080fd5b505af1158015613f19573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613f64908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fc557600080fd5b505af1158015613fd9573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506140369392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561405057600080fd5b505af1158015614064573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a08231910161278e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561413e57600080fd5b505af1158015614152573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614228919060040161a530565b600060405180830381600087803b15801561424257600080fd5b505af1158015614256573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db935086926142aa921690869060040161a663565b6000604051808303818588803b1580156142c357600080fd5b505af1158015611ad2573d6000803e3d6000fd5b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561433057600080fd5b505af1158015614344573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061441a919060040161a530565b600060405180830381600087803b15801561443457600080fd5b505af1158015614448573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561449c57600080fd5b505af11580156144b0573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561450d57600080fd5b505af1158015614521573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506145f7919060040161a530565b600060405180830381600087803b15801561461157600080fd5b505af1158015614625573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561467957600080fd5b505af115801561468d573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156146ea57600080fd5b505af11580156146fe573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561475257600080fd5b505af1158015614766573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561483357600080fd5b505af1158015614847573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156148a457600080fd5b505af11580156148b8573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061490c9290911690859060040161a663565b6000604051808303816000875af115801561492b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614953919081019061a76d565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149ad57600080fd5b505af11580156149c1573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614a1557600080fd5b505af1158015614a29573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611c96916001600160a01b031690600090869060040161a5e0565b6060601580548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b600080604051602001614b23907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b8a57600080fd5b505af1158015614b9e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016135e4565b604080516001808252818301909252600091816020015b6060815260200190600190039081614c295790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110614c8957614c8961a7a2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110614ccd57614ccd61a7a2565b6020908102919091010152604051600190600090614cf39085908590859060240161a803565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614d9b916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b158015614db557600080fd5b505af1158015614dc9573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614e4257600080fd5b505af1158015614e56573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350614e9d92506001600160a01b039091169087908790879061a83b565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614f1a57600080fd5b505af1158015614f2e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614f7490600090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612bfb565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b03163161501f816000615f8d565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561509457600080fd5b505af11580156150a8573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506150eb92506001600160a01b0390911690859061a663565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561516857600080fd5b505af115801561517c573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c91506151c990670de0b6b3a764000090869061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561522a57600080fd5b505af115801561523e573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792615292921690879060040161a663565b6000604051808303818588803b1580156152ab57600080fd5b505af11580156152bf573d6000803e3d6000fd5b50506021546001600160a01b0316319250610d5c9150829050670de0b6b3a7640000615f8d565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156153aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153ce919061a5c7565b90506153db816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561542b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061544f919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161551d916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b15801561553757600080fd5b505af115801561554b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156155c457600080fd5b505af11580156155d8573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061561660028861a883565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156156c557600080fd5b505af11580156156d9573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90615724908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561578557600080fd5b505af1158015615799573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506157f69392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561581057600080fd5b505af1158015615824573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015615876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061589a919061a5c7565b90506158ab81611a4c60028961a883565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156158fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061591f919061a5c7565b905061285f8161593060028a61a883565b611a4c908761a637565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090615997906000906001600160a01b031631615f8d565b60008484846040516024016159ae9392919061a8be565b60408051601f198184030181529181526020820180516001600160e01b03167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615a5d916001600160a01b039190911690670de0b6b3a764000090869060040161a5e0565b600060405180830381600087803b158015615a7757600080fd5b505af1158015615a8b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615b0457600080fd5b505af1158015615b18573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350615b6192506001600160a01b0390911690859089908990899061a8e8565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615bde57600080fd5b505af1158015615bf2573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150615c3f90670de0b6b3a764000090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615ca057600080fd5b505af1158015615cb4573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692615d08921690869060040161a663565b60006040518083038185885af1158015615d26573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052615d4f919081019061a76d565b50602154612cc49083906001600160a01b031631615f8d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615dc657600080fd5b505af1158015615dda573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615eb0919060040161a530565b600060405180830381600087803b158015615eca57600080fd5b505af1158015615ede573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b158015615f5a57600080fd5b505af1158015612cc4573d6000803e3d6000fd5b6000615f7861a0af565b615f8384848361600c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015615ff857600080fd5b505afa158015610fd5573d6000803e3d6000fd5b6000806160198584616087565b905061607c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161606792919061a663565b60405160208183030381529060405285616093565b9150505b9392505050565b600061608083836160c1565b60c081015151600090156160b7576160b084848460c001516160dc565b9050616080565b6160b08484616282565b60006160cd838361636d565b61608083836020015184616093565b6000806160e7616379565b905060006160f5868361644c565b9050600061610c82606001518360200151856168f2565b9050600061611c83838989616b04565b9050600061612982617981565b602081015181519192509060030b1561619c5789826040015160405160200161615392919061a929565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526161939160040161a530565b60405180910390fd5b60006161df6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617b50565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061623290849060040161a530565b602060405180830381865afa15801561624f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616273919061a9aa565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906162d790879060040161a530565b600060405180830381865afa1580156162f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261631c919081019061a76d565b9050600061634a828560405160200161633692919061a9d3565b604051602081830303815290604052617d50565b90506001600160a01b038116615f8357848460405160200161615392919061aa02565b611f7482826000617d63565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061640090849060040161aaad565b600060405180830381865afa15801561641d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616445919081019061aaf4565b9250505090565b61647e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506164c96040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6164d285617e66565b602082015260006164e28661824b565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616524573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261654c919081019061aaf4565b86838560200151604051602001616566949392919061ab3d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906165be90859060040161a530565b600060405180830381865afa1580156165db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616603919081019061aaf4565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061664b90849060040161ac41565b602060405180830381865afa158015616668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061668c919061a50e565b6166a15781604051602001616153919061ac93565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906166e690849060040161ad25565b600060405180830381865afa158015616703573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261672b919081019061aaf4565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061677290849060040161ad77565b602060405180830381865afa15801561678f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906167b3919061a50e565b15616848576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906167fd90849060040161ad77565b600060405180830381865afa15801561681a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616842919081019061aaf4565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161686d919061adc9565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161689992919061ae35565b600060405180830381865afa1580156168b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168de919081019061aaf4565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161690e5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061696e5761696e61a7a2565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106169c2576169c261a7a2565b6020026020010181905250846040516020016169de919061ae5a565b60405160208183030381529060405281600281518110616a0057616a0061a7a2565b602002602001018190525082604051602001616a1c919061aec6565b60405160208183030381529060405281600381518110616a3e57616a3e61a7a2565b60200260200101819052506000616a5482617981565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616ae590604080518082018252600080825260209182015281518083019092528451825280850190820152906184ce565b616afa5785604051602001616153919061af07565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616b54565b511590565b616cc857826020015115616c10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616193565b8260c0015115616cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616193565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616ce157905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616d3c9061af98565b935060ff1681518110616d5157616d5161a7a2565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616da2919061afb7565b604051602081830303815290604052828280616dbd9061af98565b935060ff1681518110616dd257616dd261a7a2565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616e1f9061af98565b935060ff1681518110616e3457616e3461a7a2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616e819061af98565b935060ff1681518110616e9657616e9661a7a2565b60200260200101819052508760200151828280616eb29061af98565b935060ff1681518110616ec757616ec761a7a2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616f149061af98565b935060ff1681518110616f2957616f2961a7a2565b602090810291909101015287518282616f418161af98565b935060ff1681518110616f5657616f5661a7a2565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616fa39061af98565b935060ff1681518110616fb857616fb861a7a2565b6020026020010181905250616fcc4661852f565b8282616fd78161af98565b935060ff1681518110616fec57616fec61a7a2565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170399061af98565b935060ff168151811061704e5761704e61a7a2565b6020026020010181905250868282806170669061af98565b935060ff168151811061707b5761707b61a7a2565b60209081029190910101528551156171a25760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826170cc8161af98565b935060ff16815181106170e1576170e161a7a2565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061713190899060040161a530565b600060405180830381865afa15801561714e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617176919081019061aaf4565b82826171818161af98565b935060ff16815181106171965761719661a7a2565b60200260200101819052505b8460200151156172725760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826171eb8161af98565b935060ff16815181106172005761720061a7a2565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061724d9061af98565b935060ff16815181106172625761726261a7a2565b6020026020010181905250617439565b6172aa616b4f8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61733d5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826172ed8161af98565b935060ff16815181106173025761730261a7a2565b60200260200101819052508460a00151604051602001617322919061ae5a565b60405160208183030381529060405282828061724d9061af98565b8460c0015115801561738057506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261737e90511590565b155b156174395760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826173c48161af98565b935060ff16815181106173d9576173d961a7a2565b60200260200101819052506173ed886185cf565b6040516020016173fd919061ae5a565b6040516020818303038152906040528282806174189061af98565b935060ff168151811061742d5761742d61a7a2565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261746d90511590565b6175025760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826174b08161af98565b935060ff16815181106174c5576174c561a7a2565b602002602001018190525084604001518282806174e19061af98565b935060ff16815181106174f6576174f661a7a2565b60200260200101819052505b6060850151156176235760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261754b8161af98565b935060ff16815181106175605761756061a7a2565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156175cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175f7919081019061aaf4565b82826176028161af98565b935060ff16815181106176175761761761a7a2565b60200260200101819052505b60e085015151156176ca5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261766d8161af98565b935060ff16815181106176825761768261a7a2565b602002602001018190525061769e8560e001516000015161852f565b82826176a98161af98565b935060ff16815181106176be576176be61a7a2565b60200260200101819052505b60e085015160200151156177745760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177178161af98565b935060ff168151811061772c5761772c61a7a2565b60200260200101819052506177488560e001516020015161852f565b82826177538161af98565b935060ff16815181106177685761776861a7a2565b60200260200101819052505b60e0850151604001511561781e5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826177c18161af98565b935060ff16815181106177d6576177d661a7a2565b60200260200101819052506177f28560e001516040015161852f565b82826177fd8161af98565b935060ff16815181106178125761781261a7a2565b60200260200101819052505b60e085015160600151156178c85760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261786b8161af98565b935060ff16815181106178805761788061a7a2565b602002602001018190525061789c8560e001516060015161852f565b82826178a78161af98565b935060ff16815181106178bc576178bc61a7a2565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156178e6576178e661a685565b60405190808252806020026020018201604052801561791957816020015b60608152602001906001900390816179045790505b50905060005b8260ff168160ff16101561797257838160ff16815181106179425761794261a7a2565b6020026020010151828260ff168151811061795f5761795f61a7a2565b602090810291909101015260010161791f565b5093505050505b949350505050565b6179a86040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617a2e9186910161b022565b600060405180830381865afa158015617a4b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a73919081019061aaf4565b90506000617a8186836190be565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617ab1919061a464565b6000604051808303816000875af1158015617ad0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617af8919081019061b069565b805190915060030b15801590617b115750602081015151155b8015617b205750604081015151155b15616afa5781600081518110617b3857617b3861a7a2565b6020026020010151604051602001616153919061b11f565b60606000617b858560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617bbc9082905b90619213565b15617d19576000617c3982617c3384617c2d617bff8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061923a565b9061929c565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617c9d908290619213565b15617d0757604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d04905b8290619321565b90505b617d1081619347565b92505050616080565b8215617d3257848460405160200161615392919061b30b565b5050604080516020810190915260008152616080565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617d7257505050565b6000617d7f8484846193b0565b90506000617d8c82617981565b602081015181519192509060030b158015617e285750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e2890604080518082018252600080825260209182015281518083019092528451825280850190820152617bb6565b15617e3557505050505050565b60408201515115617e55578160400151604051602001616153919061b3b2565b80604051602001616153919061b410565b60606000617e9b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f00905b82906184ce565b15617f6f57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a90839061994b565b619347565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617fd1905b82906199d5565b60010361809e57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261803790617cfd565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a905b8390619321565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180fd90617ef9565b1561823457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618165908390619a6f565b905060008160018351618178919061a637565b815181106181885761818861a7a2565b6020026020010151905061822b617f6a6181fe6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061994b565b95945050505050565b82604051602001616153919061b47b565b50919050565b606060006182808360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506182e290617ef9565b156182f05761608081619347565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261834f90617fca565b6001036183b957604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a90618097565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261841890617ef9565b1561823457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618480908390619a6f565b90506001815111156184bc57806002825161849b919061a637565b815181106184ab576184ab61a7a2565b602002602001015192505050919050565b5082604051602001616153919061b47b565b8051825160009111156184e357506000615f87565b815183516020850151600092916184f99161b559565b618503919061a637565b90508260200151810361851a576001915050615f87565b82516020840151819020912014905092915050565b6060600061853c83619b14565b600101905060008167ffffffffffffffff81111561855c5761855c61a685565b6040519080825280601f01601f191660200182016040528015618586576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461859057509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161865b905b8290619bf6565b1561869b57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186fa90618654565b1561873a57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261879990618654565b156187d957505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261883890618654565b8061889d5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261889d90618654565b156188dd57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261893c90618654565b806189a15750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189a190618654565b156189e157505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a4090618654565b80618aa55750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618aa590618654565b15618ae557505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b4490618654565b80618ba95750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ba990618654565b15618be957505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c4890618654565b15618c8857505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ce790618654565b15618d2757505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d8690618654565b15618dc657505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e2590618654565b15618e6557505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ec490618654565b15618f0457505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f6390618654565b80618fc85750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fc890618654565b1561900857505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261906790618654565b156190a757505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616153929060200161b56c565b60608060005b845181101561914957818582815181106190e0576190e061a7a2565b60200260200101516040516020016190f992919061a9d3565b604051602081830303815290604052915060018551619118919061a637565b8114619141578160405160200161912f919061b6d5565b60405160208183030381529060405291505b6001016190c4565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081619162579050509050838160008151811061918d5761918d61a7a2565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106191e1576191e161a7a2565b602002602001018190525081816002815181106192005761920061a7a2565b6020908102919091010152949350505050565b60208083015183518351928401516000936192319291849190619c0a565b14159392505050565b6040805180820190915260008082526020820152600061926c8460000151856020015185600001518660200151619d1b565b905083602001518161927e919061a637565b8451859061928d90839061a637565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156192c1575081615f87565b60208083015190840151600191146192e85750815160208481015190840151829020919020145b8015619319578251845185906192ff90839061a637565b905250825160208501805161931590839061b559565b9052505b509192915050565b6040805180820190915260008082526020820152619340838383619e3b565b5092915050565b60606000826000015167ffffffffffffffff8111156193685761936861a685565b6040519080825280601f01601f191660200182016040528015619392576020820181803683370190505b50905060006020820190506193408185602001518660000151619ee6565b606060006193bc616379565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816193d957905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194349061af98565b935060ff16815181106194495761944961a7a2565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161949a919061b716565b6040516020818303038152906040528282806194b59061af98565b935060ff16815181106194ca576194ca61a7a2565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195179061af98565b935060ff168151811061952c5761952c61a7a2565b602002602001018190525082604051602001619548919061aec6565b6040516020818303038152906040528282806195639061af98565b935060ff16815181106195785761957861a7a2565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806195c59061af98565b935060ff16815181106195da576195da61a7a2565b60200260200101819052506195ef8784619f60565b82826195fa8161af98565b935060ff168151811061960f5761960f61a7a2565b6020908102919091010152855151156196bb5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196618161af98565b935060ff16815181106196765761967661a7a2565b602002602001018190525061968f866000015184619f60565b828261969a8161af98565b935060ff16815181106196af576196af61a7a2565b60200260200101819052505b8560800151156197295760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197048161af98565b935060ff16815181106197195761971961a7a2565b602002602001018190525061978f565b841561978f5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261976e8161af98565b935060ff16815181106197835761978361a7a2565b60200260200101819052505b6040860151511561982b5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826197d98161af98565b935060ff16815181106197ee576197ee61a7a2565b6020026020010181905250856040015182828061980a9061af98565b935060ff168151811061981f5761981f61a7a2565b60200260200101819052505b8560600151156198955760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826198748161af98565b935060ff16815181106198895761988961a7a2565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156198b3576198b361a685565b6040519080825280602002602001820160405280156198e657816020015b60608152602001906001900390816198d15790505b50905060005b8260ff168160ff16101561993f57838160ff168151811061990f5761990f61a7a2565b6020026020010151828260ff168151811061992c5761992c61a7a2565b60209081029190910101526001016198ec565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619970575081615f87565b815183516020850151600092916199869161b559565b619990919061a637565b602084015190915060019082146199b1575082516020840151819020908220145b80156199cc578351855186906199c890839061a637565b9052505b50929392505050565b60008082600001516199f98560000151866020015186600001518760200151619d1b565b619a03919061b559565b90505b83516020850151619a17919061b559565b81116193405781619a278161b75b565b9250508260000151619a5e856020015183619a42919061a637565b8651619a4e919061a637565b8386600001518760200151619d1b565b619a68919061b559565b9050619a06565b60606000619a7d84846199d5565b619a8890600161b559565b67ffffffffffffffff811115619aa057619aa061a685565b604051908082528060200260200182016040528015619ad357816020015b6060815260200190600190039081619abe5790505b50905060005b8151811015617d4857619aef617f6a8686619321565b828281518110619b0157619b0161a7a2565b6020908102919091010152600101619ad9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619b5d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619b89576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619ba757662386f26fc10000830492506010015b6305f5e1008310619bbf576305f5e100830492506008015b6127108310619bd357612710830492506004015b60648310619be5576064830492506002015b600a8310615f875760010192915050565b6000619c028383619fa0565b159392505050565b600080858411619d115760208411619cbd5760008415619c55576001619c3186602061a637565b619c3c90600861b775565b619c4790600261b873565b619c51919061a637565b1990505b8351811685619c64898961b559565b619c6e919061a637565b805190935082165b818114619ca857878411619c905787945050505050617979565b83619c9a8161b87f565b945050828451169050619c76565b619cb2878561b559565b945050505050617979565b838320619cca858861a637565b619cd4908761b559565b91505b858210619d0f57848220808203619cfc57619cf2868461b559565b9350505050617979565b619d0760018461a637565b925050619cd7565b505b5092949350505050565b60008381868511619e265760208511619dd55760008515619d67576001619d4387602061a637565b619d4e90600861b775565b619d5990600261b873565b619d63919061a637565b1990505b84518116600087619d788b8b61b559565b619d82919061a637565b855190915083165b828114619dc757818610619daf57619da28b8b61b559565b9650505050505050617979565b85619db98161b75b565b965050838651169050619d8a565b859650505050505050617979565b508383206000905b619de7868961a637565b8211619e2457858320808203619e035783945050505050617979565b619e0e60018561b559565b9350508180619e1c9061b75b565b925050619ddd565b505b619e30878761b559565b979650505050505050565b60408051808201909152600080825260208201526000619e6d8560000151866020015186600001518760200151619d1b565b602080870180519186019190915251909150619e89908261a637565b835284516020860151619e9c919061b559565b8103619eab5760008552619edd565b83518351619eb9919061b559565b85518690619ec890839061a637565b9052508351619ed7908261b559565b60208601525b50909392505050565b60208110619f1e5781518352619efd60208461b559565b9250619f0a60208361b559565b9150619f1760208261a637565b9050619ee6565b6000198115619f4d576001619f3483602061a637565b619f409061010061b873565b619f4a919061a637565b90505b9151835183169219169190911790915250565b60606000619f6e848461644c565b8051602080830151604051939450619f889390910161b896565b60405160208183030381529060405291505092915050565b8151815160009190811115619fb3575081515b6020808501519084015160005b8381101561a06c578251825180821461a03c57600019602087101561a01b57600184619fed89602061a637565b619ff7919061b559565b61a00290600861b775565b61a00d90600261b873565b61a017919061a637565b1990505b818116838216818103911461a039579750615f879650505050505050565b50505b61a04760208661b559565b945061a05460208561b559565b9350505060208161a065919061b559565b9050619fc0565b5084518651616afa919061b8ee565b610c9f8061b90f83390190565b6113e28061c5ae83390190565b61182a8061d99083390190565b610d5e8061f1ba83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a0f261a0f7565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a0f26040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a1a95783516001600160a01b031683526020938401939092019160010161a182565b509095945050505050565b60005b8381101561a1cf57818101518382015260200161a1b7565b50506000910152565b6000815180845261a1f081602086016020860161a1b4565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a2e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a2d084865161a1d8565b602095860195909450929092019160010161a296565b50919750505060209485019492909201915060010161a22c565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3605781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a320565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a3d6604088018261a1d8565b905060208201519150868103602088015261a3f1818361a30c565b96505050602093840193919091019060010161a392565b600082825180855260208501945060208160051b8301016020850160005b8381101561a45857601f1985840301885261a44283835161a1d8565b602098890198909350919091019060010161a426565b50909695505050505050565b602081526000616080602083018461a408565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a4f8604087018261a30c565b955050602093840193919091019060010161a49f565b60006020828403121561a52057600080fd5b8151801515811461608057600080fd5b602081526000616080602083018461a1d8565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616afa608083018461a1d8565b600181811c9082168061a58e57607f821691505b602082108103618245577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561a5d957600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061822b606083018461a1d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615f8757615f8761a608565b828152604060208201526000617979604083018461a1d8565b6001600160a01b0383168152604060208201526000617979604083018461a1d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561a6d75761a6d761a685565b60405290565b60008067ffffffffffffffff84111561a6f85761a6f861a685565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a7275761a72761a685565b60405283815290508082840185101561a73f57600080fd5b617d4884602083018561a1b4565b600082601f83011261a75e57600080fd5b6160808383516020850161a6dd565b60006020828403121561a77f57600080fd5b815167ffffffffffffffff81111561a79657600080fd5b615f838482850161a74d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561a36057815186526020958601959091019060010161a7e5565b60608152600061a816606083018661a408565b828103602084015261a828818661a7d1565b9150508215156040830152949350505050565b6001600160a01b038516815260806020820152600061a85d608083018661a408565b828103604084015261a86f818661a7d1565b915050821515606083015295945050505050565b60008261a8b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608152600061a8d1606083018661a1d8565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a06040820152600061a91060a083018661a1d8565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a96181601a85016020880161a1b4565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a99e81601c84016020880161a1b4565b01601c01949350505050565b60006020828403121561a9bc57600080fd5b81516001600160a01b038116811461608057600080fd5b6000835161a9e581846020880161a1b4565b83519083019061a9f981836020880161a1b4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161aa3a81601a85016020880161a1b4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161aa7781603384016020880161a1b4565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616080608083018461a1d8565b60006020828403121561ab0657600080fd5b815167ffffffffffffffff81111561ab1d57600080fd5b8201601f8101841361ab2e57600080fd5b615f838482516020840161a6dd565b6000855161ab4f818460208a0161a1b4565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ab89816001840160208a0161a1b4565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161abc781600284016020890161a1b4565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ac0981600284016020880161a1b4565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061ac54604083018461a1d8565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161accb81601f85016020870161a1b4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061ad38604083018461a1d8565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061ad8a604083018461a1d8565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161ae0181601485016020870161a1b4565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061ae48604083018561a1d8565b828103602084015261607c818561a1d8565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161ae9281600185016020870161a1b4565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161aed881846020870161a1b4565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161af8b81604b85016020870161a1b4565b91909101604b0192915050565b600060ff821660ff810361afae5761afae61a608565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b01581602985016020870161a1b4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616080608083018461a1d8565b60006020828403121561b07b57600080fd5b815167ffffffffffffffff81111561b09257600080fd5b82016060818503121561b0a457600080fd5b61b0ac61a6b4565b81518060030b811461b0bd57600080fd5b8152602082015167ffffffffffffffff81111561b0d957600080fd5b61b0e58682850161a74d565b602083015250604082015167ffffffffffffffff81111561b10557600080fd5b61b1118682850161a74d565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b17d81602185016020870161a1b4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b36981602185016020880161a1b4565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b3a681602e84016020880161a1b4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b01581602985016020870161a1b4565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b46e81602285016020870161a1b4565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b4b381600e85016020870161a1b4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115615f8757615f8761a608565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b5a481601885016020880161a1b4565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b5e181601c84016020880161a1b4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b6e781846020870161a1b4565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b74e81601c85016020870161a1b4565b91909101601c0192915050565b6000600019820361b76e5761b76e61a608565b5060010190565b8082028115828204841417615f8757615f8761a608565b6001815b600184111561b7c75780850481111561b7ab5761b7ab61a608565b600184161561b7b957908102905b60019390931c92800261b790565b935093915050565b60008261b7de57506001615f87565b8161b7eb57506000615f87565b816001811461b801576002811461b80b5761b827565b6001915050615f87565b60ff84111561b81c5761b81c61a608565b50506001821b615f87565b5060208310610133831016604e8410600b841016171561b84a575081810a615f87565b61b857600019848461b78c565b806000190482111561b86b5761b86b61a608565b029392505050565b6000616080838361b7cf565b60008161b88e5761b88e61a608565b506000190190565b6000835161b8a881846020880161a1b4565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b8e281600184016020880161a1b4565b01600101949350505050565b81810360008312801583831316838312821617156193405761934061a60856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212203c84eed415f53c6b73679bdd3c1ebe23a4c98cf0abb3f4090db80e6ae1ff633164736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff458061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063a3f9d0e011610160578063dd51e82f116100d8578063fa18c09b1161008c578063fb176c1211610071578063fb176c121461049a578063fe7bdbb2146104a2578063fe8e5f1b146104aa57600080fd5b8063fa18c09b14610485578063fa7626d41461048d57600080fd5b8063e63ab1e9116100bd578063e63ab1e91461044e578063eb1ce7f914610475578063f68bd1c01461047d57600080fd5b8063dd51e82f1461043e578063e20c9f711461044657600080fd5b8063b5508aa91161012f578063c9350b7f11610114578063c9350b7f14610426578063cbd57e2f1461042e578063cebad2a61461043657600080fd5b8063b5508aa914610406578063ba414fa61461040e57600080fd5b8063a3f9d0e0146103c7578063a4943deb146103cf578063a783c789146103d7578063b0464fdc146103fe57600080fd5b80633f7286f41161020e57806371149c94116101c257806385226c81116101a757806385226c811461037657806385f438c11461038b578063916a17c6146103b257600080fd5b806371149c94146103665780637d7f772a1461036e57600080fd5b80635d62c860116101f35780635d62c8601461031457806366d9a9a0146103495780636a6218541461035e57600080fd5b80633f7286f41461030457806344671b941461030c57600080fd5b80632206eb65116102655780633e5e3c231161024a5780633e5e3c23146102ec5780633e73ecb4146102f45780633ee92923146102fc57600080fd5b80632206eb65146102cf5780632ade3880146102d757600080fd5b80630a9254e4146102975780630eee72a9146102a15780631779672f146102a95780631ed7831c146102b1575b600080fd5b61029f6104b2565b005b61029f610d62565b61029f610fdd565b6102b9611132565b6040516102c6919061a168565b60405180910390f35b61029f611194565b6102df6113d8565b6040516102c6919061a204565b6102b961151a565b61029f61157a565b61029f611adb565b6102b9611b95565b61029f611bf5565b61033b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6040519081526020016102c6565b610351611f78565b6040516102c6919061a36a565b61029f6120e5565b61029f61219c565b61029f612992565b61037e612ccb565b6040516102c6919061a464565b61033b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6103ba612d9b565b6040516102c6919061a477565b61029f612e81565b61029f61345f565b61033b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103ba61366f565b61037e613755565b610416613825565b60405190151581526020016102c6565b61029f6138f9565b61029f613b3d565b61029f61409e565b61029f6142d7565b6102b9614a8d565b61033b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61029f614aed565b61029f614c12565b61029f614fc0565b601f546104169060ff1681565b61029f6152e6565b61029f61593a565b61029f615d68565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516105049061a07b565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610589573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105ce9061a07b565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610652573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261072c919060840160408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615f6e565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906107b89061a088565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156107f4573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061084f9061a095565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610893573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516108d89061a0a2565b604051809103906000f0801580156108f4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156109a057600080fd5b505af11580156109b4573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610a2a57600080fd5b505af1158015610a3e573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b9457600080fd5b505af1158015610ba8573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610c1957600080fd5b505af1158015610c2d573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc7919061a50e565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610d4857600080fd5b505af1158015610d5c573d6000803e3d6000fd5b50505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015610e3257600080fd5b505af1158015610e46573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610f1c919060040161a530565b600060405180830381600087803b158015610f3657600080fd5b505af1158015610f4a573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450610fa79392831692909116908790879060040161a543565b600060405180830381600087803b158015610fc157600080fd5b505af1158015610fd5573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156110aa57600080fd5b505af11580156110be573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401610f1c565b6060601680548060200260200160405190810160405280929190818152602001828054801561118a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161116c575b5050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561126357600080fd5b505af1158015611277573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061134d919060040161a530565b600060405180830381600087803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b50506020546024546027546040517fb8969bd40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063b8969bd49450610fa79392831692909116908790879060040161a543565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561151157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114fa57838290600052602060002001805461146d9061a57a565b80601f01602080910402602001604051908101604052809291908181526020018280546114999061a57a565b80156114e65780601f106114bb576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116114c957829003601f168201915b50505050508152602001906001019061144e565b5050505081525050815260200190600101906113fc565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f3919061a5c7565b9050611600816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611650573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611674919061a5c7565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611742916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156117e957600080fd5b505af11580156117fd573d6000803e3d6000fd5b50506027546024546040518881526001600160a01b039283169450911691507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118a257600080fd5b505af11580156118b6573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201899052909116925063d9caed129150606401600060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bc919061a5c7565b90506119c88186615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3c919061a5c7565b9050611a5181611a4c888761a637565b615f8d565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac5919061a5c7565b9050611ad2816000615f8d565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401610e18565b6060601780548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b6040805160048082526024820183526020820180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611c96926001600160a01b03169160009187910161a5e0565b600060405180830381600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611e0a57600080fd5b505af1158015611e1e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611e6490600090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ec557600080fd5b505af1158015611ed9573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611f2d9290911690859060040161a663565b6000604051808303816000875af1158015611f4c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f74919081019061a76d565b5050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156115115783829060005260206000209060020201604051806040016040529081600082018054611fcf9061a57a565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffb9061a57a565b80156120485780601f1061201d57610100808354040283529160200191612048565b820191906000526020600020905b81548152906001019060200180831161202b57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156120cd57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161208f5790505b50505050508152505081526020019060010190611f9c565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612253919061a5c7565b9050612260816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d4919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916123a2916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b1580156123bc57600080fd5b505af11580156123d0573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506124a092506001600160a01b0390911690879061a663565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561251d57600080fd5b505af1158015612531573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda79061257c908990899061a64a565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c890612658908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126b957600080fd5b505af11580156126cd573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a02362945061272a9392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561274457600080fd5b505af1158015612758573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf919061a5c7565b90506127db8187615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561282b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284f919061a5c7565b905061285f81611a4c898761a637565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f9919061a5c7565b9050612906816000615f8d565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a919061a5c7565b9050612987816000615f8d565b505050505050505050565b604080516001808252818301909252600091816020015b60608152602001906001900390816129a95790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110612a0957612a0961a7a2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110612a4d57612a4d61a7a2565b6020908102919091010152604051600190600090612a739085908590859060240161a803565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b1157600080fd5b505af1158015612b25573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612bfb919060040161a530565b600060405180830381600087803b158015612c1557600080fd5b505af1158015612c29573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350612c7d9290911690859060040161a663565b6000604051808303816000875af1158015612c9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cc4919081019061a76d565b5050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611511578382906000526020600020018054612d0e9061a57a565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3a9061a57a565b8015612d875780601f10612d5c57610100808354040283529160200191612d87565b820191906000526020600020905b815481529060010190602001808311612d6a57829003601f168201915b505050505081526020019060010190612cef565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156115115760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e6957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411612e2b5790505b50505050508152505081526020019060010190612dbf565b604080516004808252602480830184526020830180516001600160e01b03167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3a919061a5c7565b9050612f47816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbb919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613089916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b1580156130a357600080fd5b505af11580156130b7573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561313057600080fd5b505af1158015613144573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156131fd57600080fd5b505af1158015613211573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e9061325c908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156132bd57600080fd5b505af11580156132d1573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061332e9392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561334857600080fd5b505af115801561335c573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156133ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d2919061a5c7565b90506133df816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561342f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613453919061a5c7565b905061285f8185615f8d565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156134fa57600080fd5b505af115801561350e573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506135e4919060040161a530565b600060405180830381600087803b1580156135fe57600080fd5b505af1158015613612573d6000803e3d6000fd5b50506022546024546021546040517fc8a023620000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c8a023629450610fa79392831692909116908790879060040161a543565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156115115760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561373d57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116136ff5790505b50505050508152505081526020019060010190613693565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156115115783829060005260206000200180546137989061a57a565b80601f01602080910402602001604051908101604052809291908181526020018280546137c49061a57a565b80156138115780601f106137e657610100808354040283529160200191613811565b820191906000526020600020905b8154815290600101906020018083116137f457829003601f168201915b505050505081526020019060010190613779565b60085460009060ff161561383d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156138ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f2919061a5c7565b1415905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156139c857600080fd5b505af11580156139dc573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613ab2919060040161a530565b600060405180830381600087803b158015613acc57600080fd5b505af1158015613ae0573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab599450610fa79392831692909116908790879060040161a543565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c25919061a5c7565b9050613c32816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca6919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613d74916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b158015613d8e57600080fd5b505af1158015613da2573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613e1b57600080fd5b505af1158015613e2f573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f0557600080fd5b505af1158015613f19573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90613f64908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fc557600080fd5b505af1158015613fd9573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506140369392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561405057600080fd5b505af1158015614064573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a08231910161278e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561413e57600080fd5b505af1158015614152573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614228919060040161a530565b600060405180830381600087803b15801561424257600080fd5b505af1158015614256573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db935086926142aa921690869060040161a663565b6000604051808303818588803b1580156142c357600080fd5b505af1158015611ad2573d6000803e3d6000fd5b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561433057600080fd5b505af1158015614344573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061441a919060040161a530565b600060405180830381600087803b15801561443457600080fd5b505af1158015614448573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561449c57600080fd5b505af11580156144b0573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561450d57600080fd5b505af1158015614521573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506145f7919060040161a530565b600060405180830381600087803b15801561461157600080fd5b505af1158015614625573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561467957600080fd5b505af115801561468d573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156146ea57600080fd5b505af11580156146fe573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561475257600080fd5b505af1158015614766573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561483357600080fd5b505af1158015614847573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156148a457600080fd5b505af11580156148b8573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061490c9290911690859060040161a663565b6000604051808303816000875af115801561492b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614953919081019061a76d565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156149ad57600080fd5b505af11580156149c1573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614a1557600080fd5b505af1158015614a29573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611c96916001600160a01b031690600090869060040161a5e0565b6060601580548060200260200160405190810160405280929190818152602001828054801561118a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161116c575050505050905090565b600080604051602001614b23907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614b8a57600080fd5b505af1158015614b9e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016135e4565b604080516001808252818301909252600091816020015b6060815260200190600190039081614c295790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110614c8957614c8961a7a2565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110614ccd57614ccd61a7a2565b6020908102919091010152604051600190600090614cf39085908590859060240161a803565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614d9b916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b158015614db557600080fd5b505af1158015614dc9573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614e4257600080fd5b505af1158015614e56573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b1469350614e9d92506001600160a01b039091169087908790879061a83b565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614f1a57600080fd5b505af1158015614f2e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614f7490600090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612bfb565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b03163161501f816000615f8d565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561509457600080fd5b505af11580156150a8573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506150eb92506001600160a01b0390911690859061a663565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561516857600080fd5b505af115801561517c573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c91506151c990670de0b6b3a764000090869061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561522a57600080fd5b505af115801561523e573d6000803e3d6000fd5b50506020546021546040517f35c018db0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506335c018db93508792615292921690879060040161a663565b6000604051808303818588803b1580156152ab57600080fd5b505af11580156152bf573d6000803e3d6000fd5b50506021546001600160a01b0316319250610d5c9150829050670de0b6b3a7640000615f8d565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156153aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153ce919061a5c7565b90506153db816000615f8d565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561542b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061544f919061a5c7565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161551d916001600160a01b039190911690600090869060040161a5e0565b600060405180830381600087803b15801561553757600080fd5b505af115801561554b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156155c457600080fd5b505af11580156155d8573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b0316905061561660028861a883565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156156c557600080fd5b505af11580156156d9573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e90615724908990899061a64a565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561578557600080fd5b505af1158015615799573d6000803e3d6000fd5b50506022546024546021546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506157f69392831692909116908a908a9060040161a543565b600060405180830381600087803b15801561581057600080fd5b505af1158015615824573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015615876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061589a919061a5c7565b90506158ab81611a4c60028961a883565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156158fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061591f919061a5c7565b905061285f8161593060028a61a883565b611a4c908761a637565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090615997906000906001600160a01b031631615f8d565b60008484846040516024016159ae9392919061a8be565b60408051601f198184030181529181526020820180516001600160e01b03167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615a5d916001600160a01b039190911690670de0b6b3a764000090869060040161a5e0565b600060405180830381600087803b158015615a7757600080fd5b505af1158015615a8b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615b0457600080fd5b505af1158015615b18573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350615b6192506001600160a01b0390911690859089908990899061a8e8565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615bde57600080fd5b505af1158015615bf2573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150615c3f90670de0b6b3a764000090859061a64a565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615ca057600080fd5b505af1158015615cb4573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692615d08921690869060040161a663565b60006040518083038185885af1158015615d26573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052615d4f919081019061a76d565b50602154612cc49083906001600160a01b031631615f8d565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615dc657600080fd5b505af1158015615dda573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615eb0919060040161a530565b600060405180830381600087803b158015615eca57600080fd5b505af1158015615ede573d6000803e3d6000fd5b5050602254602480546027546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201869052909116925063d9caed129150606401600060405180830381600087803b158015615f5a57600080fd5b505af1158015612cc4573d6000803e3d6000fd5b6000615f7861a0af565b615f8384848361600c565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015615ff857600080fd5b505afa158015610fd5573d6000803e3d6000fd5b6000806160198584616087565b905061607c6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161606792919061a663565b60405160208183030381529060405285616093565b9150505b9392505050565b600061608083836160c1565b60c081015151600090156160b7576160b084848460c001516160dc565b9050616080565b6160b08484616282565b60006160cd838361636d565b61608083836020015184616093565b6000806160e7616379565b905060006160f5868361644c565b9050600061610c82606001518360200151856168f2565b9050600061611c83838989616b04565b9050600061612982617981565b602081015181519192509060030b1561619c5789826040015160405160200161615392919061a929565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526161939160040161a530565b60405180910390fd5b60006161df6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617b50565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061623290849060040161a530565b602060405180830381865afa15801561624f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616273919061a9aa565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906162d790879060040161a530565b600060405180830381865afa1580156162f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261631c919081019061a76d565b9050600061634a828560405160200161633692919061a9d3565b604051602081830303815290604052617d50565b90506001600160a01b038116615f8357848460405160200161615392919061aa02565b611f7482826000617d63565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061640090849060040161aaad565b600060405180830381865afa15801561641d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616445919081019061aaf4565b9250505090565b61647e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506164c96040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6164d285617e66565b602082015260006164e28661824b565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616524573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261654c919081019061aaf4565b86838560200151604051602001616566949392919061ab3d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906165be90859060040161a530565b600060405180830381865afa1580156165db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616603919081019061aaf4565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061664b90849060040161ac41565b602060405180830381865afa158015616668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061668c919061a50e565b6166a15781604051602001616153919061ac93565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906166e690849060040161ad25565b600060405180830381865afa158015616703573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261672b919081019061aaf4565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061677290849060040161ad77565b602060405180830381865afa15801561678f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906167b3919061a50e565b15616848576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906167fd90849060040161ad77565b600060405180830381865afa15801561681a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616842919081019061aaf4565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161686d919061adc9565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161689992919061ae35565b600060405180830381865afa1580156168b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168de919081019061aaf4565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161690e5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061696e5761696e61a7a2565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106169c2576169c261a7a2565b6020026020010181905250846040516020016169de919061ae5a565b60405160208183030381529060405281600281518110616a0057616a0061a7a2565b602002602001018190525082604051602001616a1c919061aec6565b60405160208183030381529060405281600381518110616a3e57616a3e61a7a2565b60200260200101819052506000616a5482617981565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616ae590604080518082018252600080825260209182015281518083019092528451825280850190820152906184ce565b616afa5785604051602001616153919061af07565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616b54565b511590565b616cc857826020015115616c10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616193565b8260c0015115616cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616193565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616ce157905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616d3c9061af98565b935060ff1681518110616d5157616d5161a7a2565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616da2919061afb7565b604051602081830303815290604052828280616dbd9061af98565b935060ff1681518110616dd257616dd261a7a2565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616e1f9061af98565b935060ff1681518110616e3457616e3461a7a2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616e819061af98565b935060ff1681518110616e9657616e9661a7a2565b60200260200101819052508760200151828280616eb29061af98565b935060ff1681518110616ec757616ec761a7a2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616f149061af98565b935060ff1681518110616f2957616f2961a7a2565b602090810291909101015287518282616f418161af98565b935060ff1681518110616f5657616f5661a7a2565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616fa39061af98565b935060ff1681518110616fb857616fb861a7a2565b6020026020010181905250616fcc4661852f565b8282616fd78161af98565b935060ff1681518110616fec57616fec61a7a2565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806170399061af98565b935060ff168151811061704e5761704e61a7a2565b6020026020010181905250868282806170669061af98565b935060ff168151811061707b5761707b61a7a2565b60209081029190910101528551156171a25760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826170cc8161af98565b935060ff16815181106170e1576170e161a7a2565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061713190899060040161a530565b600060405180830381865afa15801561714e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617176919081019061aaf4565b82826171818161af98565b935060ff16815181106171965761719661a7a2565b60200260200101819052505b8460200151156172725760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826171eb8161af98565b935060ff16815181106172005761720061a7a2565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061724d9061af98565b935060ff16815181106172625761726261a7a2565b6020026020010181905250617439565b6172aa616b4f8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61733d5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826172ed8161af98565b935060ff16815181106173025761730261a7a2565b60200260200101819052508460a00151604051602001617322919061ae5a565b60405160208183030381529060405282828061724d9061af98565b8460c0015115801561738057506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261737e90511590565b155b156174395760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826173c48161af98565b935060ff16815181106173d9576173d961a7a2565b60200260200101819052506173ed886185cf565b6040516020016173fd919061ae5a565b6040516020818303038152906040528282806174189061af98565b935060ff168151811061742d5761742d61a7a2565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261746d90511590565b6175025760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826174b08161af98565b935060ff16815181106174c5576174c561a7a2565b602002602001018190525084604001518282806174e19061af98565b935060ff16815181106174f6576174f661a7a2565b60200260200101819052505b6060850151156176235760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261754b8161af98565b935060ff16815181106175605761756061a7a2565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156175cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175f7919081019061aaf4565b82826176028161af98565b935060ff16815181106176175761761761a7a2565b60200260200101819052505b60e085015151156176ca5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261766d8161af98565b935060ff16815181106176825761768261a7a2565b602002602001018190525061769e8560e001516000015161852f565b82826176a98161af98565b935060ff16815181106176be576176be61a7a2565b60200260200101819052505b60e085015160200151156177745760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826177178161af98565b935060ff168151811061772c5761772c61a7a2565b60200260200101819052506177488560e001516020015161852f565b82826177538161af98565b935060ff16815181106177685761776861a7a2565b60200260200101819052505b60e0850151604001511561781e5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826177c18161af98565b935060ff16815181106177d6576177d661a7a2565b60200260200101819052506177f28560e001516040015161852f565b82826177fd8161af98565b935060ff16815181106178125761781261a7a2565b60200260200101819052505b60e085015160600151156178c85760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261786b8161af98565b935060ff16815181106178805761788061a7a2565b602002602001018190525061789c8560e001516060015161852f565b82826178a78161af98565b935060ff16815181106178bc576178bc61a7a2565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156178e6576178e661a685565b60405190808252806020026020018201604052801561791957816020015b60608152602001906001900390816179045790505b50905060005b8260ff168160ff16101561797257838160ff16815181106179425761794261a7a2565b6020026020010151828260ff168151811061795f5761795f61a7a2565b602090810291909101015260010161791f565b5093505050505b949350505050565b6179a86040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617a2e9186910161b022565b600060405180830381865afa158015617a4b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a73919081019061aaf4565b90506000617a8186836190be565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617ab1919061a464565b6000604051808303816000875af1158015617ad0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617af8919081019061b069565b805190915060030b15801590617b115750602081015151155b8015617b205750604081015151155b15616afa5781600081518110617b3857617b3861a7a2565b6020026020010151604051602001616153919061b11f565b60606000617b858560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617bbc9082905b90619213565b15617d19576000617c3982617c3384617c2d617bff8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061923a565b9061929c565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617c9d908290619213565b15617d0757604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d04905b8290619321565b90505b617d1081619347565b92505050616080565b8215617d3257848460405160200161615392919061b30b565b5050604080516020810190915260008152616080565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617d7257505050565b6000617d7f8484846193b0565b90506000617d8c82617981565b602081015181519192509060030b158015617e285750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e2890604080518082018252600080825260209182015281518083019092528451825280850190820152617bb6565b15617e3557505050505050565b60408201515115617e55578160400151604051602001616153919061b3b2565b80604051602001616153919061b410565b60606000617e9b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f00905b82906184ce565b15617f6f57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a90839061994b565b619347565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617fd1905b82906199d5565b60010361809e57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261803790617cfd565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a905b8390619321565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180fd90617ef9565b1561823457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618165908390619a6f565b905060008160018351618178919061a637565b815181106181885761818861a7a2565b6020026020010151905061822b617f6a6181fe6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061994b565b95945050505050565b82604051602001616153919061b47b565b50919050565b606060006182808360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506182e290617ef9565b156182f05761608081619347565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261834f90617fca565b6001036183b957604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261608090617f6a90618097565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261841890617ef9565b1561823457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618480908390619a6f565b90506001815111156184bc57806002825161849b919061a637565b815181106184ab576184ab61a7a2565b602002602001015192505050919050565b5082604051602001616153919061b47b565b8051825160009111156184e357506000615f87565b815183516020850151600092916184f99161b559565b618503919061a637565b90508260200151810361851a576001915050615f87565b82516020840151819020912014905092915050565b6060600061853c83619b14565b600101905060008167ffffffffffffffff81111561855c5761855c61a685565b6040519080825280601f01601f191660200182016040528015618586576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461859057509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161865b905b8290619bf6565b1561869b57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186fa90618654565b1561873a57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261879990618654565b156187d957505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261883890618654565b8061889d5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261889d90618654565b156188dd57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261893c90618654565b806189a15750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189a190618654565b156189e157505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a4090618654565b80618aa55750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618aa590618654565b15618ae557505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b4490618654565b80618ba95750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ba990618654565b15618be957505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c4890618654565b15618c8857505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ce790618654565b15618d2757505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d8690618654565b15618dc657505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e2590618654565b15618e6557505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ec490618654565b15618f0457505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f6390618654565b80618fc85750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fc890618654565b1561900857505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261906790618654565b156190a757505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151616153929060200161b56c565b60608060005b845181101561914957818582815181106190e0576190e061a7a2565b60200260200101516040516020016190f992919061a9d3565b604051602081830303815290604052915060018551619118919061a637565b8114619141578160405160200161912f919061b6d5565b60405160208183030381529060405291505b6001016190c4565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081619162579050509050838160008151811061918d5761918d61a7a2565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106191e1576191e161a7a2565b602002602001018190525081816002815181106192005761920061a7a2565b6020908102919091010152949350505050565b60208083015183518351928401516000936192319291849190619c0a565b14159392505050565b6040805180820190915260008082526020820152600061926c8460000151856020015185600001518660200151619d1b565b905083602001518161927e919061a637565b8451859061928d90839061a637565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156192c1575081615f87565b60208083015190840151600191146192e85750815160208481015190840151829020919020145b8015619319578251845185906192ff90839061a637565b905250825160208501805161931590839061b559565b9052505b509192915050565b6040805180820190915260008082526020820152619340838383619e3b565b5092915050565b60606000826000015167ffffffffffffffff8111156193685761936861a685565b6040519080825280601f01601f191660200182016040528015619392576020820181803683370190505b50905060006020820190506193408185602001518660000151619ee6565b606060006193bc616379565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816193d957905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806194349061af98565b935060ff16815181106194495761944961a7a2565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161949a919061b716565b6040516020818303038152906040528282806194b59061af98565b935060ff16815181106194ca576194ca61a7a2565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195179061af98565b935060ff168151811061952c5761952c61a7a2565b602002602001018190525082604051602001619548919061aec6565b6040516020818303038152906040528282806195639061af98565b935060ff16815181106195785761957861a7a2565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806195c59061af98565b935060ff16815181106195da576195da61a7a2565b60200260200101819052506195ef8784619f60565b82826195fa8161af98565b935060ff168151811061960f5761960f61a7a2565b6020908102919091010152855151156196bb5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196618161af98565b935060ff16815181106196765761967661a7a2565b602002602001018190525061968f866000015184619f60565b828261969a8161af98565b935060ff16815181106196af576196af61a7a2565b60200260200101819052505b8560800151156197295760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197048161af98565b935060ff16815181106197195761971961a7a2565b602002602001018190525061978f565b841561978f5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261976e8161af98565b935060ff16815181106197835761978361a7a2565b60200260200101819052505b6040860151511561982b5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826197d98161af98565b935060ff16815181106197ee576197ee61a7a2565b6020026020010181905250856040015182828061980a9061af98565b935060ff168151811061981f5761981f61a7a2565b60200260200101819052505b8560600151156198955760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826198748161af98565b935060ff16815181106198895761988961a7a2565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156198b3576198b361a685565b6040519080825280602002602001820160405280156198e657816020015b60608152602001906001900390816198d15790505b50905060005b8260ff168160ff16101561993f57838160ff168151811061990f5761990f61a7a2565b6020026020010151828260ff168151811061992c5761992c61a7a2565b60209081029190910101526001016198ec565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619970575081615f87565b815183516020850151600092916199869161b559565b619990919061a637565b602084015190915060019082146199b1575082516020840151819020908220145b80156199cc578351855186906199c890839061a637565b9052505b50929392505050565b60008082600001516199f98560000151866020015186600001518760200151619d1b565b619a03919061b559565b90505b83516020850151619a17919061b559565b81116193405781619a278161b75b565b9250508260000151619a5e856020015183619a42919061a637565b8651619a4e919061a637565b8386600001518760200151619d1b565b619a68919061b559565b9050619a06565b60606000619a7d84846199d5565b619a8890600161b559565b67ffffffffffffffff811115619aa057619aa061a685565b604051908082528060200260200182016040528015619ad357816020015b6060815260200190600190039081619abe5790505b50905060005b8151811015617d4857619aef617f6a8686619321565b828281518110619b0157619b0161a7a2565b6020908102919091010152600101619ad9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619b5d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619b89576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619ba757662386f26fc10000830492506010015b6305f5e1008310619bbf576305f5e100830492506008015b6127108310619bd357612710830492506004015b60648310619be5576064830492506002015b600a8310615f875760010192915050565b6000619c028383619fa0565b159392505050565b600080858411619d115760208411619cbd5760008415619c55576001619c3186602061a637565b619c3c90600861b775565b619c4790600261b873565b619c51919061a637565b1990505b8351811685619c64898961b559565b619c6e919061a637565b805190935082165b818114619ca857878411619c905787945050505050617979565b83619c9a8161b87f565b945050828451169050619c76565b619cb2878561b559565b945050505050617979565b838320619cca858861a637565b619cd4908761b559565b91505b858210619d0f57848220808203619cfc57619cf2868461b559565b9350505050617979565b619d0760018461a637565b925050619cd7565b505b5092949350505050565b60008381868511619e265760208511619dd55760008515619d67576001619d4387602061a637565b619d4e90600861b775565b619d5990600261b873565b619d63919061a637565b1990505b84518116600087619d788b8b61b559565b619d82919061a637565b855190915083165b828114619dc757818610619daf57619da28b8b61b559565b9650505050505050617979565b85619db98161b75b565b965050838651169050619d8a565b859650505050505050617979565b508383206000905b619de7868961a637565b8211619e2457858320808203619e035783945050505050617979565b619e0e60018561b559565b9350508180619e1c9061b75b565b925050619ddd565b505b619e30878761b559565b979650505050505050565b60408051808201909152600080825260208201526000619e6d8560000151866020015186600001518760200151619d1b565b602080870180519186019190915251909150619e89908261a637565b835284516020860151619e9c919061b559565b8103619eab5760008552619edd565b83518351619eb9919061b559565b85518690619ec890839061a637565b9052508351619ed7908261b559565b60208601525b50909392505050565b60208110619f1e5781518352619efd60208461b559565b9250619f0a60208361b559565b9150619f1760208261a637565b9050619ee6565b6000198115619f4d576001619f3483602061a637565b619f409061010061b873565b619f4a919061a637565b90505b9151835183169219169190911790915250565b60606000619f6e848461644c565b8051602080830151604051939450619f889390910161b896565b60405160208183030381529060405291505092915050565b8151815160009190811115619fb3575081515b6020808501519084015160005b8381101561a06c578251825180821461a03c57600019602087101561a01b57600184619fed89602061a637565b619ff7919061b559565b61a00290600861b775565b61a00d90600261b873565b61a017919061a637565b1990505b818116838216818103911461a039579750615f879650505050505050565b50505b61a04760208661b559565b945061a05460208561b559565b9350505060208161a065919061b559565b9050619fc0565b5084518651616afa919061b8ee565b610c9f8061b90f83390190565b61140b8061c5ae83390190565b6117f98061d9b983390190565b610d5e8061f1b283390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a0f261a0f7565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a0f26040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a1a95783516001600160a01b031683526020938401939092019160010161a182565b509095945050505050565b60005b8381101561a1cf57818101518382015260200161a1b7565b50506000910152565b6000815180845261a1f081602086016020860161a1b4565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a2e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a2d084865161a1d8565b602095860195909450929092019160010161a296565b50919750505060209485019492909201915060010161a22c565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3605781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a320565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a3d6604088018261a1d8565b905060208201519150868103602088015261a3f1818361a30c565b96505050602093840193919091019060010161a392565b600082825180855260208501945060208160051b8301016020850160005b8381101561a45857601f1985840301885261a44283835161a1d8565b602098890198909350919091019060010161a426565b50909695505050505050565b602081526000616080602083018461a408565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a300577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a4f8604087018261a30c565b955050602093840193919091019060010161a49f565b60006020828403121561a52057600080fd5b8151801515811461608057600080fd5b602081526000616080602083018461a1d8565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616afa608083018461a1d8565b600181811c9082168061a58e57607f821691505b602082108103618245577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561a5d957600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061822b606083018461a1d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615f8757615f8761a608565b828152604060208201526000617979604083018461a1d8565b6001600160a01b0383168152604060208201526000617979604083018461a1d8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561a6d75761a6d761a685565b60405290565b60008067ffffffffffffffff84111561a6f85761a6f861a685565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a7275761a72761a685565b60405283815290508082840185101561a73f57600080fd5b617d4884602083018561a1b4565b600082601f83011261a75e57600080fd5b6160808383516020850161a6dd565b60006020828403121561a77f57600080fd5b815167ffffffffffffffff81111561a79657600080fd5b615f838482850161a74d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561a36057815186526020958601959091019060010161a7e5565b60608152600061a816606083018661a408565b828103602084015261a828818661a7d1565b9150508215156040830152949350505050565b6001600160a01b038516815260806020820152600061a85d608083018661a408565b828103604084015261a86f818661a7d1565b915050821515606083015295945050505050565b60008261a8b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60608152600061a8d1606083018661a1d8565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a06040820152600061a91060a083018661a1d8565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a96181601a85016020880161a1b4565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a99e81601c84016020880161a1b4565b01601c01949350505050565b60006020828403121561a9bc57600080fd5b81516001600160a01b038116811461608057600080fd5b6000835161a9e581846020880161a1b4565b83519083019061a9f981836020880161a1b4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161aa3a81601a85016020880161a1b4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161aa7781603384016020880161a1b4565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616080608083018461a1d8565b60006020828403121561ab0657600080fd5b815167ffffffffffffffff81111561ab1d57600080fd5b8201601f8101841361ab2e57600080fd5b615f838482516020840161a6dd565b6000855161ab4f818460208a0161a1b4565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ab89816001840160208a0161a1b4565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161abc781600284016020890161a1b4565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ac0981600284016020880161a1b4565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061ac54604083018461a1d8565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161accb81601f85016020870161a1b4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061ad38604083018461a1d8565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061ad8a604083018461a1d8565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161ae0181601485016020870161a1b4565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061ae48604083018561a1d8565b828103602084015261607c818561a1d8565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161ae9281600185016020870161a1b4565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161aed881846020870161a1b4565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161af8b81604b85016020870161a1b4565b91909101604b0192915050565b600060ff821660ff810361afae5761afae61a608565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b01581602985016020870161a1b4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616080608083018461a1d8565b60006020828403121561b07b57600080fd5b815167ffffffffffffffff81111561b09257600080fd5b82016060818503121561b0a457600080fd5b61b0ac61a6b4565b81518060030b811461b0bd57600080fd5b8152602082015167ffffffffffffffff81111561b0d957600080fd5b61b0e58682850161a74d565b602083015250604082015167ffffffffffffffff81111561b10557600080fd5b61b1118682850161a74d565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b17d81602185016020870161a1b4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b36981602185016020880161a1b4565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b3a681602e84016020880161a1b4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b01581602985016020870161a1b4565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b46e81602285016020870161a1b4565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b4b381600e85016020870161a1b4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115615f8757615f8761a608565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b5a481601885016020880161a1b4565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b5e181601c84016020880161a1b4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b6e781846020870161a1b4565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b74e81601c85016020870161a1b4565b91909101601c0192915050565b6000600019820361b76e5761b76e61a608565b5060010190565b8082028115828204841417615f8757615f8761a608565b6001815b600184111561b7c75780850481111561b7ab5761b7ab61a608565b600184161561b7b957908102905b60019390931c92800261b790565b935093915050565b60008261b7de57506001615f87565b8161b7eb57506000615f87565b816001811461b801576002811461b80b5761b827565b6001915050615f87565b60ff84111561b81c5761b81c61a608565b50506001821b615f87565b5060208310610133831016604e8410600b841016171561b84a575081810a615f87565b61b857600019848461b78c565b806000190482111561b86b5761b86b61a608565b029392505050565b6000616080838361b7cf565b60008161b88e5761b88e61a608565b506000190190565b6000835161b8a881846020880161a1b4565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b8e281600184016020880161a1b4565b01600101949350505050565b81810360008312801583831316838312821617156193405761934061a60856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220d1fcd333f2be8f2308a5789aef68c9f8f0e3fe64e255e30e1b8af263f1c83c6064736f6c634300081a0033", } // GatewayEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go index 13ef7da5..c83ec9ca 100644 --- a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go +++ b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go @@ -31,8 +31,8 @@ var ( // GatewayEVMEchidnaTestMetaData contains all meta data concerning the GatewayEVMEchidnaTest contract. var GatewayEVMEchidnaTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061324883390190565b6113e280613ee783390190565b608051612fff61024960003960008181611d3301528181611d5c01526121a50152612fff6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b506102596102543660046129e9565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612a47565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612aab565b6108f3565b6102c36102be366004612aab565b61094d565b6040516102659190612b6c565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612b7f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612aab565b6109de565b34801561038457600080fd5b5061028e610393366004612b98565b610b0b565b61028e6103a6366004612aab565b610b55565b3480156103b757600080fd5b5061028e6103c6366004612b98565b610cdc565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610d2d565b61028e61040e366004612bf3565b610d62565b34801561041f57600080fd5b5061028e61042e366004612cfa565b610d81565b34801561043f57600080fd5b5061035761105e565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612d69565b61108d565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6111b8565b34801561055457600080fd5b5061028e610563366004612dc3565b6111ea565b34801561057457600080fd5b50610259610583366004612b98565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612a47565b61128f565b34801561068b57600080fd5b5061028e61069a366004612cfa565b611383565b3480156106ab57600080fd5b5061028e6106ba366004612e15565b6114fd565b3480156106cb57600080fd5b5061028e6106da366004612b98565b6117b2565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612a47565b6117f6565b34801561075257600080fd5b5061028e610761366004612e58565b611923565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a816119d6565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611acd565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610940929190612ed4565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610979816119d6565b610981611acd565b600061098e868686611b2b565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109cd93929190612ef0565b60405180910390a295945050505050565b6109e6611acd565b34600003610a20576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a6d576040519150601f19603f3d011682016040523d82523d6000602084013e610a72565b606091505b5090915050801515600003610ab3576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610afd9493929190612f0a565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b45816119d6565b610b4f83836119e0565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b7f816119d6565b610b87611acd565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bd5576040519150601f19603f3d011682016040523d82523d6000602084013e610bda565b606091505b509150915081610c16576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610c5d9088908890600401612ed4565b600060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610ccc93929190612ef0565b60405180910390a2505050505050565b6001600160a01b0381163314610d1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d288282611bd4565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d57816119d6565b610d5f611c98565b50565b610d6a611d28565b610d7382611df8565b610d7d8282611e03565b5050565b610d89611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610db3816119d6565b610dbb611acd565b83600003610df5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dff8686611fa8565b610e35576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec19190612f33565b610ef7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f04868585611b2b565b9050610f108787611fa8565b610f46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190612f55565b90508015610fdc57610fdc8882612038565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161102393929190612ef0565b60405180910390a350505061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061106861219a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156110f357600080fd5b505af1158015611107573d6000803e3d6000fd5b505060045461112592506001600160a01b0316905085858585610d81565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190612f55565b15610b4f57610b4f612f6e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111e2816119d6565b610d5f6121fc565b6111f2611acd565b8360000361122c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611237338486612275565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112809493929190612f0a565b60405180910390a35050505050565b600061129a816119d6565b6000546001600160a01b0316156112dd576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661131d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113477f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61138b611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113b5816119d6565b6113bd611acd565b836000036113f7576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140b6001600160a01b03871686866123c9565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114529086908690600401612ed4565b600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516114cb93929190612ef0565b60405180910390a35061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115485750825b905060008267ffffffffffffffff1660011480156115655750303b155b905081158015611573575080155b156115aa576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561160b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061162857506001600160a01b038716155b1561165f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61166761243d565b61166f612445565b61167761243d565b61167f612455565b61168a6000876119e0565b506116b57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876119e0565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117137f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896119e0565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117a85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546117ec816119d6565b610b4f8383611bd4565b6117fe611acd565b34600003611838576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b50909150508015156000036118cb576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61192b611acd565b81600003611965576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611970338284612275565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109409291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d5f8133612465565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ac3576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a793390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b29576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b0316348686604051611b4b929190612f9d565b60006040518083038185875af1925050503d8060008114611b88576040519150601f19603f3d011682016040523d82523d6000602084013e611b8d565b606091505b509150915081611bc9576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ac3576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611ca06124f2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dc157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611db57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d7d816119d6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e7b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e7891810190612f55565b60015b611ec1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f1d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611eb8565b610d28838361254d565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fa2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190612f33565b6003546001600160a01b039081169083160361215a576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de9190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b505050505050565b600054610d7d906001600160a01b038481169116836123c9565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612204611acd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d0a565b6003546001600160a01b03908116908316036123ad576122a06001600160a01b0383168430846125a3565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b50505050505050565b600054610d28906001600160a01b0384811691869116846125a3565b6040516001600160a01b03838116602483015260448201839052610d2891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125dc565b611b29612658565b61244d612658565b611b296126bf565b61245d612658565b611b296126c7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d7d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611eb8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b29576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61255682612718565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561259b57610d2882826127c0565b610d7d612836565b6040516001600160a01b038481166024830152838116604483015260648201839052610b4f9186918216906323b872dd906084016123f6565b60006125f16001600160a01b0384168361286e565b905080516000141580156126165750808060200190518101906126149190612f33565b155b15610d28576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611eb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b29576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612174612658565b6126cf612658565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612767576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611eb8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127dd9190612fad565b600060405180830381855af49150503d8060008114612818576040519150601f19603f3d011682016040523d82523d6000602084013e61281d565b606091505b509150915061282d85838361287c565b95945050505050565b3415611b29576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611bcd838360006128f1565b6060826128915761288c826129a7565b611bcd565b81511580156128a857506001600160a01b0384163b155b156128ea576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611eb8565b5080611bcd565b60608147101561292f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611eb8565b600080856001600160a01b0316848660405161294b9190612fad565b60006040518083038185875af1925050503d8060008114612988576040519150601f19603f3d011682016040523d82523d6000602084013e61298d565b606091505b509150915061299d86838361287c565b9695505050505050565b8051156129b75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129fb57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611bcd57600080fd5b80356001600160a01b0381168114612a4257600080fd5b919050565b600060208284031215612a5957600080fd5b611bcd82612a2b565b60008083601f840112612a7457600080fd5b50813567ffffffffffffffff811115612a8c57600080fd5b602083019150836020828501011115612aa457600080fd5b9250929050565b600080600060408486031215612ac057600080fd5b612ac984612a2b565b9250602084013567ffffffffffffffff811115612ae557600080fd5b612af186828701612a62565b9497909650939450505050565b60005b83811015612b19578181015183820152602001612b01565b50506000910152565b60008151808452612b3a816020860160208601612afe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611bcd6020830184612b22565b600060208284031215612b9157600080fd5b5035919050565b60008060408385031215612bab57600080fd5b82359150612bbb60208401612a2b565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612c0657600080fd5b612c0f83612a2b565b9150602083013567ffffffffffffffff811115612c2b57600080fd5b8301601f81018513612c3c57600080fd5b803567ffffffffffffffff811115612c5657612c56612bc4565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612cc257612cc2612bc4565b604052818152828201602001871015612cda57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612d1257600080fd5b612d1b86612a2b565b9450612d2960208701612a2b565b935060408601359250606086013567ffffffffffffffff811115612d4c57600080fd5b612d5888828901612a62565b969995985093965092949392505050565b60008060008060608587031215612d7f57600080fd5b612d8885612a2b565b935060208501359250604085013567ffffffffffffffff811115612dab57600080fd5b612db787828801612a62565b95989497509550505050565b600080600080600060808688031215612ddb57600080fd5b612de486612a2b565b945060208601359350612df960408701612a2b565b9250606086013567ffffffffffffffff811115612d4c57600080fd5b600080600060608486031215612e2a57600080fd5b612e3384612a2b565b9250612e4160208501612a2b565b9150612e4f60408501612a2b565b90509250925092565b600080600060608486031215612e6d57600080fd5b612e7684612a2b565b925060208401359150612e4f60408501612a2b565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612ee8602083018486612e8b565b949350505050565b83815260406020820152600061282d604083018486612e8b565b8481526001600160a01b038416602082015260606040820152600061299d606083018486612e8b565b600060208284031215612f4557600080fd5b81518015158114611bcd57600080fd5b600060208284031215612f6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251612fbf818460208701612afe565b919091019291505056fea2646970667358221220e575ea5a18b9462f7a8e597ab970f6a09ecc09fd51c56fa3c6c1397f89f20af164736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f806133f683390190565b61140b8061409583390190565b6080516131ad61024960003960008181611f2601528181611f4f015261231e01526131ad6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612b97565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612bf5565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612c59565b6108f3565b6102c36102be366004612c59565b61097e565b6040516102659190612d1a565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612d2d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612c59565b610a41565b34801561038457600080fd5b5061028e610393366004612d46565b610b94565b61028e6103a6366004612c59565b610bde565b3480156103b757600080fd5b5061028e6103c6366004612d46565b610dcd565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e19565b61028e61040e366004612da1565b610e4e565b34801561041f57600080fd5b5061028e61042e366004612ea8565b610e6d565b34801561043f57600080fd5b5061035761114a565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612f17565b611179565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6112a4565b34801561055457600080fd5b5061028e610563366004612f71565b6112d6565b34801561057457600080fd5b50610259610583366004612d46565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612bf5565b6113ac565b34801561068b57600080fd5b5061028e61069a366004612ea8565b6114a0565b3480156106ab57600080fd5b5061028e6106ba366004612fc3565b611619565b3480156106cb57600080fd5b5061028e6106da366004612d46565b6118ce565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612bf5565b611912565b34801561075257600080fd5b5061028e610761366004613006565b611a67565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611b22565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611c19565b610903611c77565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610948929190613082565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611b22565b6109b2611c19565b6109ba611c77565b60006109c7868686611d1e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a069392919061309e565b60405180910390a29150610a3960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a49611c19565b610a51611c77565b34600003610a8b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ad8576040519150601f19603f3d011682016040523d82523d6000602084013e610add565b606091505b5050905080610b18576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b6294939291906130b8565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bce81611b22565b610bd88383611b2c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c0881611b22565b610c10611c19565b610c18611c77565b6001600160a01b038416610c58576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610ca5576040519150601f19603f3d011682016040523d82523d6000602084013e610caa565b606091505b5050905080610ce5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610d2c9087908790600401613082565b600060405180830381600087803b158015610d4657600080fd5b505af1158015610d5a573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d9b9392919061309e565b60405180910390a250610bd860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e0f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611dc7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4381611b22565b610e4b611e8b565b50565b610e56611f1b565b610e5f82611feb565b610e698282611ff6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e9781611b22565b610e9f611c19565b610ea7611c77565b83600003610ee1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eeb868661211a565b610f21576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad91906130e1565b610fe3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ff0868585611d1e565b9050610ffc878761211a565b611032576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190613103565b905080156110c8576110c888826121aa565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161110f9392919061309e565b60405180910390a3505061114260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000611154612313565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156111df57600080fd5b505af11580156111f3573d6000803e3d6000fd5b505060045461121192506001600160a01b0316905085858585610e6d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112979190613103565b15610bd857610bd861311c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112ce81611b22565b610e4b612375565b6112de611c19565b6112e6611c77565b83600003611320576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132b3384866123ee565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161137494939291906130b8565b60405180910390a36113a560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006113b781611b22565b6000546001600160a01b0316156113fa576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661143a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114647f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96114ca81611b22565b6114d2611c19565b6114da611c77565b83600003611514576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115286001600160a01b0387168686612577565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061156f9086908690600401613082565b600060405180830381600087803b15801561158957600080fd5b505af115801561159d573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115e89392919061309e565b60405180910390a361114260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116645750825b905060008267ffffffffffffffff1660011480156116815750303b155b90508115801561168f575080155b156116c6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117275784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061174457506001600160a01b038716155b1561177b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117836125eb565b61178b6125f3565b6117936125eb565b61179b612603565b6117a6600087611b2c565b506117d17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b2c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561182f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b2c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118c45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461190881611b22565b610bd88383611dc7565b61191a611c19565b611922611c77565b3460000361195c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146119a9576040519150601f19603f3d011682016040523d82523d6000602084013e6119ae565b606091505b50509050806119e9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e4b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a6f611c19565b611a77611c77565b81600003611ab1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611abc3382846123ee565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e4b8133612613565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c0f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bc53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cf2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d3e92919061314b565b60006040518083038185875af1925050503d8060008114611d7b576040519150601f19603f3d011682016040523d82523d6000602084013e611d80565b606091505b509150915081611dbc576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c0f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611e936126a0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611fb457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611fa87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e6981611b22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561206e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261206b91810190613103565b60015b6120b4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612110576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016120ab565b61097983836126fb565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc091906130e1565b6003546001600160a01b03908116908316036122f9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906130e1565b612286576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122e557600080fd5b505af1158015611142573d6000803e3d6000fd5b600054610e69906001600160a01b03848116911683612577565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237d611c19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611efd565b6003546001600160a01b039081169083160361255b576124196001600160a01b038316843084612751565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a991906130e1565b6124df576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253e57600080fd5b505af1158015612552573d6000803e3d6000fd5b50505050505050565b600054610979906001600160a01b038481169186911684612751565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061278a565b611c75612806565b6125fb612806565b611c7561286d565b61260b612806565b611c75612875565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e69576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016120ab565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612704826128c6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561274957610979828261296e565b610e696129e4565b6040516001600160a01b038481166024830152838116604483015260648201839052610bd89186918216906323b872dd906084016125a4565b600061279f6001600160a01b03841683612a1c565b905080516000141580156127c45750808060200190518101906127c291906130e1565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016120ab565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cf8612806565b61287d612806565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612915576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016120ab565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161298b919061315b565b600060405180830381855af49150503d80600081146129c6576040519150601f19603f3d011682016040523d82523d6000602084013e6129cb565b606091505b50915091506129db858383612a2a565b95945050505050565b3415611c75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611dc083836000612a9f565b606082612a3f57612a3a82612b55565b611dc0565b8151158015612a5657506001600160a01b0384163b155b15612a98576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016120ab565b5080611dc0565b606081471015612add576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016120ab565b600080856001600160a01b03168486604051612af9919061315b565b60006040518083038185875af1925050503d8060008114612b36576040519150601f19603f3d011682016040523d82523d6000602084013e612b3b565b606091505b5091509150612b4b868383612a2a565b9695505050505050565b805115612b655780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612ba957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dc057600080fd5b80356001600160a01b0381168114612bf057600080fd5b919050565b600060208284031215612c0757600080fd5b611dc082612bd9565b60008083601f840112612c2257600080fd5b50813567ffffffffffffffff811115612c3a57600080fd5b602083019150836020828501011115612c5257600080fd5b9250929050565b600080600060408486031215612c6e57600080fd5b612c7784612bd9565b9250602084013567ffffffffffffffff811115612c9357600080fd5b612c9f86828701612c10565b9497909650939450505050565b60005b83811015612cc7578181015183820152602001612caf565b50506000910152565b60008151808452612ce8816020860160208601612cac565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611dc06020830184612cd0565b600060208284031215612d3f57600080fd5b5035919050565b60008060408385031215612d5957600080fd5b82359150612d6960208401612bd9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612db457600080fd5b612dbd83612bd9565b9150602083013567ffffffffffffffff811115612dd957600080fd5b8301601f81018513612dea57600080fd5b803567ffffffffffffffff811115612e0457612e04612d72565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612e7057612e70612d72565b604052818152828201602001871015612e8857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ec057600080fd5b612ec986612bd9565b9450612ed760208701612bd9565b935060408601359250606086013567ffffffffffffffff811115612efa57600080fd5b612f0688828901612c10565b969995985093965092949392505050565b60008060008060608587031215612f2d57600080fd5b612f3685612bd9565b935060208501359250604085013567ffffffffffffffff811115612f5957600080fd5b612f6587828801612c10565b95989497509550505050565b600080600080600060808688031215612f8957600080fd5b612f9286612bd9565b945060208601359350612fa760408701612bd9565b9250606086013567ffffffffffffffff811115612efa57600080fd5b600080600060608486031215612fd857600080fd5b612fe184612bd9565b9250612fef60208501612bd9565b9150612ffd60408501612bd9565b90509250925092565b60008060006060848603121561301b57600080fd5b61302484612bd9565b925060208401359150612ffd60408501612bd9565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613096602083018486613039565b949350505050565b8381526040602082015260006129db604083018486613039565b8481526001600160a01b0384166020820152606060408201526000612b4b606083018486613039565b6000602082840312156130f357600080fd5b81518015158114611dc057600080fd5b60006020828403121561311557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b6000825161316d818460208701612cac565b919091019291505056fea2646970667358221220af74e0039ccd316ad209c39ddb2d59569d0e7332f3cba90d28e03811e710d7ca64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a0033", } // GatewayEVMEchidnaTestABI is the input ABI used to generate the binding from. @@ -889,23 +889,23 @@ func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) GrantRole( // Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function initialize(address _tssAddress, address _zetaToken, address _admin) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) Initialize(opts *bind.TransactOpts, _tssAddress common.Address, _zetaToken common.Address, _admin common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "initialize", _tssAddress, _zetaToken, _admin) +// Solidity: function initialize(address tssAddress_, address zetaToken_, address admin_) returns() +func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) Initialize(opts *bind.TransactOpts, tssAddress_ common.Address, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayEVMEchidnaTest.contract.Transact(opts, "initialize", tssAddress_, zetaToken_, admin_) } // Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function initialize(address _tssAddress, address _zetaToken, address _admin) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Initialize(_tssAddress common.Address, _zetaToken common.Address, _admin common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Initialize(&_GatewayEVMEchidnaTest.TransactOpts, _tssAddress, _zetaToken, _admin) +// Solidity: function initialize(address tssAddress_, address zetaToken_, address admin_) returns() +func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) Initialize(tssAddress_ common.Address, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayEVMEchidnaTest.Contract.Initialize(&_GatewayEVMEchidnaTest.TransactOpts, tssAddress_, zetaToken_, admin_) } // Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function initialize(address _tssAddress, address _zetaToken, address _admin) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Initialize(_tssAddress common.Address, _zetaToken common.Address, _admin common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.Initialize(&_GatewayEVMEchidnaTest.TransactOpts, _tssAddress, _zetaToken, _admin) +// Solidity: function initialize(address tssAddress_, address zetaToken_, address admin_) returns() +func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Initialize(tssAddress_ common.Address, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayEVMEchidnaTest.Contract.Initialize(&_GatewayEVMEchidnaTest.TransactOpts, tssAddress_, zetaToken_, admin_) } // Pause is a paid mutator transaction binding the contract method 0x8456cb59. @@ -994,44 +994,44 @@ func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) RevokeRole // SetConnector is a paid mutator transaction binding the contract method 0x10188aef. // -// Solidity: function setConnector(address _zetaConnector) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) SetConnector(opts *bind.TransactOpts, _zetaConnector common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "setConnector", _zetaConnector) +// Solidity: function setConnector(address zetaConnector_) returns() +func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) SetConnector(opts *bind.TransactOpts, zetaConnector_ common.Address) (*types.Transaction, error) { + return _GatewayEVMEchidnaTest.contract.Transact(opts, "setConnector", zetaConnector_) } // SetConnector is a paid mutator transaction binding the contract method 0x10188aef. // -// Solidity: function setConnector(address _zetaConnector) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) SetConnector(_zetaConnector common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.SetConnector(&_GatewayEVMEchidnaTest.TransactOpts, _zetaConnector) +// Solidity: function setConnector(address zetaConnector_) returns() +func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) SetConnector(zetaConnector_ common.Address) (*types.Transaction, error) { + return _GatewayEVMEchidnaTest.Contract.SetConnector(&_GatewayEVMEchidnaTest.TransactOpts, zetaConnector_) } // SetConnector is a paid mutator transaction binding the contract method 0x10188aef. // -// Solidity: function setConnector(address _zetaConnector) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) SetConnector(_zetaConnector common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.SetConnector(&_GatewayEVMEchidnaTest.TransactOpts, _zetaConnector) +// Solidity: function setConnector(address zetaConnector_) returns() +func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) SetConnector(zetaConnector_ common.Address) (*types.Transaction, error) { + return _GatewayEVMEchidnaTest.Contract.SetConnector(&_GatewayEVMEchidnaTest.TransactOpts, zetaConnector_) } // SetCustody is a paid mutator transaction binding the contract method 0xae7a3a6f. // -// Solidity: function setCustody(address _custody) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) SetCustody(opts *bind.TransactOpts, _custody common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.contract.Transact(opts, "setCustody", _custody) +// Solidity: function setCustody(address custody_) returns() +func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) SetCustody(opts *bind.TransactOpts, custody_ common.Address) (*types.Transaction, error) { + return _GatewayEVMEchidnaTest.contract.Transact(opts, "setCustody", custody_) } // SetCustody is a paid mutator transaction binding the contract method 0xae7a3a6f. // -// Solidity: function setCustody(address _custody) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) SetCustody(_custody common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.SetCustody(&_GatewayEVMEchidnaTest.TransactOpts, _custody) +// Solidity: function setCustody(address custody_) returns() +func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) SetCustody(custody_ common.Address) (*types.Transaction, error) { + return _GatewayEVMEchidnaTest.Contract.SetCustody(&_GatewayEVMEchidnaTest.TransactOpts, custody_) } // SetCustody is a paid mutator transaction binding the contract method 0xae7a3a6f. // -// Solidity: function setCustody(address _custody) returns() -func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) SetCustody(_custody common.Address) (*types.Transaction, error) { - return _GatewayEVMEchidnaTest.Contract.SetCustody(&_GatewayEVMEchidnaTest.TransactOpts, _custody) +// Solidity: function setCustody(address custody_) returns() +func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) SetCustody(custody_ common.Address) (*types.Transaction, error) { + return _GatewayEVMEchidnaTest.Contract.SetCustody(&_GatewayEVMEchidnaTest.TransactOpts, custody_) } // TestExecuteWithERC20 is a paid mutator transaction binding the contract method 0x6ab90f9b. diff --git a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go index 94f0e9a1..1feb1819 100644 --- a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go +++ b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // GatewayEVMUUPSUpgradeTestMetaData contains all meta data concerning the GatewayEVMUUPSUpgradeTest contract. var GatewayEVMUUPSUpgradeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bf218061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b6113e28061858283390190565b61182a8061996483390190565b610d5e8061b18e83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220ab47a8df273b8e4c91a38c4269035bd99a4d4c25cf8bd7f63c607b59dcb202b964736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061bf198061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e919061620b565b60405180910390f35b61011f610ae7565b60405161010e91906162a7565b610101610c29565b610101610c89565b610144610ce9565b60405161010e919061640d565b6100f7610e6b565b61016161152d565b60405161010e91906164ab565b6101766115fd565b60405161010e9190616522565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516102129061611e565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc9061611e565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db9061612b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616138565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616145565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165b9565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165db565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165db565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616628565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616628565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a93929190616651565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611100929116908790879060040161667b565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166a3565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166e4565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec9291169087906004016166fd565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616807565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616628565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165db565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165db565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165db565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165db565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061683c565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a01616152565b611a0c848483611ac2565b9150505b92915050565b611a1e616152565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d9291906166fd565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616855565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168d6565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168d6565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616628565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168d6565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616807565b90506000611f1a8285604051602001611f069291906168e9565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616918565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612009919061683c565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e06565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe90889088906004016166fd565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169c3565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e1a565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169f4565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a3b565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f1d565b6020820152600061248c86614302565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a3b565b868385602001516040516020016125109493929190616a84565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168d6565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a3b565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b88565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165b9565b61264b5781604051602001611d239190616bda565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c6c565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a3b565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cbe565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165b9565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cbe565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a3b565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d10565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d7c565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a3b565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616da1565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616da1565b6020026020010181905250846040516020016129889190616dd0565b604051602081830303815290604052816002815181106129aa576129aa616da1565b6020026020010181905250826040516020016129c69190616e3c565b604051602081830303815290604052816003815181106129e8576129e8616da1565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614585565b612aa45785604051602001611d239190616e7d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f3d565b935060ff1681518110612cfb57612cfb616da1565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f5c565b604051602081830303815290604052828280612d6790616f3d565b935060ff1681518110612d7c57612d7c616da1565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f3d565b935060ff1681518110612dde57612dde616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f3d565b935060ff1681518110612e4057612e40616da1565b60200260200101819052508760200151828280612e5c90616f3d565b935060ff1681518110612e7157612e71616da1565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f3d565b935060ff1681518110612ed357612ed3616da1565b602090810291909101015287518282612eeb81616f3d565b935060ff1681518110612f0057612f00616da1565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f3d565b935060ff1681518110612f6257612f62616da1565b6020026020010181905250612f76466145e6565b8282612f8181616f3d565b935060ff1681518110612f9657612f96616da1565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f3d565b935060ff1681518110612ff857612ff8616da1565b60200260200101819052508682828061301090616f3d565b935060ff168151811061302557613025616da1565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f3d565b935060ff168151811061308b5761308b616da1565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168d6565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a3b565b828261312b81616f3d565b935060ff168151811061314057613140616da1565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f3d565b935060ff16815181106131aa576131aa616da1565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f3d565b935060ff168151811061320c5761320c616da1565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f3d565b935060ff16815181106132ac576132ac616da1565b60200260200101819052508460a001516040516020016132cc9190616dd0565b6040516020818303038152906040528282806131f790616f3d565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f3d565b935060ff168151811061338357613383616da1565b602002602001018190525061339788614686565b6040516020016133a79190616dd0565b6040516020818303038152906040528282806133c290616f3d565b935060ff16815181106133d7576133d7616da1565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f3d565b935060ff168151811061346f5761346f616da1565b6020026020010181905250846040015182828061348b90616f3d565b935060ff16815181106134a0576134a0616da1565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f3d565b935060ff168151811061350a5761350a616da1565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a3b565b82826135ac81616f3d565b935060ff16815181106135c1576135c1616da1565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f3d565b935060ff168151811061362c5761362c616da1565b60200260200101819052506136488560e00151600001516145e6565b828261365381616f3d565b935060ff168151811061366857613668616da1565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f3d565b935060ff16815181106136d6576136d6616da1565b60200260200101819052506136f28560e00151602001516145e6565b82826136fd81616f3d565b935060ff168151811061371257613712616da1565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f3d565b935060ff168151811061378057613780616da1565b602002602001018190525061379c8560e00151604001516145e6565b82826137a781616f3d565b935060ff16815181106137bc576137bc616da1565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f3d565b935060ff168151811061382a5761382a616da1565b60200260200101819052506138468560e00151606001516145e6565b828261385181616f3d565b935060ff168151811061386657613866616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061671f565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616da1565b6020026020010151828260ff168151811061390957613909616da1565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fc7565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a3b565b90506000613a2b8683615175565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164ab565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa2919081019061700e565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616da1565b6020026020010151604051602001611d2391906170c4565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152ca565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152f1565b90615353565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152ca565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153d8565b90505b613cba816153fe565b92505050611b36565b8215613cdc578484604051602001611d239291906172b0565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e1a565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617357565b6000604051808303816000865af19150503d8060008114613dcb576040519150601f19603f3d011682016040523d82523d6000602084013e613dd0565b606091505b50915091508115613def57808060200190518101906139239190616a3b565b505060408051602081019091526000815292915050565b6000613e128383615467565b159392505050565b8160a0015115613e2957505050565b6000613e36848484615542565b90506000613e438261392b565b602081015181519192509060030b158015613edf5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613edf90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613eec57505050505050565b60408201515115613f0c578160400151604051602001611d239190617373565b80604051602001611d2391906173d1565b60606000613f528360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fb7905b8290614585565b1561402657604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021908390615add565b6153fe565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614088905b8290615b67565b60010361415557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140ee90613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b3690614021905b83906153d8565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141b490613fb0565b156142eb57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061421c908390615c01565b90506000816001835161422f919061743c565b8151811061423f5761423f616da1565b602002602001015190506142e26140216142b56040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615add565b95945050505050565b82604051602001611d23919061744f565b50919050565b606060006143378360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061439990613fb0565b156143a757611b36816153fe565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261440690614081565b60010361447057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b36906140219061414e565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144cf90613fb0565b156142eb57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614537908390615c01565b9050600181511115614573578060028251614552919061743c565b8151811061456257614562616da1565b602002602001015192505050919050565b5082604051602001611d23919061744f565b80518251600091111561459a57506000611a10565b815183516020850151600092916145b09161752d565b6145ba919061743c565b9050826020015181036145d1576001915050611a10565b82516020840151819020912014905092915050565b606060006145f383615ca6565b600101905060008167ffffffffffffffff8111156146135761461361671f565b6040519080825280601f01601f19166020018201604052801561463d576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461464757509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091614712905b8290613e06565b1561475257505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147b19061470b565b156147f157505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148509061470b565b1561489057505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148ef9061470b565b806149545750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149549061470b565b1561499457505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149f39061470b565b80614a585750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a589061470b565b15614a9857505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614af79061470b565b80614b5c5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b5c9061470b565b15614b9c57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614bfb9061470b565b80614c605750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c609061470b565b15614ca057505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614cff9061470b565b15614d3f57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d9e9061470b565b15614dde57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e3d9061470b565b15614e7d57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614edc9061470b565b15614f1c57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f7b9061470b565b15614fbb57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261501a9061470b565b8061507f5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261507f9061470b565b156150bf57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261511e9061470b565b1561515e57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d239290602001617540565b60608060005b8451811015615200578185828151811061519757615197616da1565b60200260200101516040516020016151b09291906168e9565b6040516020818303038152906040529150600185516151cf919061743c565b81146151f857816040516020016151e691906176a9565b60405160208183030381529060405291505b60010161517b565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615219579050509050838160008151811061524457615244616da1565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061529857615298616da1565b602002602001018190525081816002815181106152b7576152b7616da1565b6020908102919091010152949350505050565b60208083015183518351928401516000936152e89291849190615d88565b14159392505050565b604080518082019091526000808252602082015260006153238460000151856020015185600001518660200151615e99565b9050836020015181615335919061743c565b8451859061534490839061743c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615378575081611a10565b602080830151908401516001911461539f5750815160208481015190840151829020919020145b80156153d0578251845185906153b690839061743c565b90525082516020850180516153cc90839061752d565b9052505b509192915050565b60408051808201909152600080825260208201526153f7838383615fb9565b5092915050565b60606000826000015167ffffffffffffffff81111561541f5761541f61671f565b6040519080825280601f01601f191660200182016040528015615449576020820181803683370190505b50905060006020820190506153f78185602001518660000151616064565b815181516000919081111561547a575081515b6020808501519084015160005b8381101561553357825182518082146155035760001960208710156154e2576001846154b489602061743c565b6154be919061752d565b6154c99060086176ea565b6154d49060026177e8565b6154de919061743c565b1990505b8181168382168181039114615500579750611a109650505050505050565b50505b61550e60208661752d565b945061551b60208561752d565b9350505060208161552c919061752d565b9050615487565b5084518651612aa491906177f4565b6060600061554e612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161556b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155c690616f3d565b935060ff16815181106155db576155db616da1565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161562c9190617814565b60405160208183030381529060405282828061564790616f3d565b935060ff168151811061565c5761565c616da1565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156a990616f3d565b935060ff16815181106156be576156be616da1565b6020026020010181905250826040516020016156da9190616e3c565b6040516020818303038152906040528282806156f590616f3d565b935060ff168151811061570a5761570a616da1565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061575790616f3d565b935060ff168151811061576c5761576c616da1565b602002602001018190525061578187846160de565b828261578c81616f3d565b935060ff16815181106157a1576157a1616da1565b60209081029190910101528551511561584d5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157f381616f3d565b935060ff168151811061580857615808616da1565b60200260200101819052506158218660000151846160de565b828261582c81616f3d565b935060ff168151811061584157615841616da1565b60200260200101819052505b8560800151156158bb5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261589681616f3d565b935060ff16815181106158ab576158ab616da1565b6020026020010181905250615921565b84156159215760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590081616f3d565b935060ff168151811061591557615915616da1565b60200260200101819052505b604086015151156159bd5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261596b81616f3d565b935060ff168151811061598057615980616da1565b6020026020010181905250856040015182828061599c90616f3d565b935060ff16815181106159b1576159b1616da1565b60200260200101819052505b856060015115615a275760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a0681616f3d565b935060ff1681518110615a1b57615a1b616da1565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a4557615a4561671f565b604051908082528060200260200182016040528015615a7857816020015b6060815260200190600190039081615a635790505b50905060005b8260ff168160ff161015615ad157838160ff1681518110615aa157615aa1616da1565b6020026020010151828260ff1681518110615abe57615abe616da1565b6020908102919091010152600101615a7e565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b02575081611a10565b81518351602085015160009291615b189161752d565b615b22919061743c565b60208401519091506001908214615b43575082516020840151819020908220145b8015615b5e57835185518690615b5a90839061743c565b9052505b50929392505050565b6000808260000151615b8b8560000151866020015186600001518760200151615e99565b615b95919061752d565b90505b83516020850151615ba9919061752d565b81116153f75781615bb981617859565b9250508260000151615bf0856020015183615bd4919061743c565b8651615be0919061743c565b8386600001518760200151615e99565b615bfa919061752d565b9050615b98565b60606000615c0f8484615b67565b615c1a90600161752d565b67ffffffffffffffff811115615c3257615c3261671f565b604051908082528060200260200182016040528015615c6557816020015b6060815260200190600190039081615c505790505b50905060005b8151811015613cf257615c8161402186866153d8565b828281518110615c9357615c93616da1565b6020908102919091010152600101615c6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d1b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d3957662386f26fc10000830492506010015b6305f5e1008310615d51576305f5e100830492506008015b6127108310615d6557612710830492506004015b60648310615d77576064830492506002015b600a8310611a105760010192915050565b600080858411615e8f5760208411615e3b5760008415615dd3576001615daf86602061743c565b615dba9060086176ea565b615dc59060026177e8565b615dcf919061743c565b1990505b8351811685615de2898961752d565b615dec919061743c565b805190935082165b818114615e2657878411615e0e5787945050505050613923565b83615e1881617873565b945050828451169050615df4565b615e30878561752d565b945050505050613923565b838320615e48858861743c565b615e52908761752d565b91505b858210615e8d57848220808203615e7a57615e70868461752d565b9350505050613923565b615e8560018461743c565b925050615e55565b505b5092949350505050565b60008381868511615fa45760208511615f535760008515615ee5576001615ec187602061743c565b615ecc9060086176ea565b615ed79060026177e8565b615ee1919061743c565b1990505b84518116600087615ef68b8b61752d565b615f00919061743c565b855190915083165b828114615f4557818610615f2d57615f208b8b61752d565b9650505050505050613923565b85615f3781617859565b965050838651169050615f08565b859650505050505050613923565b508383206000905b615f65868961743c565b8211615fa257858320808203615f815783945050505050613923565b615f8c60018561752d565b9350508180615f9a90617859565b925050615f5b565b505b615fae878761752d565b979650505050505050565b60408051808201909152600080825260208201526000615feb8560000151866020015186600001518760200151615e99565b602080870180519186019190915251909150616007908261743c565b83528451602086015161601a919061752d565b8103616029576000855261605b565b83518351616037919061752d565b8551869061604690839061743c565b9052508351616055908261752d565b60208601525b50909392505050565b6020811061609c578151835261607b60208461752d565b925061608860208361752d565b915061609560208261743c565b9050616064565b60001981156160cb5760016160b283602061743c565b6160be906101006177e8565b6160c8919061743c565b90505b9151835183169219169190911790915250565b606060006160ec84846123f6565b80516020808301516040519394506161069390910161788a565b60405160208183030381529060405291505092915050565b610c9f806178e383390190565b61140b8061858283390190565b6117f98061998d83390190565b610d5e8061b18683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161619561619a565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161956040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561624c5783516001600160a01b0316835260209384019390920191600101616225565b509095945050505050565b60005b8381101561627257818101518382015260200161625a565b50506000910152565b60008151808452616293816020860160208601616257565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616389577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637384865161627b565b6020958601959094509290920191600101616339565b5091975050506020948501949290920191506001016162cf565b50929695505050505050565b600081518084526020840193506020830160005b828110156164035781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163c3565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752616479604088018261627b565b905060208201519150868103602088015261649481836163af565b965050506020938401939190910190600101616435565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261650d85835161627b565b945060209384019391909101906001016164d3565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165a360408701826163af565b955050602093840193919091019060010161654a565b6000602082840312156165cb57600080fd5b81518015158114611b3657600080fd5b600181811c908216806165ef57607f821691505b6020821081036142fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561663a57600080fd5b81516001600160a01b0381168114611b3657600080fd5b606081526000616664606083018661627b565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142e2606083018461627b565b6001600160a01b038616815284602082015260a0604082015260006166cb60a083018661627b565b6060830194909452509015156080909101529392505050565b828152604060208201526000613923604083018461627b565b6001600160a01b0383168152604060208201526000613923604083018461627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156167715761677161671f565b60405290565b60008067ffffffffffffffff8411156167925761679261671f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167c1576167c161671f565b6040528381529050808284018510156167d957600080fd5b613cf2846020830185616257565b600082601f8301126167f857600080fd5b611b3683835160208501616777565b60006020828403121561681957600080fd5b815167ffffffffffffffff81111561683057600080fd5b611a0c848285016167e7565b60006020828403121561684e57600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161688d81601a850160208801616257565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168ca81601c840160208801616257565b01601c01949350505050565b602081526000611b36602083018461627b565b600083516168fb818460208801616257565b83519083019061690f818360208801616257565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695081601a850160208801616257565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161698d816033840160208801616257565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142e2606083018461627b565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b36608083018461627b565b600060208284031215616a4d57600080fd5b815167ffffffffffffffff811115616a6457600080fd5b8201601f81018413616a7557600080fd5b611a0c84825160208401616777565b60008551616a96818460208a01616257565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616ad0816001840160208a01616257565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b0e816002840160208901616257565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b50816002840160208801616257565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616b9b604083018461627b565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1281601f850160208701616257565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c7f604083018461627b565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cd1604083018461627b565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d48816014850160208701616257565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d8f604083018561627b565b8281036020840152611b32818561627b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e08816001850160208701616257565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e4e818460208701616257565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0181604b850160208701616257565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5357616f53616f0e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b36608083018461627b565b60006020828403121561702057600080fd5b815167ffffffffffffffff81111561703757600080fd5b82016060818503121561704957600080fd5b61705161674e565b81518060030b811461706257600080fd5b8152602082015167ffffffffffffffff81111561707e57600080fd5b61708a868285016167e7565b602083015250604082015167ffffffffffffffff8111156170aa57600080fd5b6170b6868285016167e7565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251617122816021850160208701616257565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161730e816021850160208801616257565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161734b81602e840160208801616257565b01602e01949350505050565b60008251617369818460208701616257565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fba816029850160208701616257565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161742f816022850160208701616257565b9190910160220192915050565b81810381811115611a1057611a10616f0e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161748781600e850160208701616257565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f0e565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617578816018850160208801616257565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175b581601c840160208801616257565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176bb818460208701616257565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f0e565b6001815b600184111561773c5780850481111561772057617720616f0e565b600184161561772e57908102905b60019390931c928002617705565b935093915050565b60008261775357506001611a10565b8161776057506000611a10565b816001811461777657600281146177805761779c565b6001915050611a10565b60ff84111561779157617791616f0e565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177bf575081810a611a10565b6177cc6000198484617701565b80600019048211156177e0576177e0616f0e565b029392505050565b6000611b368383617744565b81810360008312801583831316838312821617156153f7576153f7616f0e565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161784c81601c850160208701616257565b91909101601c0192915050565b6000600019820361786c5761786c616f0e565b5060010190565b60008161788257617882616f0e565b506000190190565b6000835161789c818460208801616257565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178d6816001840160208801616257565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a26469706673582212209a3f0c0681ccbd1753bd8415c2fb870de99ee8ce098f165b4f92f9ac2c9521b964736f6c634300081a0033", } // GatewayEVMUUPSUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go index cf426760..20d8dd6c 100644 --- a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go +++ b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go @@ -32,7 +32,7 @@ var ( // GatewayEVMUpgradeTestMetaData contains all meta data concerning the GatewayEVMUpgradeTest contract. var GatewayEVMUpgradeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"_zetaConnector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"_custody\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220e0d221e2700a741409740f6a05e6ac8e799e50b3e2a6e75b5173b33a31fa502464736f6c634300081a0033", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220f5f94badcd1bd52ad12da244f7c4f330f2fb5d16305f04303cf08087abeff75664736f6c634300081a0033", } // GatewayEVMUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index f20eae6d..6439839b 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b50620106a0806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547ffa62d57f000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f424091600091849163fa62d57f916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b6113e28062009ef483390190565b61182a806200b2d683390190565b610d5e806200cb0083390190565b61080c806200d85e83390190565b610b3f806200e06a83390190565b611ac2806200eba983390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea264697066735822122011f5a132ec30e33aab727a8c0099e5989394033720d9fda5b9669b838309363564736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220b5ace68540d684b9afb85751c78347a310806d58ce33b8b75ce256dc0bf3347864736f6c634300081a003360c060405234801561001057600080fd5b50604051611ac2380380611ac283398101604081905261002f916101db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600761006f898261032d565b50600861007c888261032d565b506009805460ff191660ff881617905560808590528360028111156100a3576100a36103eb565b60a08160028111156100b7576100b76103eb565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104019350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261011e57600080fd5b81516001600160401b03811115610137576101376100f7565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610165576101656100f7565b60405281815283820160200185101561017d57600080fd5b60005b8281101561019c57602081860181015183830182015201610180565b506000918101602001919091529392505050565b8051600381106101bf57600080fd5b919050565b80516001600160a01b03811681146101bf57600080fd5b600080600080600080600080610100898b0312156101f857600080fd5b88516001600160401b0381111561020e57600080fd5b61021a8b828c0161010d565b60208b015190995090506001600160401b0381111561023857600080fd5b6102448b828c0161010d565b975050604089015160ff8116811461025b57600080fd5b60608a0151909650945061027160808a016101b0565b60a08a0151909450925061028760c08a016101c4565b915061029560e08a016101c4565b90509295985092959890939650565b600181811c908216806102b857607f821691505b6020821081036102d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561032857806000526020600020601f840160051c810160208510156103055750805b601f840160051c820191505b818110156103255760008155600101610311565b50505b505050565b81516001600160401b03811115610346576103466100f7565b61035a8161035484546102a4565b846102de565b6020601f82116001811461038e57600083156103765750848201515b600019600385901b1c1916600184901b178455610325565b600084815260208120601f198516915b828110156103be578785015182556020948501946001909201910161039e565b50848210156103dc5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05161168e61043460003960006103280152600081816102d901528181610a1d0152610b23015261168e6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b714610432578063f687d12a1461043b578063fa62d57f1461044e57600080fd5b8063d9eeebed146103a5578063dd62ed3e146103d9578063eddeb1231461041f57600080fd5b8063c7012626116100bd578063c70126261461036a578063c835d7cc1461037d578063ccc775991461039257600080fd5b806395d89b411461031b578063a3413d0314610323578063a9059cbb1461035757600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a082311461029e57806385e1f4d0146102d45780638b851b95146102fb57600080fd5b80633ce4a5bc1461025d57806342966c681461027857806347e7ef241461028b57600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610457565b6040516101b2919061126d565b60405180910390f35b6101ce6101c93660046112ac565b6104e9565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe3660046112d8565b610500565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60095460405160ff90911681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce610286366004611319565b610597565b6101ce6102993660046112ac565b6105ab565b6101e26102ac366004611332565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a56106ff565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b2919061134f565b6101ce6103653660046112ac565b61070e565b6101ce6103783660046113bf565b61071b565b61039061038b366004611332565b61086a565b005b6103906103a0366004611332565b610931565b6103ad6109f1565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e26103e73660046114b7565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b61039061042d366004611319565b610c0f565b6101e260025481565b610390610449366004611319565b610c91565b6101e260035481565b606060078054610466906114f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610492906114f0565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b5050505050905090565b60006104f6338484610d13565b5060015b92915050565b600061050d848484610e1c565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610578576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61058c85336105878685611572565b610d13565b506001949350505050565b60006105a33383610fd7565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab148015906105e9575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561060d575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610644576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61064e8383611119565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526106ee918690611585565b60405180910390a250600192915050565b606060088054610466906114f0565b60006104f6338484610e1c565b60008060006107286109f1565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de91906115a7565b610814576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081e3385610fd7565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d95591610857918991899187916115c9565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108b7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461097e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610926565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa891906115f8565b905073ffffffffffffffffffffffffffffffffffffffff8116610af7576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa9190611615565b905080600003610be6576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610bf9919061162e565b610c039190611645565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610c5c576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610926565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cde576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610926565b73ffffffffffffffffffffffffffffffffffffffff8316610d60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610dad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e69576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610eb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610f16576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f208282611572565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681529081208054849290610f63908490611645565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fc991815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611024576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205481811015611084576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61108e8282611572565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040812091909155600680548492906110c9908490611572565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e0f565b73ffffffffffffffffffffffffffffffffffffffff8216611166576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546111789190611645565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906111b2908490611645565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561122f57602081850181015186830182015201611213565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006112806020830184611209565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112a957600080fd5b50565b600080604083850312156112bf57600080fd5b82356112ca81611287565b946020939093013593505050565b6000806000606084860312156112ed57600080fd5b83356112f881611287565b9250602084013561130881611287565b929592945050506040919091013590565b60006020828403121561132b57600080fd5b5035919050565b60006020828403121561134457600080fd5b813561128081611287565b602081016003831061138a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113d257600080fd5b823567ffffffffffffffff8111156113e957600080fd5b8301601f810185136113fa57600080fd5b803567ffffffffffffffff81111561141457611414611390565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561148057611480611390565b60405281815282820160200187101561149857600080fd5b8160208401602083013760006020928201830152969401359450505050565b600080604083850312156114ca57600080fd5b82356114d581611287565b915060208301356114e581611287565b809150509250929050565b600181811c9082168061150457607f821691505b60208210810361153d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104fa576104fa611543565b6040815260006115986040830185611209565b90508260208301529392505050565b6000602082840312156115b957600080fd5b8151801515811461128057600080fd5b6080815260006115dc6080830187611209565b6020830195909552506040810192909252606090910152919050565b60006020828403121561160a57600080fd5b815161128081611287565b60006020828403121561162757600080fd5b5051919050565b80820281158282048414176104fa576104fa611543565b808201808211156104fa576104fa61154356fea2646970667358221220ff62fd4bd87c4bd8cb6b710eb3bc879bf82b272805bab80a5c462f9aee4e937164736f6c634300081a0033a264697066735822122051de911e0ea2d5c63b8c5f7e8eb994419a3c23fb57a480bf022f85431a3a01ec64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201078b806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261118d565b60405161013f9190617944565b60405180910390f35b6101506111ef565b60405161013f91906179e0565b610132611331565b610132611391565b6101286113f1565b61017d611c4e565b60405161013f9190617b46565b610128611dd0565b61019a6125e8565b60405161013f9190617be4565b6101af6126b8565b60405161013f9190617c5b565b6101286127b3565b6101af612d2f565b61019a612e2a565b6101dc612efa565b604051901515815260200161013f565b610128612fce565b6101326136b0565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e805490911661432117905560405161026790617829565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617829565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613710565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617837565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617845565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617cf2565b506040516109e990617853565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613710565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617861565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c499061786f565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb9061787d565b610cea96959493929190617d14565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617cf2565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617cf2565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617cf2565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b5050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156111e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561132857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561131157838290600052602060002001805461128490617e09565b80601f01602080910402602001604051908101604052809291908181526020018280546112b090617e09565b80156112fd5780601f106112d2576101008083540402835291602001916112fd565b820191906000526020600020905b8154815290600101906020018083116112e057829003601f168201915b505050505081526020019060010190611265565b505050508152505081526020019060010190611213565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c19190617e56565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906114fe90889088908890602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611597926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546115c892620f4240916001600160a01b0316908690602401617e99565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7993c1e000000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611685916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561172957600080fd5b505af115801561173d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526117d792620f4240916001600160a01b0316908d908d908d90600401617f00565b600060405180830381600087803b1580156117f157600080fd5b505af1158015611805573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561192857600080fd5b505af115801561193c573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061198592506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611a749087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611b569216908790600401617faf565b60006040518083038185885af1158015611b74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b9d91908101906180b9565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190617e56565b9050611c4481611c3f620f42408761811d565b61372f565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156113285783829060005260206000209060020201604051806040016040529081600082018054611ca590617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd190617e09565b8015611d1e5780601f10611cf357610100808354040283529160200191611d1e565b820191906000526020600020905b815481529060010190602001808311611d0157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611db857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d655790505b50505050508152505081526020019060010190611c72565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611e4c90879087908790602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0390921660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f19818403018152828252602d547ffa62d57f000000000000000000000000000000000000000000000000000000008452915190926001600160a01b0390921691620f424091600091849163fa62d57f916004808201926020929091908290030181865afa158015612025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120499190617e56565b8860405161205c96959493929190618130565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637993c1e0915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261218092620f4240916001600160a01b0316908790600401618183565b600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190617e56565b905061224b81600061372f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101849052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156122c457600080fd5b505af11580156122d8573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506123c792506001600160a01b039091169086908a908a908a90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506124b69086908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908790600401617faf565b60006040518083038185885af11580156125b6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526125df91908101906180b9565b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561132857838290600052602060002001805461262b90617e09565b80601f016020809104026020016040519081016040528092919081815260200182805461265790617e09565b80156126a45780601f10612679576101008083540402835291602001916126a4565b820191906000526020600020905b81548152906001019060200180831161268757829003601f168201915b50505050508152602001906001019061260c565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561279b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127485790505b505050505081525050815260200190600101906126dc565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061283190889088908690602401617e6f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201528593506001600160a01b0390911691507f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a349186906181bd565b60405180910390a3602a5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b0390911690635d40e1789060340160405160208183030381529060405284846040518463ffffffff1660e01b8152600401612aa3939291906181e2565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612bf457600080fd5b505af1158015612c08573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612c4d9086908590617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935087926125989216908690600401617faf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156113285760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e1257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dbf5790505b50505050508152505081526020019060010190612d53565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611328578382906000526020600020018054612e6d90617e09565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9990617e09565b8015612ee65780601f10612ebb57610100808354040283529160200191612ee6565b820191906000526020600020905b815481529060010190602001808311612ec957829003601f168201915b505050505081526020019060010190612e4e565b60085460009060ff1615612f12575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc79190617e56565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a76400009082906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061304c90889088908690602401617e6f565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935260255490519193506000926130e5926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905261310691859085906024016181e2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5d40e17800000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916131c3916001600160a01b0391909116906000908690600401617ed8565b600060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116925063865b36f69150603401604051602081830303815290604052858a8a8a6040518663ffffffff1660e01b81526004016132ea95949392919061820d565b600060405180830381600087803b15801561330457600080fd5b505af1158015613318573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561339557600080fd5b505af11580156133a9573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561343b57600080fd5b505af115801561344f573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061349892506001600160a01b039091169087908b908b908b90617f55565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561352e57600080fd5b505af1158015613542573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506135879087908690617f96565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926136699216908790600401617faf565b60006040518083038185885af1158015613687573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c4491908101906180b9565b606060158054806020026020016040519081016040528092919081815260200182805480156111e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116111c7575050505050905090565b600061371a61788b565b6137258484836137b6565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561379a57600080fd5b505afa1580156137ae573d6000803e3d6000fd5b505050505050565b6000806137c38584613831565b90506138266040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613811929190617faf565b6040516020818303038152906040528561383d565b9150505b9392505050565b600061382a838361386b565b60c081015151600090156138615761385a84848460c00151613886565b905061382a565b61385a8484613a2c565b60006138778383613b17565b61382a8383602001518461383d565b600080613891613b27565b9050600061389f8683613bfa565b905060006138b682606001518360200151856140a0565b905060006138c6838389896142b2565b905060006138d38261512f565b602081015181519192509060030b15613946578982604001516040516020016138fd929190618252565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261393d916004016182d3565b60405180910390fd5b60006139896040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016152fe565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139dc9084906004016182d3565b602060405180830381865afa1580156139f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1d91906182e6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613a819087906004016182d3565b600060405180830381865afa158015613a9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ac691908101906180b9565b90506000613af48285604051602001613ae092919061830f565b6040516020818303038152906040526154fe565b90506001600160a01b0381166137255784846040516020016138fd92919061833e565b613b2382826000615511565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bae9084906004016183e9565b600060405180830381865afa158015613bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf39190810190618430565b9250505090565b613c2c6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c776040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613c8085615614565b60208201526000613c90866159f9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cfa9190810190618430565b86838560200151604051602001613d149493929190618479565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d6c9085906004016182d3565b600060405180830381865afa158015613d89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613db19190810190618430565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613df990849060040161857d565b602060405180830381865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190617cf2565b613e4f57816040516020016138fd91906185cf565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613e94908490600401618661565b600060405180830381865afa158015613eb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ed99190810190618430565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f209084906004016186b3565b602060405180830381865afa158015613f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f619190617cf2565b15613ff6576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fab9084906004016186b3565b600060405180830381865afa158015613fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ff09190810190618430565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161401b9190618705565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016140479291906181bd565b600060405180830381865afa158015614064573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261408c9190810190618430565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140bc5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061411c5761411c618771565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061417057614170618771565b60200260200101819052508460405160200161418c91906187a0565b604051602081830303815290604052816002815181106141ae576141ae618771565b6020026020010181905250826040516020016141ca919061880c565b604051602081830303815290604052816003815181106141ec576141ec618771565b602002602001018190525060006142028261512f565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142939060408051808201825260008082526020918201528151808301909252845182528085019082015290615c7c565b6142a857856040516020016138fd919061884d565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614302565b511590565b614476578260200151156143be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161393d565b8260c0015115614476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161393d565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161448f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806144ea906188de565b935060ff16815181106144ff576144ff618771565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161455091906188fd565b60405160208183030381529060405282828061456b906188de565b935060ff168151811061458057614580618771565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145cd906188de565b935060ff16815181106145e2576145e2618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061462f906188de565b935060ff168151811061464457614644618771565b60200260200101819052508760200151828280614660906188de565b935060ff168151811061467557614675618771565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146c2906188de565b935060ff16815181106146d7576146d7618771565b6020908102919091010152875182826146ef816188de565b935060ff168151811061470457614704618771565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614751906188de565b935060ff168151811061476657614766618771565b602002602001018190525061477a46615cdd565b8282614785816188de565b935060ff168151811061479a5761479a618771565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806147e7906188de565b935060ff16815181106147fc576147fc618771565b602002602001018190525086828280614814906188de565b935060ff168151811061482957614829618771565b60209081029190910101528551156149505760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261487a816188de565b935060ff168151811061488f5761488f618771565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906148df9089906004016182d3565b600060405180830381865afa1580156148fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149249190810190618430565b828261492f816188de565b935060ff168151811061494457614944618771565b60200260200101819052505b846020015115614a205760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614999816188de565b935060ff16815181106149ae576149ae618771565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806149fb906188de565b935060ff1681518110614a1057614a10618771565b6020026020010181905250614be7565b614a586142fd8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614aeb5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614a9b816188de565b935060ff1681518110614ab057614ab0618771565b60200260200101819052508460a00151604051602001614ad091906187a0565b6040516020818303038152906040528282806149fb906188de565b8460c00151158015614b2e575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b2c90511590565b155b15614be75760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b72816188de565b935060ff1681518110614b8757614b87618771565b6020026020010181905250614b9b88615d7d565b604051602001614bab91906187a0565b604051602081830303815290604052828280614bc6906188de565b935060ff1681518110614bdb57614bdb618771565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c1b90511590565b614cb05760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c5e816188de565b935060ff1681518110614c7357614c73618771565b60200260200101819052508460400151828280614c8f906188de565b935060ff1681518110614ca457614ca4618771565b60200260200101819052505b606085015115614dd15760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614cf9816188de565b935060ff1681518110614d0e57614d0e618771565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614da59190810190618430565b8282614db0816188de565b935060ff1681518110614dc557614dc5618771565b60200260200101819052505b60e08501515115614e785760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e1b816188de565b935060ff1681518110614e3057614e30618771565b6020026020010181905250614e4c8560e0015160000151615cdd565b8282614e57816188de565b935060ff1681518110614e6c57614e6c618771565b60200260200101819052505b60e08501516020015115614f225760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ec5816188de565b935060ff1681518110614eda57614eda618771565b6020026020010181905250614ef68560e0015160200151615cdd565b8282614f01816188de565b935060ff1681518110614f1657614f16618771565b60200260200101819052505b60e08501516040015115614fcc5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f6f816188de565b935060ff1681518110614f8457614f84618771565b6020026020010181905250614fa08560e0015160400151615cdd565b8282614fab816188de565b935060ff1681518110614fc057614fc0618771565b60200260200101819052505b60e085015160600151156150765760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615019816188de565b935060ff168151811061502e5761502e618771565b602002602001018190525061504a8560e0015160600151615cdd565b8282615055816188de565b935060ff168151811061506a5761506a618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561509457615094617fd1565b6040519080825280602002602001820160405280156150c757816020015b60608152602001906001900390816150b25790505b50905060005b8260ff168160ff16101561512057838160ff16815181106150f0576150f0618771565b6020026020010151828260ff168151811061510d5761510d618771565b60209081029190910101526001016150cd565b5093505050505b949350505050565b6151566040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151dc91869101618968565b600060405180830381865afa1580156151f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152219190810190618430565b9050600061522f868361686c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161525f9190617be4565b6000604051808303816000875af115801561527e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152a691908101906189af565b805190915060030b158015906152bf5750602081015151155b80156152ce5750604081015151155b156142a857816000815181106152e6576152e6618771565b60200260200101516040516020016138fd9190618a65565b606060006153338560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061536a9082905b906169c1565b156154c75760006153e7826153e1846153db6153ad8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906169e8565b90616a4a565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061544b9082906169c1565b156154b557604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154b2905b8290616acf565b90505b6154be81616af5565b9250505061382a565b82156154e05784846040516020016138fd929190618c51565b505060408051602081019091526000815261382a565b509392505050565b6000808251602084016000f09392505050565b8160a001511561552057505050565b600061552d848484616b5e565b9050600061553a8261512f565b602081015181519192509060030b1580156155d65750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155d690604080518082018252600080825260209182015281518083019092528451825280850190820152615364565b156155e357505050505050565b604082015151156156035781604001516040516020016138fd9190618cf8565b806040516020016138fd9190618d56565b606060006156498360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156ae905b8290615c7c565b1561571d57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a906157189083906170f9565b616af5565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261577f905b8290617183565b60010361584c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157e5906154ab565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a90615718905b8390616acf565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158ab906156a7565b156159e257604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061591390839061721d565b905060008160018351615926919061811d565b8151811061593657615936618771565b602002602001015190506159d96157186159ac6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906170f9565b95945050505050565b826040516020016138fd9190618dc1565b50919050565b60606000615a2e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615a90906156a7565b15615a9e5761382a81616af5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615afd90615778565b600103615b6757604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261382a9061571890615845565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615bc6906156a7565b156159e257604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c2e90839061721d565b9050600181511115615c6a578060028251615c49919061811d565b81518110615c5957615c59618771565b602002602001015192505050919050565b50826040516020016138fd9190618dc1565b805182516000911115615c9157506000613729565b81518351602085015160009291615ca791618e9f565b615cb1919061811d565b905082602001518103615cc8576001915050613729565b82516020840151819020912014905092915050565b60606000615cea836172c2565b600101905060008167ffffffffffffffff811115615d0a57615d0a617fd1565b6040519080825280601f01601f191660200182016040528015615d34576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d3e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e09905b82906173a4565b15615e4957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ea890615e02565b15615ee857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f4790615e02565b15615f8757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe690615e02565b8061604b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261604b90615e02565b1561608b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160ea90615e02565b8061614f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261614f90615e02565b1561618f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ee90615e02565b806162535750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261625390615e02565b1561629357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162f290615e02565b806163575750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261635790615e02565b1561639757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163f690615e02565b1561643657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261649590615e02565b156164d557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261653490615e02565b1561657457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165d390615e02565b1561661357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261667290615e02565b156166b257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261671190615e02565b806167765750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261677690615e02565b156167b657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261681590615e02565b1561685557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516138fd9290602001618eb2565b60608060005b84518110156168f7578185828151811061688e5761688e618771565b60200260200101516040516020016168a792919061830f565b6040516020818303038152906040529150600185516168c6919061811d565b81146168ef57816040516020016168dd919061901b565b60405160208183030381529060405291505b600101616872565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616910579050509050838160008151811061693b5761693b618771565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061698f5761698f618771565b602002602001018190525081816002815181106169ae576169ae618771565b6020908102919091010152949350505050565b60208083015183518351928401516000936169df92918491906173b8565b14159392505050565b60408051808201909152600080825260208201526000616a1a84600001518560200151856000015186602001516174c9565b9050836020015181616a2c919061811d565b84518590616a3b90839061811d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a6f575081613729565b6020808301519084015160019114616a965750815160208481015190840151829020919020145b8015616ac757825184518590616aad90839061811d565b9052508251602085018051616ac3908390618e9f565b9052505b509192915050565b6040805180820190915260008082526020820152616aee8383836175e9565b5092915050565b60606000826000015167ffffffffffffffff811115616b1657616b16617fd1565b6040519080825280601f01601f191660200182016040528015616b40576020820181803683370190505b5090506000602082019050616aee8185602001518660000151617694565b60606000616b6a613b27565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616b8757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616be2906188de565b935060ff1681518110616bf757616bf7618771565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c48919061905c565b604051602081830303815290604052828280616c63906188de565b935060ff1681518110616c7857616c78618771565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616cc5906188de565b935060ff1681518110616cda57616cda618771565b602002602001018190525082604051602001616cf6919061880c565b604051602081830303815290604052828280616d11906188de565b935060ff1681518110616d2657616d26618771565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d73906188de565b935060ff1681518110616d8857616d88618771565b6020026020010181905250616d9d878461770e565b8282616da8816188de565b935060ff1681518110616dbd57616dbd618771565b602090810291909101015285515115616e695760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e0f816188de565b935060ff1681518110616e2457616e24618771565b6020026020010181905250616e3d86600001518461770e565b8282616e48816188de565b935060ff1681518110616e5d57616e5d618771565b60200260200101819052505b856080015115616ed75760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616eb2816188de565b935060ff1681518110616ec757616ec7618771565b6020026020010181905250616f3d565b8415616f3d5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f1c816188de565b935060ff1681518110616f3157616f31618771565b60200260200101819052505b60408601515115616fd95760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616f87816188de565b935060ff1681518110616f9c57616f9c618771565b60200260200101819052508560400151828280616fb8906188de565b935060ff1681518110616fcd57616fcd618771565b60200260200101819052505b8560600151156170435760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617022816188de565b935060ff168151811061703757617037618771565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561706157617061617fd1565b60405190808252806020026020018201604052801561709457816020015b606081526020019060019003908161707f5790505b50905060005b8260ff168160ff1610156170ed57838160ff16815181106170bd576170bd618771565b6020026020010151828260ff16815181106170da576170da618771565b602090810291909101015260010161709a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561711e575081613729565b8151835160208501516000929161713491618e9f565b61713e919061811d565b6020840151909150600190821461715f575082516020840151819020908220145b801561717a5783518551869061717690839061811d565b9052505b50929392505050565b60008082600001516171a785600001518660200151866000015187602001516174c9565b6171b19190618e9f565b90505b835160208501516171c59190618e9f565b8111616aee57816171d5816190a1565b925050826000015161720c8560200151836171f0919061811d565b86516171fc919061811d565b83866000015187602001516174c9565b6172169190618e9f565b90506171b4565b6060600061722b8484617183565b617236906001618e9f565b67ffffffffffffffff81111561724e5761724e617fd1565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b81518110156154f65761729d6157188686616acf565b8282815181106172af576172af618771565b6020908102919091010152600101617287565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061730b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617337576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061735557662386f26fc10000830492506010015b6305f5e100831061736d576305f5e100830492506008015b612710831061738157612710830492506004015b60648310617393576064830492506002015b600a83106137295760010192915050565b60006173b0838361774e565b159392505050565b6000808584116174bf576020841161746b57600084156174035760016173df86602061811d565b6173ea9060086190bb565b6173f59060026191b9565b6173ff919061811d565b1990505b83518116856174128989618e9f565b61741c919061811d565b805190935082165b8181146174565787841161743e5787945050505050615127565b83617448816191c5565b945050828451169050617424565b6174608785618e9f565b945050505050615127565b838320617478858861811d565b6174829087618e9f565b91505b8582106174bd578482208082036174aa576174a08684618e9f565b9350505050615127565b6174b560018461811d565b925050617485565b505b5092949350505050565b600083818685116175d4576020851161758357600085156175155760016174f187602061811d565b6174fc9060086190bb565b6175079060026191b9565b617511919061811d565b1990505b845181166000876175268b8b618e9f565b617530919061811d565b855190915083165b8281146175755781861061755d576175508b8b618e9f565b9650505050505050615127565b85617567816190a1565b965050838651169050617538565b859650505050505050615127565b508383206000905b617595868961811d565b82116175d2578583208082036175b15783945050505050615127565b6175bc600185618e9f565b93505081806175ca906190a1565b92505061758b565b505b6175de8787618e9f565b979650505050505050565b6040805180820190915260008082526020820152600061761b85600001518660200151866000015187602001516174c9565b602080870180519186019190915251909150617637908261811d565b83528451602086015161764a9190618e9f565b8103617659576000855261768b565b835183516176679190618e9f565b8551869061767690839061811d565b90525083516176859082618e9f565b60208601525b50909392505050565b602081106176cc57815183526176ab602084618e9f565b92506176b8602083618e9f565b91506176c560208261811d565b9050617694565b60001981156176fb5760016176e283602061811d565b6176ee906101006191b9565b6176f8919061811d565b90505b9151835183169219169190911790915250565b6060600061771c8484613bfa565b8051602080830151604051939450617736939091016191dc565b60405160208183030381529060405291505092915050565b8151815160009190811115617761575081515b6020808501519084015160005b8381101561781a57825182518082146177ea5760001960208710156177c95760018461779b89602061811d565b6177a59190618e9f565b6177b09060086190bb565b6177bb9060026191b9565b6177c5919061811d565b1990505b81811683821681810391146177e75797506137299650505050505050565b50505b6177f5602086618e9f565b9450617802602085618e9f565b935050506020816178139190618e9f565b905061776e565b50845186516142a89190619234565b610c9f806200925583390190565b61140b8062009ef483390190565b6117f9806200b2ff83390190565b610d5e806200caf883390190565b61080c806200d85683390190565b610b3f806200e06283390190565b611bb5806200eba183390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178ce6178d3565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179855783516001600160a01b031683526020938401939092019160010161795e565b509095945050505050565b60005b838110156179ab578181015183820152602001617993565b50506000910152565b600081518084526179cc816020860160208601617990565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ac2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aac8486516179b4565b6020958601959094509290920191600101617a72565b509197505050602094850194929092019150600101617a08565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b3c5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617afc565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617bb260408801826179b4565b9050602082015191508681036020880152617bcd8183617ae8565b965050506020938401939190910190600101617b6e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c468583516179b4565b94506020938401939190910190600101617c0c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617adc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cdc6040870182617ae8565b9550506020938401939190910190600101617c83565b600060208284031215617d0457600080fd5b8151801515811461382a57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617def60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600181811c90821680617e1d57607f821691505b6020821081036159f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617e6857600080fd5b5051919050565b606081526000617e8260608301866179b4565b602083019490945250901515604090910152919050565b608081526000617eac60808301876179b4565b62ffffff861660208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6001600160a01b03841681528260208201526060604082015260006159d960608301846179b4565b60c081526000617f1360c08301896179b4565b8760208401526001600160a01b03871660408401528281036060840152617f3a81876179b4565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a060408201526000617f7d60a08301866179b4565b6060830194909452509015156080909101529392505050565b82815260406020820152600061512760408301846179b4565b6001600160a01b038316815260406020820152600061512760408301846179b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561802357618023617fd1565b60405290565b60008067ffffffffffffffff84111561804457618044617fd1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561807357618073617fd1565b60405283815290508082840185101561808b57600080fd5b6154f6846020830185617990565b600082601f8301126180aa57600080fd5b61382a83835160208501618029565b6000602082840312156180cb57600080fd5b815167ffffffffffffffff8111156180e257600080fd5b61372584828501618099565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115613729576137296180ee565b60c08152600061814360c08301896179b4565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a084015261817681856179b4565b9998505050505050505050565b60808152600061819660808301876179b4565b8560208401526001600160a01b038516604084015282810360608401526175de81856179b4565b6040815260006181d060408301856179b4565b828103602084015261382681856179b4565b6060815260006181f560608301866179b4565b84602084015282810360408401526142a881856179b4565b60a08152600061822060a08301886179b4565b866020840152828103604084015261823881876179b4565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161828a81601a850160208801617990565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182c781601c840160208801617990565b01601c01949350505050565b60208152600061382a60208301846179b4565b6000602082840312156182f857600080fd5b81516001600160a01b038116811461382a57600080fd5b60008351618321818460208801617990565b835190830190618335818360208801617990565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161837681601a850160208801617990565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516183b3816033840160208801617990565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061382a60808301846179b4565b60006020828403121561844257600080fd5b815167ffffffffffffffff81111561845957600080fd5b8201601f8101841361846a57600080fd5b61372584825160208401618029565b6000855161848b818460208a01617990565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516184c5816001840160208a01617990565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618503816002840160208901617990565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618545816002840160208801617990565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061859060408301846179b4565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161860781601f850160208701617990565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061867460408301846179b4565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186c660408301846179b4565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161873d816014850160208701617990565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516187d8816001850160208701617990565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161881e818460208701617990565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516188d181604b850160208701617990565b91909101604b0192915050565b600060ff821660ff81036188f4576188f46180ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061382a60808301846179b4565b6000602082840312156189c157600080fd5b815167ffffffffffffffff8111156189d857600080fd5b8201606081850312156189ea57600080fd5b6189f2618000565b81518060030b8114618a0357600080fd5b8152602082015167ffffffffffffffff811115618a1f57600080fd5b618a2b86828501618099565b602083015250604082015167ffffffffffffffff811115618a4b57600080fd5b618a5786828501618099565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618ac3816021850160208701617990565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618caf816021850160208801617990565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618cec81602e840160208801617990565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161895b816029850160208701617990565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618db4816022850160208701617990565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618df981600e850160208701617990565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115613729576137296180ee565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618eea816018850160208801617990565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618f2781601c840160208801617990565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161902d818460208701617990565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161909481601c850160208701617990565b91909101601c0192915050565b600060001982036190b4576190b46180ee565b5060010190565b8082028115828204841417613729576137296180ee565b6001815b600184111561910d578085048111156190f1576190f16180ee565b60018416156190ff57908102905b60019390931c9280026190d6565b935093915050565b60008261912457506001613729565b8161913157506000613729565b816001811461914757600281146191515761916d565b6001915050613729565b60ff841115619162576191626180ee565b50506001821b613729565b5060208310610133831016604e8410600b8410161715619190575081810a613729565b61919d60001984846190d2565b80600019048211156191b1576191b16180ee565b029392505050565b600061382a8383619115565b6000816191d4576191d46180ee565b506000190190565b600083516191ee818460208801617990565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619228816001840160208801617990565b01600101949350505050565b8181036000831280158383131683831282161715616aee57616aee6180ee56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a00336080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea264697066735822122077d23238a2e7d47c8bbeab590e5478444c1217f3c032da9d8971c2c3fc1625ce64736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220b5ace68540d684b9afb85751c78347a310806d58ce33b8b75ce256dc0bf3347864736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb5380380611bb583398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60076100aa8982610360565b5060086100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c051611744610471600039600061024f015260006103440152600081816102f501528181610ad30152610bd901526117446000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b71461044e578063f687d12a14610457578063fa62d57f1461046a57600080fd5b8063d9eeebed146103c1578063dd62ed3e146103f5578063eddeb1231461043b57600080fd5b8063c7012626116100bd578063c701262614610386578063c835d7cc14610399578063ccc77599146103ae57600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a08231146102ba57806385e1f4d0146102f05780638b851b951461031757600080fd5b80633ce4a5bc1461027957806342966c681461029457806347e7ef24146102a757600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610473565b6040516101b29190611323565b60405180910390f35b6101ce6101c9366004611362565b610505565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe36600461138e565b61051c565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce6102a23660046113cf565b6105b3565b6101ce6102b5366004611362565b6105c7565b6101e26102c83660046113e8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071b565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611405565b6101ce610381366004611362565b61072a565b6101ce610394366004611475565b610737565b6103ac6103a73660046113e8565b610886565b005b6103ac6103bc3660046113e8565b61099a565b6103c9610aa7565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e261040336600461156d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b6103ac6104493660046113cf565b610cc5565b6101e260025481565b6103ac6104653660046113cf565b610d47565b6101e260035481565b606060078054610482906115a6565b80601f01602080910402602001604051908101604052809291908181526020018280546104ae906115a6565b80156104fb5780601f106104d0576101008083540402835291602001916104fb565b820191906000526020600020905b8154815290600101906020018083116104de57829003601f168201915b5050505050905090565b6000610512338484610dc9565b5060015b92915050565b6000610529848484610ed2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610594576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a885336105a38685611628565b610dc9565b506001949350505050565b60006105bf338361108d565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610605575060005473ffffffffffffffffffffffffffffffffffffffff163314155b8015610629575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610660576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066a83836111cf565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070a91869061163b565b60405180910390a250600192915050565b606060088054610482906115a6565b6000610512338484610ed2565b6000806000610744610aa7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa919061165d565b610830576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083a338561108d565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955916108739189918991879161167f565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610920576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109e7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a34576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a3879060200161098f565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5e91906116ae565b905073ffffffffffffffffffffffffffffffffffffffff8116610bad576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6091906116cb565b905080600003610c9c576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610caf91906116e4565b610cb991906116fb565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d12576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f9060200161098f565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d94576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a9060200161098f565b73ffffffffffffffffffffffffffffffffffffffff8316610e16576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e63576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f1f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f6c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610fcc576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd68282611628565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526004602052604080822093909355908516815290812080548492906110199084906116fb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161107f91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110da576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020548181101561113a576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111448282611628565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120919091556006805484929061117f908490611628565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec5565b73ffffffffffffffffffffffffffffffffffffffff821661121c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806006600082825461122e91906116fb565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906112689084906116fb565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e5576020818501810151868301820152016112c9565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133660208301846112bf565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461135f57600080fd5b50565b6000806040838503121561137557600080fd5b82356113808161133d565b946020939093013593505050565b6000806000606084860312156113a357600080fd5b83356113ae8161133d565b925060208401356113be8161133d565b929592945050506040919091013590565b6000602082840312156113e157600080fd5b5035919050565b6000602082840312156113fa57600080fd5b81356113368161133d565b6020810160038310611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148857600080fd5b823567ffffffffffffffff81111561149f57600080fd5b8301601f810185136114b057600080fd5b803567ffffffffffffffff8111156114ca576114ca611446565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153657611536611446565b60405281815282820160200187101561154e57600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158057600080fd5b823561158b8161133d565b9150602083013561159b8161133d565b809150509250929050565b600181811c908216806115ba57607f821691505b6020821081036115f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610516576105166115f9565b60408152600061164e60408301856112bf565b90508260208301529392505050565b60006020828403121561166f57600080fd5b8151801515811461133657600080fd5b60808152600061169260808301876112bf565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c057600080fd5b81516113368161133d565b6000602082840312156116dd57600080fd5b5051919050565b8082028115828204841417610516576105166115f9565b80820180821115610516576105166115f956fea264697066735822122037649c2055bfb791d5356fcc351c4af595c644cc42f4d0379388cd4eda6b0fd864736f6c634300081a0033a26469706673582212204c10dcfaae235403fb1ac100f2d1e903aa2af8840b173e48fc4f9884e73d245764736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index a882c8be..a9b9db22 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -45,8 +45,8 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d416100fd60003960008181611e7201528181611e9b01526120530152612d416000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612531565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612647565b61078b565b34801561029657600080fd5b5061022e6102a5366004612703565b610884565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd36600461278f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a3660046127a8565b6109d7565b34801561036b57600080fd5b5061022e61037a3660046127d8565b610a21565b34801561038b57600080fd5b5061022e61039a3660046127a8565b610afd565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610b49565b3480156103e857600080fd5b5061022e6103f7366004612876565b610b7e565b34801561040857600080fd5b5061022e610417366004612898565b610c61565b61022e61042a3660046128c6565b610ea3565b34801561043b57600080fd5b50610331610ebe565b34801561045057600080fd5b5061022e61045f3660046127d8565b610eed565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612916565b611086565b3480156104c757600080fd5b5061022e6104d636600461298b565b611105565b3480156104e757600080fd5b5061022e6104f63660046129c6565b611204565b34801561050757600080fd5b5061022e6112b6565b34801561051c57600080fd5b5061025561052b3660046127a8565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612a51565b3480156105ec57600080fd5b5061022e6105fb3660046127d8565b6112e8565b34801561060c57600080fd5b5061022e61061b3660046127d8565b61138a565b34801561062c57600080fd5b5061022e61063b3660046127a8565b611523565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612a64565b611567565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6107936116b2565b61079b610694565b60006107a78383611733565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190612a9b565b60405161084d959493929190612ab4565b60405180910390a35061087f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d9610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061090c57506001600160a01b03831630145b15610943576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094d8484611a26565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261099e928a921690899088908890600401612bd3565b600060405180830381600087803b1580156109b857600080fd5b505af11580156109cc573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a1181611bf4565b610a1b8383611bfe565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a6e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76610694565b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610ac39089908990899088908890600401612bd3565b600060405180830381600087803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610b3f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087f8282611ceb565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b7381611bf4565b610b7b611daf565b50565b610b866116b2565b610b8e610694565b610bac8273735b14bb79463307aacbed86daf3322b1e6226ab611a26565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610c2c936001600160a01b039091169189918190612ab4565b60405180910390a3610c5d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610cac5750825b905060008267ffffffffffffffff166001148015610cc95750303b155b905081158015610cd7575080155b15610d0e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610d6f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716610daf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db7611e3f565b610dbf611e3f565b610dc7611e47565b610dcf611e57565b610dda600087611bfe565b50610e057f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611bfe565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610e9a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610eab611e67565b610eb482611f37565b610c5d8282611f42565b6000610ec8612048565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f3a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f42610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f7557506001600160a01b03831630145b15610fac576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110389190612c1a565b506040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610ac39089908990899088908890600401612bd3565b61108e6116b2565b611096610694565b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516110d493929190612c3c565b60405180910390a3610a1b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61110d6116b2565b611115610694565b60006111218585611733565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b69190612a9b565b8a8a6040516111cb9796959493929190612c6c565b60405180910390a3506111fd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b61120c6116b2565b611214610694565b6112328473735b14bb79463307aacbed86daf3322b1e6226ab611a26565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052600080546110d4936001600160a01b03909116918b9181908b908b90612c6c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112e081611bf4565b610b7b6120aa565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611335576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61133d610694565b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610ac39089908990899088908890600401612bd3565b3373735b14bb79463307aacbed86daf3322b1e6226ab146113d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113df610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061141257506001600160a01b03831630145b15611449576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190612c1a565b506040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610ac39089908990899088908890600401612bd3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461155d81611bf4565b610a1b8383611ceb565b3373735b14bb79463307aacbed86daf3322b1e6226ab146115b4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115bc610694565b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab14806115ef57506001600160a01b03811630145b15611626576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af115801561168e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190612c1a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161172d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190612cc1565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af115801561181e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118429190612c1a565b611878576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af11580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190612c1a565b61193e576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af115801561199e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c29190612c1a565b6119f8576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba9190612c1a565b611af0576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114611bb4576040519150601f19603f3d011682016040523d82523d6000602084013e611bb9565b606091505b505090508061087f576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7b8133612123565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ce1576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611c973390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ce1576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b611db76121b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f061220b565b611e4f61220b565b6106f0612272565b611e5f61220b565b6106f06122c3565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f0057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ef47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5d81611bf4565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f9c575060408051601f3d908101601f19168201909252611f9991810190612a9b565b60015b611fe2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461203e576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611fd9565b61087f83836122cb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120b2610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611e21565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c5d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611fd9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61227a61220b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611a0061220b565b6122d482612321565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156123195761087f82826123c9565b610c5d61243f565b806001600160a01b03163b600003612370576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611fd9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516123e69190612cef565b600060405180830381855af49150503d8060008114612421576040519150601f19603f3d011682016040523d82523d6000602084013e612426565b606091505b5091509150612436858383612477565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261248c57612487826124ef565b6124e8565b81511580156124a357506001600160a01b0384163b155b156124e5576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611fd9565b50805b9392505050565b8051156124ff5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561254357600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146124e857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126125b357600080fd5b813567ffffffffffffffff8111156125cd576125cd612573565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff821117156125fd576125fd612573565b60405281815283820160200185101561261557600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610b7b57600080fd5b60008060006060848603121561265c57600080fd5b833567ffffffffffffffff81111561267357600080fd5b61267f868287016125a2565b93505060208401359150604084013561269781612632565b809150509250925092565b6000606082840312156126b457600080fd5b50919050565b60008083601f8401126126cc57600080fd5b50813567ffffffffffffffff8111156126e457600080fd5b6020830191508360208285010111156126fc57600080fd5b9250929050565b60008060008060006080868803121561271b57600080fd5b853567ffffffffffffffff81111561273257600080fd5b61273e888289016126a2565b95505060208601359350604086013561275681612632565b9250606086013567ffffffffffffffff81111561277257600080fd5b61277e888289016126ba565b969995985093965092949392505050565b6000602082840312156127a157600080fd5b5035919050565b600080604083850312156127bb57600080fd5b8235915060208301356127cd81612632565b809150509250929050565b60008060008060008060a087890312156127f157600080fd5b863567ffffffffffffffff81111561280857600080fd5b61281489828a016126a2565b965050602087013561282581612632565b945060408701359350606087013561283c81612632565b9250608087013567ffffffffffffffff81111561285857600080fd5b61286489828a016126ba565b979a9699509497509295939492505050565b6000806040838503121561288957600080fd5b50508035926020909101359150565b600080604083850312156128ab57600080fd5b82356128b681612632565b915060208301356127cd81612632565b600080604083850312156128d957600080fd5b82356128e481612632565b9150602083013567ffffffffffffffff81111561290057600080fd5b61290c858286016125a2565b9150509250929050565b6000806000806060858703121561292c57600080fd5b843567ffffffffffffffff81111561294357600080fd5b61294f878288016125a2565b94505060208501359250604085013567ffffffffffffffff81111561297357600080fd5b61297f878288016126ba565b95989497509550505050565b6000806000806000608086880312156129a357600080fd5b853567ffffffffffffffff8111156129ba57600080fd5b61273e888289016125a2565b600080600080606085870312156129dc57600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561297357600080fd5b60005b83811015612a1c578181015183820152602001612a04565b50506000910152565b60008151808452612a3d816020860160208601612a01565b601f01601f19169290920160200192915050565b6020815260006124e86020830184612a25565b600080600060608486031215612a7957600080fd5b8335612a8481612632565b925060208401359150604084013561269781612632565b600060208284031215612aad57600080fd5b5051919050565b60c081526000612ac760c0830188612a25565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112612b6457600080fd5b820160208101903567ffffffffffffffff811115612b8157600080fd5b803603821315612b9057600080fd5b60608552612ba2606086018284612b05565b9150506020830135612bb381612632565b6001600160a01b0316602085015260409283013592909301919091525090565b608081526000612be66080830188612b30565b6001600160a01b03871660208401528560408401528281036060840152612c0e818587612b05565b98975050505050505050565b600060208284031215612c2c57600080fd5b815180151581146124e857600080fd5b604081526000612c4f6040830186612a25565b8281036020840152612c62818587612b05565b9695505050505050565b60c081526000612c7f60c083018a612a25565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a0840152612cb3818587612b05565b9a9950505050505050505050565b60008060408385031215612cd457600080fd5b8251612cdf81612632565b6020939093015192949293505050565b60008251612d01818460208701612a01565b919091019291505056fea2646970667358221220a674352ad8eda2675de3e0d97b91ed3fa3da4cd5c58000ddb3dbd7fc65105db464736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d476100fd60003960008181611e7801528181611ea101526120590152612d476000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612537565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e61028536600461264d565b61078b565b34801561029657600080fd5b5061022e6102a5366004612709565b610884565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612795565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a3660046127ae565b6109d7565b34801561036b57600080fd5b5061022e61037a3660046127de565b610a21565b34801561038b57600080fd5b5061022e61039a3660046127ae565b610afd565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610b49565b3480156103e857600080fd5b5061022e6103f736600461287c565b610b7e565b34801561040857600080fd5b5061022e61041736600461289e565b610c61565b61022e61042a3660046128cc565b610ea3565b34801561043b57600080fd5b50610331610ebe565b34801561045057600080fd5b5061022e61045f3660046127de565b610eed565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b636600461291c565b61106e565b3480156104c757600080fd5b5061022e6104d6366004612991565b6110ed565b3480156104e757600080fd5b5061022e6104f63660046129cc565b6111ec565b34801561050757600080fd5b5061022e61129e565b34801561051c57600080fd5b5061025561052b3660046127ae565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612a57565b3480156105ec57600080fd5b5061022e6105fb3660046127de565b6112d0565b34801561060c57600080fd5b5061022e61061b3660046127de565b611372565b34801561062c57600080fd5b5061022e61063b3660046127ae565b6114f3565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612a6a565b611537565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6107936116b8565b61079b610694565b60006107a78383611739565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190612aa1565b60405161084d959493929190612aba565b60405180910390a35061087f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d9610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061090c57506001600160a01b03831630145b15610943576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094d8484611a2c565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261099e928a921690899088908890600401612bd9565b600060405180830381600087803b1580156109b857600080fd5b505af11580156109cc573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a1181611bfa565b610a1b8383611c04565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a6e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76610694565b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610ac39089908990899088908890600401612bd9565b600060405180830381600087803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610b3f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087f8282611cf1565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b7381611bfa565b610b7b611db5565b50565b610b866116b8565b610b8e610694565b610bac8273735b14bb79463307aacbed86daf3322b1e6226ab611a2c565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610c2c936001600160a01b039091169189918190612aba565b60405180910390a3610c5d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610cac5750825b905060008267ffffffffffffffff166001148015610cc95750303b155b905081158015610cd7575080155b15610d0e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610d6f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716610daf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db7611e45565b610dbf611e45565b610dc7611e4d565b610dcf611e5d565b610dda600087611c04565b50610e057f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611c04565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610e9a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610eab611e6d565b610eb482611f3d565b610c5d8282611f48565b6000610ec861204e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f3a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f42610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f7557506001600160a01b03831630145b15610fac576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110389190612c20565b610a76576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110766116b8565b61107e610694565b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516110bc93929190612c42565b60405180910390a3610a1b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110f56116b8565b6110fd610694565b60006111098585611739565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190612aa1565b8a8a6040516111b39796959493929190612c72565b60405180910390a3506111e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6111f46116b8565b6111fc610694565b61121a8473735b14bb79463307aacbed86daf3322b1e6226ab611a2c565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052600080546110bc936001600160a01b03909116918b9181908b908b90612c72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112c881611bfa565b610b7b6120b0565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461131d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611325610694565b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610ac39089908990899088908890600401612bd9565b3373735b14bb79463307aacbed86daf3322b1e6226ab146113bf576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c7610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806113fa57506001600160a01b03831630145b15611431576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190612c20565b611325576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461152d81611bfa565b610a1b8383611cf1565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611584576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158c610694565b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab14806115bf57506001600160a01b03811630145b156115f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af115801561165e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116829190612c20565b61087f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611733576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561177b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179f9190612cc7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190612c20565b61187e576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af11580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e9190612c20565b611944576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af11580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190612c20565b6119fe576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac09190612c20565b611af6576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114611bba576040519150601f19603f3d011682016040523d82523d6000602084013e611bbf565b606091505b505090508061087f576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7b8133612129565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ce7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611c9d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ce7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b611dbd6121b6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612211565b611e55612211565b6106f0612278565b611e65612211565b6106f06122c9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f0657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611efa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5d81611bfa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611fa2575060408051601f3d908101601f19168201909252611f9f91810190612aa1565b60015b611fe8576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612044576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611fdf565b61087f83836122d1565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120b8610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611e27565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c5d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611fdf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612280612211565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611a06612211565b6122da82612327565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231f5761087f82826123cf565b610c5d612445565b806001600160a01b03163b600003612376576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611fdf565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516123ec9190612cf5565b600060405180830381855af49150503d8060008114612427576040519150601f19603f3d011682016040523d82523d6000602084013e61242c565b606091505b509150915061243c85838361247d565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826124925761248d826124f5565b6124ee565b81511580156124a957506001600160a01b0384163b155b156124eb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611fdf565b50805b9392505050565b8051156125055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561254957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146124ee57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126125b957600080fd5b813567ffffffffffffffff8111156125d3576125d3612579565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff8211171561260357612603612579565b60405281815283820160200185101561261b57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610b7b57600080fd5b60008060006060848603121561266257600080fd5b833567ffffffffffffffff81111561267957600080fd5b612685868287016125a8565b93505060208401359150604084013561269d81612638565b809150509250925092565b6000606082840312156126ba57600080fd5b50919050565b60008083601f8401126126d257600080fd5b50813567ffffffffffffffff8111156126ea57600080fd5b60208301915083602082850101111561270257600080fd5b9250929050565b60008060008060006080868803121561272157600080fd5b853567ffffffffffffffff81111561273857600080fd5b612744888289016126a8565b95505060208601359350604086013561275c81612638565b9250606086013567ffffffffffffffff81111561277857600080fd5b612784888289016126c0565b969995985093965092949392505050565b6000602082840312156127a757600080fd5b5035919050565b600080604083850312156127c157600080fd5b8235915060208301356127d381612638565b809150509250929050565b60008060008060008060a087890312156127f757600080fd5b863567ffffffffffffffff81111561280e57600080fd5b61281a89828a016126a8565b965050602087013561282b81612638565b945060408701359350606087013561284281612638565b9250608087013567ffffffffffffffff81111561285e57600080fd5b61286a89828a016126c0565b979a9699509497509295939492505050565b6000806040838503121561288f57600080fd5b50508035926020909101359150565b600080604083850312156128b157600080fd5b82356128bc81612638565b915060208301356127d381612638565b600080604083850312156128df57600080fd5b82356128ea81612638565b9150602083013567ffffffffffffffff81111561290657600080fd5b612912858286016125a8565b9150509250929050565b6000806000806060858703121561293257600080fd5b843567ffffffffffffffff81111561294957600080fd5b612955878288016125a8565b94505060208501359250604085013567ffffffffffffffff81111561297957600080fd5b612985878288016126c0565b95989497509550505050565b6000806000806000608086880312156129a957600080fd5b853567ffffffffffffffff8111156129c057600080fd5b612744888289016125a8565b600080600080606085870312156129e257600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561297957600080fd5b60005b83811015612a22578181015183820152602001612a0a565b50506000910152565b60008151808452612a43816020860160208601612a07565b601f01601f19169290920160200192915050565b6020815260006124ee6020830184612a2b565b600080600060608486031215612a7f57600080fd5b8335612a8a81612638565b925060208401359150604084013561269d81612638565b600060208284031215612ab357600080fd5b5051919050565b60c081526000612acd60c0830188612a2b565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112612b6a57600080fd5b820160208101903567ffffffffffffffff811115612b8757600080fd5b803603821315612b9657600080fd5b60608552612ba8606086018284612b0b565b9150506020830135612bb981612638565b6001600160a01b0316602085015260409283013592909301919091525090565b608081526000612bec6080830188612b36565b6001600160a01b03871660208401528560408401528281036060840152612c14818587612b0b565b98975050505050505050565b600060208284031215612c3257600080fd5b815180151581146124ee57600080fd5b604081526000612c556040830186612a2b565b8281036020840152612c68818587612b0b565b9695505050505050565b60c081526000612c8560c083018a612a2b565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a0840152612cb9818587612b0b565b9a9950505050505050505050565b60008060408385031215612cda57600080fd5b8251612ce581612638565b6020939093015192949293505050565b60008251612d07818460208701612a07565b919091019291505056fea2646970667358221220d80062e0540ac38d4b4690f67eb67f6597352e50aa6a7cdb180a197da643c76164736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. @@ -696,23 +696,23 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) GrantRole(role [32]byte, accou // Initialize is a paid mutator transaction binding the contract method 0x485cc955. // -// Solidity: function initialize(address _zetaToken, address _admin) returns() -func (_GatewayZEVM *GatewayZEVMTransactor) Initialize(opts *bind.TransactOpts, _zetaToken common.Address, _admin common.Address) (*types.Transaction, error) { - return _GatewayZEVM.contract.Transact(opts, "initialize", _zetaToken, _admin) +// Solidity: function initialize(address zetaToken_, address admin_) returns() +func (_GatewayZEVM *GatewayZEVMTransactor) Initialize(opts *bind.TransactOpts, zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayZEVM.contract.Transact(opts, "initialize", zetaToken_, admin_) } // Initialize is a paid mutator transaction binding the contract method 0x485cc955. // -// Solidity: function initialize(address _zetaToken, address _admin) returns() -func (_GatewayZEVM *GatewayZEVMSession) Initialize(_zetaToken common.Address, _admin common.Address) (*types.Transaction, error) { - return _GatewayZEVM.Contract.Initialize(&_GatewayZEVM.TransactOpts, _zetaToken, _admin) +// Solidity: function initialize(address zetaToken_, address admin_) returns() +func (_GatewayZEVM *GatewayZEVMSession) Initialize(zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayZEVM.Contract.Initialize(&_GatewayZEVM.TransactOpts, zetaToken_, admin_) } // Initialize is a paid mutator transaction binding the contract method 0x485cc955. // -// Solidity: function initialize(address _zetaToken, address _admin) returns() -func (_GatewayZEVM *GatewayZEVMTransactorSession) Initialize(_zetaToken common.Address, _admin common.Address) (*types.Transaction, error) { - return _GatewayZEVM.Contract.Initialize(&_GatewayZEVM.TransactOpts, _zetaToken, _admin) +// Solidity: function initialize(address zetaToken_, address admin_) returns() +func (_GatewayZEVM *GatewayZEVMTransactorSession) Initialize(zetaToken_ common.Address, admin_ common.Address) (*types.Transaction, error) { + return _GatewayZEVM.Contract.Initialize(&_GatewayZEVM.TransactOpts, zetaToken_, admin_) } // Pause is a paid mutator transaction binding the contract method 0x8456cb59. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index 7e9aba8b..a6347ac8 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061cd728061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806385226c81116100d8578063ba414fa61161008c578063ea37902f11610066578063ea37902f1461027b578063fa7626d414610283578063fbc611c81461029057600080fd5b8063ba414fa614610253578063dde7e9671461026b578063e20c9f711461027357600080fd5b8063b0464fdc116100bd578063b0464fdc1461023b578063b5508aa914610243578063b7f058361461024b57600080fd5b806385226c8114610211578063916a17c61461022657600080fd5b80632ade38801161013a5780635006fd80116101145780635006fd80146101ec5780635d72228f146101f457806366d9a9a0146101fc57600080fd5b80632ade3880146101c75780633e5e3c23146101dc5780633f7286f4146101e457600080fd5b806318a4cfdc1161016b57806318a4cfdc146101995780631e63d2b9146101a15780631ed7831c146101a957600080fd5b80630a9254e4146101875780631238212c14610191575b600080fd5b61018f610298565b005b61018f610d05565b61018f6110ce565b61018f611523565b6101b161190f565b6040516101be9190617938565b60405180910390f35b6101cf611971565b6040516101be91906179d4565b6101b1611ab3565b6101b1611b13565b61018f611b73565b61018f61200a565b610204612359565b6040516101be9190617b3a565b6102196124db565b6040516101be9190617bd8565b61022e6125ab565b6040516101be9190617c4f565b61022e6126a6565b6102196127a1565b61018f612871565b61025b612aae565b60405190151581526020016101be565b61018f612b82565b6101b1612fab565b61018f61300b565b601f5461025b9060ff1681565b61018f6133c7565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516102de9061784b565b604051809103906000f0801580156102fa573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526103de919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261373a565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156104a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c49190617ce6565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161050890617858565b604051809103906000f080158015610524573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156105c057600080fd5b505af11580156105d4573d6000803e3d6000fd5b5050505060008060006040516105e990617865565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610625573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061067b90617872565b61068a96959493929190617d0f565b604051809103906000f0801580156106a6573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561073d57600080fd5b505af1158015610751573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156108b857600080fd5b505af11580156108cc573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190617e04565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af11580156109d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f99190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8e9190617e04565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c9190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ceb57600080fd5b505af1158015610cff573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7a9190617e26565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e999190617e04565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b158015610f7557600080fd5b505af1158015610f89573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261101d9288916001600160a01b0316908790600401617e3f565b600060405180830381600087803b15801561103757600080fd5b505af115801561104b573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190617e26565b9050610cff8382613759565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b99190617e26565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611368926001600160a01b03909116908c9060009081908b90617e79565b60405180910390a36020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906380bd3d03906113bd90899085908790600401617ecc565b600060405180830381600087803b1580156113d757600080fd5b505af11580156113eb573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561143e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114629190617e26565b9050611478611472600188617f1a565b82613759565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156114c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ed9190617e26565b90506114f98682613759565b611519611507866001617f2d565b6027546001600160a01b031631613759565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190617e26565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561169e57600080fd5b505af11580156116b2573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547ffa62d57f000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918991600091849163fa62d57f916004808201926020929091908290030181865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190617e26565b886040516117bc96959493929190617e79565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936118049316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261185b9288916001600160a01b0316908790600401617e3f565b600060405180830381600087803b15801561187557600080fd5b505af1158015611889573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156118dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119009190617e26565b9050610cff6114728585617f1a565b6060601680548060200260200160405190810160405280929190818152602001828054801561196757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611949575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611aaa57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611a93578382906000526020600020018054611a0690617f40565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3290617f40565b8015611a7f5780601f10611a5457610100808354040283529160200191611a7f565b820191906000526020600020905b815481529060010190602001808311611a6257829003601f168201915b5050505050815260200190600101906119e7565b505050508152505081526020019060010190611995565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611967576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611949575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611967576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611949575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5e9190617e26565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d5257600080fd5b505af1158015611d66573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015611dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfc9190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e5b57600080fd5b505af1158015611e6f573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d039150611ec090899085908790600401617ecc565b600060405180830381600087803b158015611eda57600080fd5b505af1158015611eee573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190617e26565b9050611f718682613759565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe69190617e26565b9050611ff28682613759565b6027546115199086906001600160a01b031631613759565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561205b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207f9190617e26565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e9190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121fd57600080fd5b505af1158015612211573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526122a39287916001600160a01b031690600401617f8d565b600060405180830381600087803b1580156122bd57600080fd5b505af11580156122d1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190617e26565b90506123548282613759565b505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611aaa57838290600052602060002090600202016040518060400160405290816000820180546123b090617f40565b80601f01602080910402602001604051908101604052809291908181526020018280546123dc90617f40565b80156124295780601f106123fe57610100808354040283529160200191612429565b820191906000526020600020905b81548152906001019060200180831161240c57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156124c357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124705790505b5050505050815250508152602001906001019061237d565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611aaa57838290600052602060002001805461251e90617f40565b80601f016020809104026020016040519081016040528092919081815260200182805461254a90617f40565b80156125975780601f1061256c57610100808354040283529160200191612597565b820191906000526020600020905b81548152906001019060200180831161257a57829003601f168201915b5050505050815260200190600101906124ff565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611aaa5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561268e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161263b5790505b505050505081525050815260200190600101906125cf565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611aaa5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561278957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127365790505b505050505081525050815260200190600101906126ca565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611aaa5783829060005260206000200180546127e490617f40565b80601f016020809104026020016040519081016040528092919081815260200182805461281090617f40565b801561285d5780601f106128325761010080835404028352916020019161285d565b820191906000526020600020905b81548152906001019060200180831161284057829003601f168201915b5050505050815260200190600101906127c5565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561297457600080fd5b505af1158015612988573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a01918790617fbf565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e17893612a499316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b8152600401612a7893929190617fe4565b600060405180830381600087803b158015612a9257600080fd5b505af1158015612aa6573d6000803e3d6000fd5b505050505050565b60085460009060ff1615612ac6575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7b9190617e26565b1415905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf79190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6d9190617e26565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ceb57600080fd5b505af1158015612cff573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d959190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612df457600080fd5b505af1158015612e08573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101899052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015612e7257600080fd5b505af1158015612e86573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efd9190617e26565b9050612f098582613759565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7e9190617e26565b9050612f8a8582613759565b602754612fa29085906001600160a01b031631613759565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611967576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611949575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561305c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130809190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190617e26565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461322f926001600160a01b03909116908b90600090819061800f565b60405180910390a36020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018390526001600160a01b039091169063441a3e7090604401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133289190617e26565b9050613338611472600187617f1a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ad9190617e26565b90506133b98582613759565b612fa2611507856001617f2d565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343c9190617e26565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156134cd57600080fd5b505af11580156134e1573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547ffa62d57f000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918891600091849163fa62d57f916004808201926020929091908290030181865afa1580156135b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d89190617e26565b6040516135e995949392919061800f565b60405180910390a3602080546026546040516001600160a01b039283169363135390f9936136319316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526136869287916001600160a01b031690600401617f8d565b600060405180830381600087803b1580156136a057600080fd5b505af11580156136b4573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372b9190617e26565b90506123546114728484617f1a565b600061374461787f565b61374f8484836137d8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156137c457600080fd5b505afa158015612aa6573d6000803e3d6000fd5b6000806137e58584613853565b90506138486040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613833929190618060565b6040516020818303038152906040528561385f565b9150505b9392505050565b600061384c838361388d565b60c081015151600090156138835761387c84848460c001516138a8565b905061384c565b61387c8484613a4e565b60006138998383613b39565b61384c8383602001518461385f565b6000806138b3613b49565b905060006138c18683613c1c565b905060006138d882606001518360200151856140c2565b905060006138e8838389896142d4565b905060006138f582615151565b602081015181519192509060030b156139685789826040015160405160200161391f929190618082565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261395f91600401618103565b60405180910390fd5b60006139ab6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615320565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139fe908490600401618103565b602060405180830381865afa158015613a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3f9190617ce6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613aa3908790600401618103565b600060405180830381865afa158015613ac0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ae891908101906181fe565b90506000613b168285604051602001613b02929190618233565b604051602081830303815290604052615520565b90506001600160a01b03811661374f57848460405160200161391f929190618262565b613b4582826000615533565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bd090849060040161830d565b600060405180830381865afa158015613bed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c159190810190618354565b9250505090565b613c4e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c996040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613ca285615636565b60208201526000613cb286615a1b565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cf4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d1c9190810190618354565b86838560200151604051602001613d36949392919061839d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d8e908590600401618103565b600060405180830381865afa158015613dab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dd39190810190618354565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613e1b9084906004016184a1565b602060405180830381865afa158015613e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5c9190617e04565b613e71578160405160200161391f91906184f3565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613eb6908490600401618585565b600060405180830381865afa158015613ed3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613efb9190810190618354565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f429084906004016185d7565b602060405180830381865afa158015613f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f839190617e04565b15614018576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fcd9084906004016185d7565b600060405180830381865afa158015613fea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140129190810190618354565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161403d9190618629565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614069929190617fbf565b600060405180830381865afa158015614086573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140ae9190810190618354565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140de5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061413e5761413e618695565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061419257614192618695565b6020026020010181905250846040516020016141ae91906186c4565b604051602081830303815290604052816002815181106141d0576141d0618695565b6020026020010181905250826040516020016141ec9190618730565b6040516020818303038152906040528160038151811061420e5761420e618695565b6020026020010181905250600061422482615151565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142b59060408051808201825260008082526020918201528151808301909252845182528085019082015290615c9e565b6142ca578560405160200161391f9190618771565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614324565b511590565b614498578260200151156143e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161395f565b8260c0015115614498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161395f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816144b157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061450c90618802565b935060ff168151811061452157614521618695565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016145729190618821565b60405160208183030381529060405282828061458d90618802565b935060ff16815181106145a2576145a2618695565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145ef90618802565b935060ff168151811061460457614604618695565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061465190618802565b935060ff168151811061466657614666618695565b6020026020010181905250876020015182828061468290618802565b935060ff168151811061469757614697618695565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146e490618802565b935060ff16815181106146f9576146f9618695565b60209081029190910101528751828261471181618802565b935060ff168151811061472657614726618695565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061477390618802565b935060ff168151811061478857614788618695565b602002602001018190525061479c46615cff565b82826147a781618802565b935060ff16815181106147bc576147bc618695565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061480990618802565b935060ff168151811061481e5761481e618695565b60200260200101819052508682828061483690618802565b935060ff168151811061484b5761484b618695565b60209081029190910101528551156149725760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261489c81618802565b935060ff16815181106148b1576148b1618695565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614901908990600401618103565b600060405180830381865afa15801561491e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149469190810190618354565b828261495181618802565b935060ff168151811061496657614966618695565b60200260200101819052505b846020015115614a425760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826149bb81618802565b935060ff16815181106149d0576149d0618695565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614a1d90618802565b935060ff1681518110614a3257614a32618695565b6020026020010181905250614c09565b614a7a61431f8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614b0d5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614abd81618802565b935060ff1681518110614ad257614ad2618695565b60200260200101819052508460a00151604051602001614af291906186c4565b604051602081830303815290604052828280614a1d90618802565b8460c00151158015614b50575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b4e90511590565b155b15614c095760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b9481618802565b935060ff1681518110614ba957614ba9618695565b6020026020010181905250614bbd88615d9f565b604051602001614bcd91906186c4565b604051602081830303815290604052828280614be890618802565b935060ff1681518110614bfd57614bfd618695565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c3d90511590565b614cd25760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c8081618802565b935060ff1681518110614c9557614c95618695565b60200260200101819052508460400151828280614cb190618802565b935060ff1681518110614cc657614cc6618695565b60200260200101819052505b606085015115614df35760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614d1b81618802565b935060ff1681518110614d3057614d30618695565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d9f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dc79190810190618354565b8282614dd281618802565b935060ff1681518110614de757614de7618695565b60200260200101819052505b60e08501515115614e9a5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e3d81618802565b935060ff1681518110614e5257614e52618695565b6020026020010181905250614e6e8560e0015160000151615cff565b8282614e7981618802565b935060ff1681518110614e8e57614e8e618695565b60200260200101819052505b60e08501516020015115614f445760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ee781618802565b935060ff1681518110614efc57614efc618695565b6020026020010181905250614f188560e0015160200151615cff565b8282614f2381618802565b935060ff1681518110614f3857614f38618695565b60200260200101819052505b60e08501516040015115614fee5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f9181618802565b935060ff1681518110614fa657614fa6618695565b6020026020010181905250614fc28560e0015160400151615cff565b8282614fcd81618802565b935060ff1681518110614fe257614fe2618695565b60200260200101819052505b60e085015160600151156150985760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261503b81618802565b935060ff168151811061505057615050618695565b602002602001018190525061506c8560e0015160600151615cff565b828261507781618802565b935060ff168151811061508c5761508c618695565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156150b6576150b6618116565b6040519080825280602002602001820160405280156150e957816020015b60608152602001906001900390816150d45790505b50905060005b8260ff168160ff16101561514257838160ff168151811061511257615112618695565b6020026020010151828260ff168151811061512f5761512f618695565b60209081029190910101526001016150ef565b5093505050505b949350505050565b6151786040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151fe9186910161888c565b600060405180830381865afa15801561521b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152439190810190618354565b90506000615251868361688e565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016152819190617bd8565b6000604051808303816000875af11580156152a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152c891908101906188d3565b805190915060030b158015906152e15750602081015151155b80156152f05750604081015151155b156142ca578160008151811061530857615308618695565b602002602001015160405160200161391f9190618989565b606060006153558560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061538c9082905b906169e3565b156154e957600061540982615403846153fd6153cf8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616a0a565b90616a6c565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061546d9082906169e3565b156154d757604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154d4905b8290616af1565b90505b6154e081616b17565b9250505061384c565b821561550257848460405160200161391f929190618b75565b505060408051602081019091526000815261384c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561554257505050565b600061554f848484616b80565b9050600061555c82615151565b602081015181519192509060030b1580156155f85750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155f890604080518082018252600080825260209182015281518083019092528451825280850190820152615386565b1561560557505050505050565b6040820151511561562557816040015160405160200161391f9190618c1c565b8060405160200161391f9190618c7a565b6060600061566b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156d0905b8290615c9e565b1561573f57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261384c9061573a90839061711b565b616b17565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157a1905b82906171a5565b60010361586e57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615807906154cd565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261384c9061573a905b8390616af1565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158cd906156c9565b15615a0457604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061593590839061723f565b9050600081600183516159489190617f1a565b8151811061595857615958618695565b602002602001015190506159fb61573a6159ce6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061711b565b95945050505050565b8260405160200161391f9190618ce5565b50919050565b60606000615a508360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ab2906156c9565b15615ac05761384c81616b17565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b1f9061579a565b600103615b8957604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261384c9061573a90615867565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615be8906156c9565b15615a0457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c5090839061723f565b9050600181511115615c8c578060028251615c6b9190617f1a565b81518110615c7b57615c7b618695565b602002602001015192505050919050565b508260405160200161391f9190618ce5565b805182516000911115615cb357506000613753565b81518351602085015160009291615cc991617f2d565b615cd39190617f1a565b905082602001518103615cea576001915050613753565b82516020840151819020912014905092915050565b60606000615d0c836172e4565b600101905060008167ffffffffffffffff811115615d2c57615d2c618116565b6040519080825280601f01601f191660200182016040528015615d56576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d6057509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e2b905b82906173c6565b15615e6b57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615eca90615e24565b15615f0a57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f6990615e24565b15615fa957505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261600890615e24565b8061606d5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261606d90615e24565b156160ad57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610c90615e24565b806161715750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261617190615e24565b156161b157505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621090615e24565b806162755750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261627590615e24565b156162b557505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261631490615e24565b806163795750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261637990615e24565b156163b957505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261641890615e24565b1561645857505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b790615e24565b156164f757505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261655690615e24565b1561659657505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165f590615e24565b1561663557505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261669490615e24565b156166d457505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261673390615e24565b806167985750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261679890615e24565b156167d857505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261683790615e24565b1561687757505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161391f9290602001618dc3565b60608060005b845181101561691957818582815181106168b0576168b0618695565b60200260200101516040516020016168c9929190618233565b6040516020818303038152906040529150600185516168e89190617f1a565b811461691157816040516020016168ff9190618f2c565b60405160208183030381529060405291505b600101616894565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616932579050509050838160008151811061695d5761695d618695565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106169b1576169b1618695565b602002602001018190525081816002815181106169d0576169d0618695565b6020908102919091010152949350505050565b6020808301518351835192840151600093616a0192918491906173da565b14159392505050565b60408051808201909152600080825260208201526000616a3c84600001518560200151856000015186602001516174eb565b9050836020015181616a4e9190617f1a565b84518590616a5d908390617f1a565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a91575081613753565b6020808301519084015160019114616ab85750815160208481015190840151829020919020145b8015616ae957825184518590616acf908390617f1a565b9052508251602085018051616ae5908390617f2d565b9052505b509192915050565b6040805180820190915260008082526020820152616b1083838361760b565b5092915050565b60606000826000015167ffffffffffffffff811115616b3857616b38618116565b6040519080825280601f01601f191660200182016040528015616b62576020820181803683370190505b5090506000602082019050616b1081856020015186600001516176b6565b60606000616b8c613b49565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616ba957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616c0490618802565b935060ff1681518110616c1957616c19618695565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c6a9190618f6d565b604051602081830303815290604052828280616c8590618802565b935060ff1681518110616c9a57616c9a618695565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616ce790618802565b935060ff1681518110616cfc57616cfc618695565b602002602001018190525082604051602001616d189190618730565b604051602081830303815290604052828280616d3390618802565b935060ff1681518110616d4857616d48618695565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d9590618802565b935060ff1681518110616daa57616daa618695565b6020026020010181905250616dbf8784617730565b8282616dca81618802565b935060ff1681518110616ddf57616ddf618695565b602090810291909101015285515115616e8b5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e3181618802565b935060ff1681518110616e4657616e46618695565b6020026020010181905250616e5f866000015184617730565b8282616e6a81618802565b935060ff1681518110616e7f57616e7f618695565b60200260200101819052505b856080015115616ef95760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616ed481618802565b935060ff1681518110616ee957616ee9618695565b6020026020010181905250616f5f565b8415616f5f5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f3e81618802565b935060ff1681518110616f5357616f53618695565b60200260200101819052505b60408601515115616ffb5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616fa981618802565b935060ff1681518110616fbe57616fbe618695565b60200260200101819052508560400151828280616fda90618802565b935060ff1681518110616fef57616fef618695565b60200260200101819052505b8560600151156170655760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261704481618802565b935060ff168151811061705957617059618695565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561708357617083618116565b6040519080825280602002602001820160405280156170b657816020015b60608152602001906001900390816170a15790505b50905060005b8260ff168160ff16101561710f57838160ff16815181106170df576170df618695565b6020026020010151828260ff16815181106170fc576170fc618695565b60209081029190910101526001016170bc565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617140575081613753565b8151835160208501516000929161715691617f2d565b6171609190617f1a565b60208401519091506001908214617181575082516020840151819020908220145b801561719c57835185518690617198908390617f1a565b9052505b50929392505050565b60008082600001516171c985600001518660200151866000015187602001516174eb565b6171d39190617f2d565b90505b835160208501516171e79190617f2d565b8111616b1057816171f781618fb2565b925050826000015161722e8560200151836172129190617f1a565b865161721e9190617f1a565b83866000015187602001516174eb565b6172389190617f2d565b90506171d6565b6060600061724d84846171a5565b617258906001617f2d565b67ffffffffffffffff81111561727057617270618116565b6040519080825280602002602001820160405280156172a357816020015b606081526020019060019003908161728e5790505b50905060005b8151811015615518576172bf61573a8686616af1565b8282815181106172d1576172d1618695565b60209081029190910101526001016172a9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061732d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617359576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061737757662386f26fc10000830492506010015b6305f5e100831061738f576305f5e100830492506008015b61271083106173a357612710830492506004015b606483106173b5576064830492506002015b600a83106137535760010192915050565b60006173d28383617770565b159392505050565b6000808584116174e1576020841161748d5760008415617425576001617401866020617f1a565b61740c906008618fcc565b6174179060026190ca565b6174219190617f1a565b1990505b83518116856174348989617f2d565b61743e9190617f1a565b805190935082165b818114617478578784116174605787945050505050615149565b8361746a816190d6565b945050828451169050617446565b6174828785617f2d565b945050505050615149565b83832061749a8588617f1a565b6174a49087617f2d565b91505b8582106174df578482208082036174cc576174c28684617f2d565b9350505050615149565b6174d7600184617f1a565b9250506174a7565b505b5092949350505050565b600083818685116175f657602085116175a55760008515617537576001617513876020617f1a565b61751e906008618fcc565b6175299060026190ca565b6175339190617f1a565b1990505b845181166000876175488b8b617f2d565b6175529190617f1a565b855190915083165b8281146175975781861061757f576175728b8b617f2d565b9650505050505050615149565b8561758981618fb2565b96505083865116905061755a565b859650505050505050615149565b508383206000905b6175b78689617f1a565b82116175f4578583208082036175d35783945050505050615149565b6175de600185617f2d565b93505081806175ec90618fb2565b9250506175ad565b505b6176008787617f2d565b979650505050505050565b6040805180820190915260008082526020820152600061763d85600001518660200151866000015187602001516174eb565b6020808701805191860191909152519091506176599082617f1a565b83528451602086015161766c9190617f2d565b810361767b57600085526176ad565b835183516176899190617f2d565b85518690617698908390617f1a565b90525083516176a79082617f2d565b60208601525b50909392505050565b602081106176ee57815183526176cd602084617f2d565b92506176da602083617f2d565b91506176e7602082617f1a565b90506176b6565b600019811561771d576001617704836020617f1a565b617710906101006190ca565b61771a9190617f1a565b90505b9151835183169219169190911790915250565b6060600061773e8484613c1c565b8051602080830151604051939450617758939091016190ed565b60405160208183030381529060405291505092915050565b8151815160009190811115617783575081515b6020808501519084015160005b8381101561783c578251825180821461780c5760001960208710156177eb576001846177bd896020617f1a565b6177c79190617f2d565b6177d2906008618fcc565b6177dd9060026190ca565b6177e79190617f1a565b1990505b81811683821681810391146178095797506137539650505050505050565b50505b617817602086617f2d565b9450617824602085617f2d565b935050506020816178359190617f2d565b9050617790565b50845186516142ca9190619145565b610b678061916683390190565b61053f80619ccd83390190565b61106f8061a20c83390190565b611ac28061b27b83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178c26178c7565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178c26040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179795783516001600160a01b0316835260209384019390920191600101617952565b509095945050505050565b60005b8381101561799f578181015183820152602001617987565b50506000910152565b600081518084526179c0816020860160208601617984565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ab6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aa08486516179a8565b6020958601959094509290920191600101617a66565b5091975050506020948501949290920191506001016179fc565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b305781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617af0565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617ba660408801826179a8565b9050602082015191508681036020880152617bc18183617adc565b965050506020938401939190910190600101617b62565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c3a8583516179a8565b94506020938401939190910190600101617c00565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cd06040870182617adc565b9550506020938401939190910190600101617c77565b600060208284031215617cf857600080fd5b81516001600160a01b038116811461384c57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617dea60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215617e1657600080fd5b8151801515811461384c57600080fd5b600060208284031215617e3857600080fd5b5051919050565b608081526000617e5260808301876179a8565b8560208401526001600160a01b0385166040840152828103606084015261760081856179a8565b60c081526000617e8c60c08301896179a8565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a0840152617ebf81856179a8565b9998505050505050505050565b8381528260208201526060604082015260006159fb60608301846179a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561375357613753617eeb565b8082018082111561375357613753617eeb565b600181811c90821680617f5457607f821691505b602082108103615a15577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b606081526000617fa060608301866179a8565b90508360208301526001600160a01b0383166040830152949350505050565b604081526000617fd260408301856179a8565b828103602084015261384881856179a8565b606081526000617ff760608301866179a8565b84602084015282810360408401526142ca81856179a8565b60c08152600061802260c08301886179a8565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b038316815260406020820152600061514960408301846179a8565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180ba81601a850160208801617984565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516180f781601c840160208801617984565b01601c01949350505050565b60208152600061384c60208301846179a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561816857618168618116565b60405290565b60008067ffffffffffffffff84111561818957618189618116565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156181b8576181b8618116565b6040528381529050808284018510156181d057600080fd5b615518846020830185617984565b600082601f8301126181ef57600080fd5b61384c8383516020850161816e565b60006020828403121561821057600080fd5b815167ffffffffffffffff81111561822757600080fd5b61374f848285016181de565b60008351618245818460208801617984565b835190830190618259818360208801617984565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161829a81601a850160208801617984565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516182d7816033840160208801617984565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061384c60808301846179a8565b60006020828403121561836657600080fd5b815167ffffffffffffffff81111561837d57600080fd5b8201601f8101841361838e57600080fd5b61374f8482516020840161816e565b600085516183af818460208a01617984565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516183e9816001840160208a01617984565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618427816002840160208901617984565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618469816002840160208801617984565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184b460408301846179a8565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161852b81601f850160208701617984565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061859860408301846179a8565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006185ea60408301846179a8565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618661816014850160208701617984565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516186fc816001850160208701617984565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618742818460208701617984565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516187f581604b850160208701617984565b91909101604b0192915050565b600060ff821660ff810361881857618818617eeb565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161887f816029850160208701617984565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061384c60808301846179a8565b6000602082840312156188e557600080fd5b815167ffffffffffffffff8111156188fc57600080fd5b82016060818503121561890e57600080fd5b618916618145565b81518060030b811461892757600080fd5b8152602082015167ffffffffffffffff81111561894357600080fd5b61894f868285016181de565b602083015250604082015167ffffffffffffffff81111561896f57600080fd5b61897b868285016181de565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516189e7816021850160208701617984565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618bd3816021850160208801617984565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c1081602e840160208801617984565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161887f816029850160208701617984565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618cd8816022850160208701617984565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618d1d81600e850160208701617984565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618dfb816018850160208801617984565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618e3881601c840160208801617984565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618f3e818460208701617984565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618fa581601c850160208701617984565b91909101601c0192915050565b60006000198203618fc557618fc5617eeb565b5060010190565b808202811582820484141761375357613753617eeb565b6001815b600184111561901e5780850481111561900257619002617eeb565b600184161561901057908102905b60019390931c928002618fe7565b935093915050565b60008261903557506001613753565b8161904257506000613753565b816001811461905857600281146190625761907e565b6001915050613753565b60ff84111561907357619073617eeb565b50506001821b613753565b5060208310610133831016604e8410600b84101617156190a1575081810a613753565b6190ae6000198484618fe3565b80600019048211156190c2576190c2617eeb565b029392505050565b600061384c8383619026565b6000816190e5576190e5617eeb565b506000190190565b600083516190ff818460208801617984565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619139816001840160208801617984565b01600101949350505050565b8181036000831280158383131683831282161715616b1057616b10617eeb56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220a43967e13d8e35f364f3cdb6ecac268084c561ca3e6d91a1f4a54b41cd42ccbb64736f6c634300081a003360c060405234801561001057600080fd5b50604051611ac2380380611ac283398101604081905261002f916101db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600761006f898261032d565b50600861007c888261032d565b506009805460ff191660ff881617905560808590528360028111156100a3576100a36103eb565b60a08160028111156100b7576100b76103eb565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104019350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261011e57600080fd5b81516001600160401b03811115610137576101376100f7565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610165576101656100f7565b60405281815283820160200185101561017d57600080fd5b60005b8281101561019c57602081860181015183830182015201610180565b506000918101602001919091529392505050565b8051600381106101bf57600080fd5b919050565b80516001600160a01b03811681146101bf57600080fd5b600080600080600080600080610100898b0312156101f857600080fd5b88516001600160401b0381111561020e57600080fd5b61021a8b828c0161010d565b60208b015190995090506001600160401b0381111561023857600080fd5b6102448b828c0161010d565b975050604089015160ff8116811461025b57600080fd5b60608a0151909650945061027160808a016101b0565b60a08a0151909450925061028760c08a016101c4565b915061029560e08a016101c4565b90509295985092959890939650565b600181811c908216806102b857607f821691505b6020821081036102d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561032857806000526020600020601f840160051c810160208510156103055750805b601f840160051c820191505b818110156103255760008155600101610311565b50505b505050565b81516001600160401b03811115610346576103466100f7565b61035a8161035484546102a4565b846102de565b6020601f82116001811461038e57600083156103765750848201515b600019600385901b1c1916600184901b178455610325565b600084815260208120601f198516915b828110156103be578785015182556020948501946001909201910161039e565b50848210156103dc5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05161168e61043460003960006103280152600081816102d901528181610a1d0152610b23015261168e6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b714610432578063f687d12a1461043b578063fa62d57f1461044e57600080fd5b8063d9eeebed146103a5578063dd62ed3e146103d9578063eddeb1231461041f57600080fd5b8063c7012626116100bd578063c70126261461036a578063c835d7cc1461037d578063ccc775991461039257600080fd5b806395d89b411461031b578063a3413d0314610323578063a9059cbb1461035757600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a082311461029e57806385e1f4d0146102d45780638b851b95146102fb57600080fd5b80633ce4a5bc1461025d57806342966c681461027857806347e7ef241461028b57600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610457565b6040516101b2919061126d565b60405180910390f35b6101ce6101c93660046112ac565b6104e9565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe3660046112d8565b610500565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60095460405160ff90911681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce610286366004611319565b610597565b6101ce6102993660046112ac565b6105ab565b6101e26102ac366004611332565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a56106ff565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b2919061134f565b6101ce6103653660046112ac565b61070e565b6101ce6103783660046113bf565b61071b565b61039061038b366004611332565b61086a565b005b6103906103a0366004611332565b610931565b6103ad6109f1565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e26103e73660046114b7565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b61039061042d366004611319565b610c0f565b6101e260025481565b610390610449366004611319565b610c91565b6101e260035481565b606060078054610466906114f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610492906114f0565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b5050505050905090565b60006104f6338484610d13565b5060015b92915050565b600061050d848484610e1c565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610578576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61058c85336105878685611572565b610d13565b506001949350505050565b60006105a33383610fd7565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab148015906105e9575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561060d575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610644576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61064e8383611119565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526106ee918690611585565b60405180910390a250600192915050565b606060088054610466906114f0565b60006104f6338484610e1c565b60008060006107286109f1565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de91906115a7565b610814576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081e3385610fd7565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d95591610857918991899187916115c9565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108b7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461097e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610926565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa891906115f8565b905073ffffffffffffffffffffffffffffffffffffffff8116610af7576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa9190611615565b905080600003610be6576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610bf9919061162e565b610c039190611645565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610c5c576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610926565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cde576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610926565b73ffffffffffffffffffffffffffffffffffffffff8316610d60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610dad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e69576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610eb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610f16576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f208282611572565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681529081208054849290610f63908490611645565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fc991815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611024576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205481811015611084576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61108e8282611572565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040812091909155600680548492906110c9908490611572565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e0f565b73ffffffffffffffffffffffffffffffffffffffff8216611166576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546111789190611645565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906111b2908490611645565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561122f57602081850181015186830182015201611213565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006112806020830184611209565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112a957600080fd5b50565b600080604083850312156112bf57600080fd5b82356112ca81611287565b946020939093013593505050565b6000806000606084860312156112ed57600080fd5b83356112f881611287565b9250602084013561130881611287565b929592945050506040919091013590565b60006020828403121561132b57600080fd5b5035919050565b60006020828403121561134457600080fd5b813561128081611287565b602081016003831061138a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113d257600080fd5b823567ffffffffffffffff8111156113e957600080fd5b8301601f810185136113fa57600080fd5b803567ffffffffffffffff81111561141457611414611390565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561148057611480611390565b60405281815282820160200187101561149857600080fd5b8160208401602083013760006020928201830152969401359450505050565b600080604083850312156114ca57600080fd5b82356114d581611287565b915060208301356114e581611287565b809150509250929050565b600181811c9082168061150457607f821691505b60208210810361153d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104fa576104fa611543565b6040815260006115986040830185611209565b90508260208301529392505050565b6000602082840312156115b957600080fd5b8151801515811461128057600080fd5b6080815260006115dc6080830187611209565b6020830195909552506040810192909252606090910152919050565b60006020828403121561160a57600080fd5b815161128081611287565b60006020828403121561162757600080fd5b5051919050565b80820281158282048414176104fa576104fa611543565b808201808211156104fa576104fa61154356fea2646970667358221220ff62fd4bd87c4bd8cb6b710eb3bc879bf82b272805bab80a5c462f9aee4e937164736f6c634300081a0033a2646970667358221220c83d6ed772980e15022803be1082368a1a5a0ff8bb84e8efe57e25674947619264736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ce658061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806385226c81116100d8578063ba414fa61161008c578063ea37902f11610066578063ea37902f1461027b578063fa7626d414610283578063fbc611c81461029057600080fd5b8063ba414fa614610253578063dde7e9671461026b578063e20c9f711461027357600080fd5b8063b0464fdc116100bd578063b0464fdc1461023b578063b5508aa914610243578063b7f058361461024b57600080fd5b806385226c8114610211578063916a17c61461022657600080fd5b80632ade38801161013a5780635006fd80116101145780635006fd80146101ec5780635d72228f146101f457806366d9a9a0146101fc57600080fd5b80632ade3880146101c75780633e5e3c23146101dc5780633f7286f4146101e457600080fd5b806318a4cfdc1161016b57806318a4cfdc146101995780631e63d2b9146101a15780631ed7831c146101a957600080fd5b80630a9254e4146101875780631238212c14610191575b600080fd5b61018f610298565b005b61018f610d05565b61018f6110ce565b61018f611523565b6101b161190f565b6040516101be9190617938565b60405180910390f35b6101cf611971565b6040516101be91906179d4565b6101b1611ab3565b6101b1611b13565b61018f611b73565b61018f61200a565b610204612359565b6040516101be9190617b3a565b6102196124db565b6040516101be9190617bd8565b61022e6125ab565b6040516101be9190617c4f565b61022e6126a6565b6102196127a1565b61018f612871565b61025b612aae565b60405190151581526020016101be565b61018f612b82565b6101b1612fab565b61018f61300b565b601f5461025b9060ff1681565b61018f6133c7565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680549091166112341790556040516102de9061784b565b604051809103906000f0801580156102fa573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260255491516024810193909352921660448201526103de919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261373a565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156104a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c49190617ce6565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161050890617858565b604051809103906000f080158015610524573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156105c057600080fd5b505af11580156105d4573d6000803e3d6000fd5b5050505060008060006040516105e990617865565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610625573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560205460405160129360019384936000939192169061067b90617872565b61068a96959493929190617d0f565b604051809103906000f0801580156106a6573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b15801561073d57600080fd5b505af1158015610751573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156108b857600080fd5b505af11580156108cc573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190617e04565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af11580156109d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f99190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8e9190617e04565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c9190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ceb57600080fd5b505af1158015610cff573d6000803e3d6000fd5b50505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015610d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7a9190617e26565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e999190617e04565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b158015610f7557600080fd5b505af1158015610f89573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637993c1e0915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261101d9288916001600160a01b0316908790600401617e3f565b600060405180830381600087803b15801561103757600080fd5b505af115801561104b573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c29190617e26565b9050610cff8382613759565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b99190617e26565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052602254611368926001600160a01b03909116908c9060009081908b90617e79565b60405180910390a36020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906380bd3d03906113bd90899085908790600401617ecc565b600060405180830381600087803b1580156113d757600080fd5b505af11580156113eb573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561143e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114629190617e26565b9050611478611472600188617f1a565b82613759565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156114c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ed9190617e26565b90506114f98682613759565b611519611507866001617f2d565b6027546001600160a01b031631613759565b5050505050505050565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190617e26565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561169e57600080fd5b505af11580156116b2573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547ffa62d57f000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918991600091849163fa62d57f916004808201926020929091908290030181865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190617e26565b886040516117bc96959493929190617e79565b60405180910390a3602080546026546040516001600160a01b0392831693637993c1e0936118049316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261185b9288916001600160a01b0316908790600401617e3f565b600060405180830381600087803b15801561187557600080fd5b505af1158015611889573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156118dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119009190617e26565b9050610cff6114728585617f1a565b6060601680548060200260200160405190810160405280929190818152602001828054801561196757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611949575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611aaa57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611a93578382906000526020600020018054611a0690617f40565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3290617f40565b8015611a7f5780601f10611a5457610100808354040283529160200191611a7f565b820191906000526020600020905b815481529060010190602001808311611a6257829003601f168201915b5050505050815260200190600101906119e7565b505050508152505081526020019060010190611995565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611967576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611949575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611967576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611949575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5e9190617e26565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae7600000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d5257600080fd5b505af1158015611d66573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015611dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfc9190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e5b57600080fd5b505af1158015611e6f573d6000803e3d6000fd5b50506020546040517f80bd3d030000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506380bd3d039150611ec090899085908790600401617ecc565b600060405180830381600087803b158015611eda57600080fd5b505af1158015611eee573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190617e26565b9050611f718682613759565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe69190617e26565b9050611ff28682613759565b6027546115199086906001600160a01b031631613759565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561205b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207f9190617e26565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e9190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121fd57600080fd5b505af1158015612211573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063135390f9915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526122a39287916001600160a01b031690600401617f8d565b600060405180830381600087803b1580156122bd57600080fd5b505af11580156122d1573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190617e26565b90506123548282613759565b505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611aaa57838290600052602060002090600202016040518060400160405290816000820180546123b090617f40565b80601f01602080910402602001604051908101604052809291908181526020018280546123dc90617f40565b80156124295780601f106123fe57610100808354040283529160200191612429565b820191906000526020600020905b81548152906001019060200180831161240c57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156124c357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116124705790505b5050505050815250508152602001906001019061237d565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611aaa57838290600052602060002001805461251e90617f40565b80601f016020809104026020016040519081016040528092919081815260200182805461254a90617f40565b80156125975780601f1061256c57610100808354040283529160200191612597565b820191906000526020600020905b81548152906001019060200180831161257a57829003601f168201915b5050505050815260200190600101906124ff565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611aaa5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561268e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161263b5790505b505050505081525050815260200190600101906125cf565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611aaa5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561278957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127365790505b505050505081525050815260200190600101906126ca565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611aaa5783829060005260206000200180546127e490617f40565b80601f016020809104026020016040519081016040528092919081815260200182805461281090617f40565b801561285d5780601f106128325761010080835404028352916020019161285d565b820191906000526020600020905b81548152906001019060200180831161284057829003601f168201915b5050505050815260200190600101906127c5565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561297457600080fd5b505af1158015612988573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600193508392506001600160a01b03909116907f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d39060340160408051601f1981840301815290829052612a01918790617fbf565b60405180910390a3602080546026546040516001600160a01b0392831693635d40e17893612a499316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405283856040518463ffffffff1660e01b8152600401612a7893929190617fe4565b600060405180830381600087803b158015612a9257600080fd5b505af1158015612aa6573d6000803e3d6000fd5b505050505050565b60085460009060ff1615612ac6575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7b9190617e26565b1415905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf79190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6d9190617e26565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ceb57600080fd5b505af1158015612cff573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d959190617e04565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612df457600080fd5b505af1158015612e08573d6000803e3d6000fd5b50506020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101899052602481018590526001600160a01b03909116925063441a3e709150604401600060405180830381600087803b158015612e7257600080fd5b505af1158015612e86573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efd9190617e26565b9050612f098582613759565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7e9190617e26565b9050612f8a8582613759565b602754612fa29085906001600160a01b031631613759565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611967576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611949575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561305c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130809190617e26565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190617e26565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b505060255460275460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260225461322f926001600160a01b03909116908b90600090819061800f565b60405180910390a36020546040517f441a3e7000000000000000000000000000000000000000000000000000000000815260048101879052602481018390526001600160a01b039091169063441a3e7090604401600060405180830381600087803b15801561329d57600080fd5b505af11580156132b1573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133289190617e26565b9050613338611472600187617f1a565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ad9190617e26565b90506133b98582613759565b612fa2611507856001617f2d565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343c9190617e26565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156134cd57600080fd5b505af11580156134e1573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181528282526021547ffa62d57f000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918891600091849163fa62d57f916004808201926020929091908290030181865afa1580156135b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d89190617e26565b6040516135e995949392919061800f565b60405180910390a3602080546026546040516001600160a01b039283169363135390f9936136319316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526136869287916001600160a01b031690600401617f8d565b600060405180830381600087803b1580156136a057600080fd5b505af11580156136b4573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372b9190617e26565b90506123546114728484617f1a565b600061374461787f565b61374f8484836137d8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156137c457600080fd5b505afa158015612aa6573d6000803e3d6000fd5b6000806137e58584613853565b90506138486040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613833929190618060565b6040516020818303038152906040528561385f565b9150505b9392505050565b600061384c838361388d565b60c081015151600090156138835761387c84848460c001516138a8565b905061384c565b61387c8484613a4e565b60006138998383613b39565b61384c8383602001518461385f565b6000806138b3613b49565b905060006138c18683613c1c565b905060006138d882606001518360200151856140c2565b905060006138e8838389896142d4565b905060006138f582615151565b602081015181519192509060030b156139685789826040015160405160200161391f929190618082565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261395f91600401618103565b60405180910390fd5b60006139ab6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615320565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906139fe908490600401618103565b602060405180830381865afa158015613a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3f9190617ce6565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613aa3908790600401618103565b600060405180830381865afa158015613ac0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ae891908101906181fe565b90506000613b168285604051602001613b02929190618233565b604051602081830303815290604052615520565b90506001600160a01b03811661374f57848460405160200161391f929190618262565b613b4582826000615533565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613bd090849060040161830d565b600060405180830381865afa158015613bed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c159190810190618354565b9250505090565b613c4e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613c996040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613ca285615636565b60208201526000613cb286615a1b565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613cf4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d1c9190810190618354565b86838560200151604051602001613d36949392919061839d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613d8e908590600401618103565b600060405180830381865afa158015613dab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dd39190810190618354565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613e1b9084906004016184a1565b602060405180830381865afa158015613e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5c9190617e04565b613e71578160405160200161391f91906184f3565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613eb6908490600401618585565b600060405180830381865afa158015613ed3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613efb9190810190618354565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690613f429084906004016185d7565b602060405180830381865afa158015613f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f839190617e04565b15614018576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fcd9084906004016185d7565b600060405180830381865afa158015613fea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140129190810190618354565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161403d9190618629565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614069929190617fbf565b600060405180830381865afa158015614086573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140ae9190810190618354565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816140de5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061413e5761413e618695565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061419257614192618695565b6020026020010181905250846040516020016141ae91906186c4565b604051602081830303815290604052816002815181106141d0576141d0618695565b6020026020010181905250826040516020016141ec9190618730565b6040516020818303038152906040528160038151811061420e5761420e618695565b6020026020010181905250600061422482615151565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506142b59060408051808201825260008082526020918201528151808301909252845182528085019082015290615c9e565b6142ca578560405160200161391f9190618771565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614324565b511590565b614498578260200151156143e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161395f565b8260c0015115614498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161395f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816144b157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061450c90618802565b935060ff168151811061452157614521618695565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016145729190618821565b60405160208183030381529060405282828061458d90618802565b935060ff16815181106145a2576145a2618695565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806145ef90618802565b935060ff168151811061460457614604618695565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061465190618802565b935060ff168151811061466657614666618695565b6020026020010181905250876020015182828061468290618802565b935060ff168151811061469757614697618695565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806146e490618802565b935060ff16815181106146f9576146f9618695565b60209081029190910101528751828261471181618802565b935060ff168151811061472657614726618695565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061477390618802565b935060ff168151811061478857614788618695565b602002602001018190525061479c46615cff565b82826147a781618802565b935060ff16815181106147bc576147bc618695565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061480990618802565b935060ff168151811061481e5761481e618695565b60200260200101819052508682828061483690618802565b935060ff168151811061484b5761484b618695565b60209081029190910101528551156149725760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261489c81618802565b935060ff16815181106148b1576148b1618695565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614901908990600401618103565b600060405180830381865afa15801561491e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149469190810190618354565b828261495181618802565b935060ff168151811061496657614966618695565b60200260200101819052505b846020015115614a425760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826149bb81618802565b935060ff16815181106149d0576149d0618695565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614a1d90618802565b935060ff1681518110614a3257614a32618695565b6020026020010181905250614c09565b614a7a61431f8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614b0d5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614abd81618802565b935060ff1681518110614ad257614ad2618695565b60200260200101819052508460a00151604051602001614af291906186c4565b604051602081830303815290604052828280614a1d90618802565b8460c00151158015614b50575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614b4e90511590565b155b15614c095760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614b9481618802565b935060ff1681518110614ba957614ba9618695565b6020026020010181905250614bbd88615d9f565b604051602001614bcd91906186c4565b604051602081830303815290604052828280614be890618802565b935060ff1681518110614bfd57614bfd618695565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614c3d90511590565b614cd25760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614c8081618802565b935060ff1681518110614c9557614c95618695565b60200260200101819052508460400151828280614cb190618802565b935060ff1681518110614cc657614cc6618695565b60200260200101819052505b606085015115614df35760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614d1b81618802565b935060ff1681518110614d3057614d30618695565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614d9f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dc79190810190618354565b8282614dd281618802565b935060ff1681518110614de757614de7618695565b60200260200101819052505b60e08501515115614e9a5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614e3d81618802565b935060ff1681518110614e5257614e52618695565b6020026020010181905250614e6e8560e0015160000151615cff565b8282614e7981618802565b935060ff1681518110614e8e57614e8e618695565b60200260200101819052505b60e08501516020015115614f445760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ee781618802565b935060ff1681518110614efc57614efc618695565b6020026020010181905250614f188560e0015160200151615cff565b8282614f2381618802565b935060ff1681518110614f3857614f38618695565b60200260200101819052505b60e08501516040015115614fee5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282614f9181618802565b935060ff1681518110614fa657614fa6618695565b6020026020010181905250614fc28560e0015160400151615cff565b8282614fcd81618802565b935060ff1681518110614fe257614fe2618695565b60200260200101819052505b60e085015160600151156150985760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261503b81618802565b935060ff168151811061505057615050618695565b602002602001018190525061506c8560e0015160600151615cff565b828261507781618802565b935060ff168151811061508c5761508c618695565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156150b6576150b6618116565b6040519080825280602002602001820160405280156150e957816020015b60608152602001906001900390816150d45790505b50905060005b8260ff168160ff16101561514257838160ff168151811061511257615112618695565b6020026020010151828260ff168151811061512f5761512f618695565b60209081029190910101526001016150ef565b5093505050505b949350505050565b6151786040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916151fe9186910161888c565b600060405180830381865afa15801561521b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152439190810190618354565b90506000615251868361688e565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016152819190617bd8565b6000604051808303816000875af11580156152a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152c891908101906188d3565b805190915060030b158015906152e15750602081015151155b80156152f05750604081015151155b156142ca578160008151811061530857615308618695565b602002602001015160405160200161391f9190618989565b606060006153558560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061538c9082905b906169e3565b156154e957600061540982615403846153fd6153cf8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616a0a565b90616a6c565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061546d9082906169e3565b156154d757604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154d4905b8290616af1565b90505b6154e081616b17565b9250505061384c565b821561550257848460405160200161391f929190618b75565b505060408051602081019091526000815261384c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561554257505050565b600061554f848484616b80565b9050600061555c82615151565b602081015181519192509060030b1580156155f85750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155f890604080518082018252600080825260209182015281518083019092528451825280850190820152615386565b1561560557505050505050565b6040820151511561562557816040015160405160200161391f9190618c1c565b8060405160200161391f9190618c7a565b6060600061566b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156d0905b8290615c9e565b1561573f57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261384c9061573a90839061711b565b616b17565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157a1905b82906171a5565b60010361586e57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615807906154cd565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261384c9061573a905b8390616af1565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158cd906156c9565b15615a0457604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061593590839061723f565b9050600081600183516159489190617f1a565b8151811061595857615958618695565b602002602001015190506159fb61573a6159ce6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061711b565b95945050505050565b8260405160200161391f9190618ce5565b50919050565b60606000615a508360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ab2906156c9565b15615ac05761384c81616b17565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b1f9061579a565b600103615b8957604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261384c9061573a90615867565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615be8906156c9565b15615a0457604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615c5090839061723f565b9050600181511115615c8c578060028251615c6b9190617f1a565b81518110615c7b57615c7b618695565b602002602001015192505050919050565b508260405160200161391f9190618ce5565b805182516000911115615cb357506000613753565b81518351602085015160009291615cc991617f2d565b615cd39190617f1a565b905082602001518103615cea576001915050613753565b82516020840151819020912014905092915050565b60606000615d0c836172e4565b600101905060008167ffffffffffffffff811115615d2c57615d2c618116565b6040519080825280601f01601f191660200182016040528015615d56576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615d6057509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615e2b905b82906173c6565b15615e6b57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615eca90615e24565b15615f0a57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f6990615e24565b15615fa957505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261600890615e24565b8061606d5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261606d90615e24565b156160ad57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261610c90615e24565b806161715750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261617190615e24565b156161b157505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621090615e24565b806162755750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261627590615e24565b156162b557505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261631490615e24565b806163795750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261637990615e24565b156163b957505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261641890615e24565b1561645857505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164b790615e24565b156164f757505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261655690615e24565b1561659657505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165f590615e24565b1561663557505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261669490615e24565b156166d457505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261673390615e24565b806167985750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261679890615e24565b156167d857505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261683790615e24565b1561687757505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161391f9290602001618dc3565b60608060005b845181101561691957818582815181106168b0576168b0618695565b60200260200101516040516020016168c9929190618233565b6040516020818303038152906040529150600185516168e89190617f1a565b811461691157816040516020016168ff9190618f2c565b60405160208183030381529060405291505b600101616894565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616932579050509050838160008151811061695d5761695d618695565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106169b1576169b1618695565b602002602001018190525081816002815181106169d0576169d0618695565b6020908102919091010152949350505050565b6020808301518351835192840151600093616a0192918491906173da565b14159392505050565b60408051808201909152600080825260208201526000616a3c84600001518560200151856000015186602001516174eb565b9050836020015181616a4e9190617f1a565b84518590616a5d908390617f1a565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616a91575081613753565b6020808301519084015160019114616ab85750815160208481015190840151829020919020145b8015616ae957825184518590616acf908390617f1a565b9052508251602085018051616ae5908390617f2d565b9052505b509192915050565b6040805180820190915260008082526020820152616b1083838361760b565b5092915050565b60606000826000015167ffffffffffffffff811115616b3857616b38618116565b6040519080825280601f01601f191660200182016040528015616b62576020820181803683370190505b5090506000602082019050616b1081856020015186600001516176b6565b60606000616b8c613b49565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616ba957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616c0490618802565b935060ff1681518110616c1957616c19618695565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616c6a9190618f6d565b604051602081830303815290604052828280616c8590618802565b935060ff1681518110616c9a57616c9a618695565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616ce790618802565b935060ff1681518110616cfc57616cfc618695565b602002602001018190525082604051602001616d189190618730565b604051602081830303815290604052828280616d3390618802565b935060ff1681518110616d4857616d48618695565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616d9590618802565b935060ff1681518110616daa57616daa618695565b6020026020010181905250616dbf8784617730565b8282616dca81618802565b935060ff1681518110616ddf57616ddf618695565b602090810291909101015285515115616e8b5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616e3181618802565b935060ff1681518110616e4657616e46618695565b6020026020010181905250616e5f866000015184617730565b8282616e6a81618802565b935060ff1681518110616e7f57616e7f618695565b60200260200101819052505b856080015115616ef95760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616ed481618802565b935060ff1681518110616ee957616ee9618695565b6020026020010181905250616f5f565b8415616f5f5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282616f3e81618802565b935060ff1681518110616f5357616f53618695565b60200260200101819052505b60408601515115616ffb5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282616fa981618802565b935060ff1681518110616fbe57616fbe618695565b60200260200101819052508560400151828280616fda90618802565b935060ff1681518110616fef57616fef618695565b60200260200101819052505b8560600151156170655760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261704481618802565b935060ff168151811061705957617059618695565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561708357617083618116565b6040519080825280602002602001820160405280156170b657816020015b60608152602001906001900390816170a15790505b50905060005b8260ff168160ff16101561710f57838160ff16815181106170df576170df618695565b6020026020010151828260ff16815181106170fc576170fc618695565b60209081029190910101526001016170bc565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617140575081613753565b8151835160208501516000929161715691617f2d565b6171609190617f1a565b60208401519091506001908214617181575082516020840151819020908220145b801561719c57835185518690617198908390617f1a565b9052505b50929392505050565b60008082600001516171c985600001518660200151866000015187602001516174eb565b6171d39190617f2d565b90505b835160208501516171e79190617f2d565b8111616b1057816171f781618fb2565b925050826000015161722e8560200151836172129190617f1a565b865161721e9190617f1a565b83866000015187602001516174eb565b6172389190617f2d565b90506171d6565b6060600061724d84846171a5565b617258906001617f2d565b67ffffffffffffffff81111561727057617270618116565b6040519080825280602002602001820160405280156172a357816020015b606081526020019060019003908161728e5790505b50905060005b8151811015615518576172bf61573a8686616af1565b8282815181106172d1576172d1618695565b60209081029190910101526001016172a9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061732d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617359576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061737757662386f26fc10000830492506010015b6305f5e100831061738f576305f5e100830492506008015b61271083106173a357612710830492506004015b606483106173b5576064830492506002015b600a83106137535760010192915050565b60006173d28383617770565b159392505050565b6000808584116174e1576020841161748d5760008415617425576001617401866020617f1a565b61740c906008618fcc565b6174179060026190ca565b6174219190617f1a565b1990505b83518116856174348989617f2d565b61743e9190617f1a565b805190935082165b818114617478578784116174605787945050505050615149565b8361746a816190d6565b945050828451169050617446565b6174828785617f2d565b945050505050615149565b83832061749a8588617f1a565b6174a49087617f2d565b91505b8582106174df578482208082036174cc576174c28684617f2d565b9350505050615149565b6174d7600184617f1a565b9250506174a7565b505b5092949350505050565b600083818685116175f657602085116175a55760008515617537576001617513876020617f1a565b61751e906008618fcc565b6175299060026190ca565b6175339190617f1a565b1990505b845181166000876175488b8b617f2d565b6175529190617f1a565b855190915083165b8281146175975781861061757f576175728b8b617f2d565b9650505050505050615149565b8561758981618fb2565b96505083865116905061755a565b859650505050505050615149565b508383206000905b6175b78689617f1a565b82116175f4578583208082036175d35783945050505050615149565b6175de600185617f2d565b93505081806175ec90618fb2565b9250506175ad565b505b6176008787617f2d565b979650505050505050565b6040805180820190915260008082526020820152600061763d85600001518660200151866000015187602001516174eb565b6020808701805191860191909152519091506176599082617f1a565b83528451602086015161766c9190617f2d565b810361767b57600085526176ad565b835183516176899190617f2d565b85518690617698908390617f1a565b90525083516176a79082617f2d565b60208601525b50909392505050565b602081106176ee57815183526176cd602084617f2d565b92506176da602083617f2d565b91506176e7602082617f1a565b90506176b6565b600019811561771d576001617704836020617f1a565b617710906101006190ca565b61771a9190617f1a565b90505b9151835183169219169190911790915250565b6060600061773e8484613c1c565b8051602080830151604051939450617758939091016190ed565b60405160208183030381529060405291505092915050565b8151815160009190811115617783575081515b6020808501519084015160005b8381101561783c578251825180821461780c5760001960208710156177eb576001846177bd896020617f1a565b6177c79190617f2d565b6177d2906008618fcc565b6177dd9060026190ca565b6177e79190617f1a565b1990505b81811683821681810391146178095797506137539650505050505050565b50505b617817602086617f2d565b9450617824602085617f2d565b935050506020816178359190617f2d565b9050617790565b50845186516142ca9190619145565b610b678061916683390190565b61053f80619ccd83390190565b61106f8061a20c83390190565b611bb58061b27b83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016178c26178c7565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016178c26040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156179795783516001600160a01b0316835260209384019390920191600101617952565b509095945050505050565b60005b8381101561799f578181015183820152602001617987565b50506000910152565b600081518084526179c0816020860160208601617984565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617ab6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617aa08486516179a8565b6020958601959094509290920191600101617a66565b5091975050506020948501949290920191506001016179fc565b50929695505050505050565b600081518084526020840193506020830160005b82811015617b305781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617af0565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617ba660408801826179a8565b9050602082015191508681036020880152617bc18183617adc565b965050506020938401939190910190600101617b62565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617c3a8583516179a8565b94506020938401939190910190600101617c00565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ad0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617cd06040870182617adc565b9550506020938401939190910190600101617c77565b600060208284031215617cf857600080fd5b81516001600160a01b038116811461384c57600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617dc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617dea60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215617e1657600080fd5b8151801515811461384c57600080fd5b600060208284031215617e3857600080fd5b5051919050565b608081526000617e5260808301876179a8565b8560208401526001600160a01b0385166040840152828103606084015261760081856179a8565b60c081526000617e8c60c08301896179a8565b6001600160a01b038816602084015286604084015285606084015284608084015282810360a0840152617ebf81856179a8565b9998505050505050505050565b8381528260208201526060604082015260006159fb60608301846179a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561375357613753617eeb565b8082018082111561375357613753617eeb565b600181811c90821680617f5457607f821691505b602082108103615a15577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b606081526000617fa060608301866179a8565b90508360208301526001600160a01b0383166040830152949350505050565b604081526000617fd260408301856179a8565b828103602084015261384881856179a8565b606081526000617ff760608301866179a8565b84602084015282810360408401526142ca81856179a8565b60c08152600061802260c08301886179a8565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b6001600160a01b038316815260406020820152600061514960408301846179a8565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180ba81601a850160208801617984565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516180f781601c840160208801617984565b01601c01949350505050565b60208152600061384c60208301846179a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561816857618168618116565b60405290565b60008067ffffffffffffffff84111561818957618189618116565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156181b8576181b8618116565b6040528381529050808284018510156181d057600080fd5b615518846020830185617984565b600082601f8301126181ef57600080fd5b61384c8383516020850161816e565b60006020828403121561821057600080fd5b815167ffffffffffffffff81111561822757600080fd5b61374f848285016181de565b60008351618245818460208801617984565b835190830190618259818360208801617984565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161829a81601a850160208801617984565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516182d7816033840160208801617984565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061384c60808301846179a8565b60006020828403121561836657600080fd5b815167ffffffffffffffff81111561837d57600080fd5b8201601f8101841361838e57600080fd5b61374f8482516020840161816e565b600085516183af818460208a01617984565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516183e9816001840160208a01617984565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618427816002840160208901617984565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618469816002840160208801617984565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184b460408301846179a8565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161852b81601f850160208701617984565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061859860408301846179a8565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006185ea60408301846179a8565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618661816014850160208701617984565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516186fc816001850160208701617984565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618742818460208701617984565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516187f581604b850160208701617984565b91909101604b0192915050565b600060ff821660ff810361881857618818617eeb565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161887f816029850160208701617984565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061384c60808301846179a8565b6000602082840312156188e557600080fd5b815167ffffffffffffffff8111156188fc57600080fd5b82016060818503121561890e57600080fd5b618916618145565b81518060030b811461892757600080fd5b8152602082015167ffffffffffffffff81111561894357600080fd5b61894f868285016181de565b602083015250604082015167ffffffffffffffff81111561896f57600080fd5b61897b868285016181de565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516189e7816021850160208701617984565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618bd3816021850160208801617984565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c1081602e840160208801617984565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161887f816029850160208701617984565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618cd8816022850160208701617984565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618d1d81600e850160208701617984565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618dfb816018850160208801617984565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618e3881601c840160208801617984565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618f3e818460208701617984565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618fa581601c850160208701617984565b91909101601c0192915050565b60006000198203618fc557618fc5617eeb565b5060010190565b808202811582820484141761375357613753617eeb565b6001815b600184111561901e5780850481111561900257619002617eeb565b600184161561901057908102905b60019390931c928002618fe7565b935093915050565b60008261903557506001613753565b8161904257506000613753565b816001811461905857600281146190625761907e565b6001915050613753565b60ff84111561907357619073617eeb565b50506001821b613753565b5060208310610133831016604e8410600b84101617156190a1575081810a613753565b6190ae6000198484618fe3565b80600019048211156190c2576190c2617eeb565b029392505050565b600061384c8383619026565b6000816190e5576190e5617eeb565b506000190190565b600083516190ff818460208801617984565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619139816001840160208801617984565b01600101949350505050565b8181036000831280158383131683831282161715616b1057616b10617eeb56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220a43967e13d8e35f364f3cdb6ecac268084c561ca3e6d91a1f4a54b41cd42ccbb64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb5380380611bb583398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60076100aa8982610360565b5060086100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c051611744610471600039600061024f015260006103440152600081816102f501528181610ad30152610bd901526117446000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b71461044e578063f687d12a14610457578063fa62d57f1461046a57600080fd5b8063d9eeebed146103c1578063dd62ed3e146103f5578063eddeb1231461043b57600080fd5b8063c7012626116100bd578063c701262614610386578063c835d7cc14610399578063ccc77599146103ae57600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a08231146102ba57806385e1f4d0146102f05780638b851b951461031757600080fd5b80633ce4a5bc1461027957806342966c681461029457806347e7ef24146102a757600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610473565b6040516101b29190611323565b60405180910390f35b6101ce6101c9366004611362565b610505565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe36600461138e565b61051c565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce6102a23660046113cf565b6105b3565b6101ce6102b5366004611362565b6105c7565b6101e26102c83660046113e8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071b565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611405565b6101ce610381366004611362565b61072a565b6101ce610394366004611475565b610737565b6103ac6103a73660046113e8565b610886565b005b6103ac6103bc3660046113e8565b61099a565b6103c9610aa7565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e261040336600461156d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b6103ac6104493660046113cf565b610cc5565b6101e260025481565b6103ac6104653660046113cf565b610d47565b6101e260035481565b606060078054610482906115a6565b80601f01602080910402602001604051908101604052809291908181526020018280546104ae906115a6565b80156104fb5780601f106104d0576101008083540402835291602001916104fb565b820191906000526020600020905b8154815290600101906020018083116104de57829003601f168201915b5050505050905090565b6000610512338484610dc9565b5060015b92915050565b6000610529848484610ed2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610594576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a885336105a38685611628565b610dc9565b506001949350505050565b60006105bf338361108d565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610605575060005473ffffffffffffffffffffffffffffffffffffffff163314155b8015610629575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610660576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066a83836111cf565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070a91869061163b565b60405180910390a250600192915050565b606060088054610482906115a6565b6000610512338484610ed2565b6000806000610744610aa7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa919061165d565b610830576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083a338561108d565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955916108739189918991879161167f565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610920576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109e7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a34576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a3879060200161098f565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5e91906116ae565b905073ffffffffffffffffffffffffffffffffffffffff8116610bad576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6091906116cb565b905080600003610c9c576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610caf91906116e4565b610cb991906116fb565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d12576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f9060200161098f565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d94576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a9060200161098f565b73ffffffffffffffffffffffffffffffffffffffff8316610e16576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e63576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f1f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f6c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610fcc576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd68282611628565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526004602052604080822093909355908516815290812080548492906110199084906116fb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161107f91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110da576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020548181101561113a576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111448282611628565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120919091556006805484929061117f908490611628565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec5565b73ffffffffffffffffffffffffffffffffffffffff821661121c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806006600082825461122e91906116fb565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906112689084906116fb565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e5576020818501810151868301820152016112c9565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133660208301846112bf565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461135f57600080fd5b50565b6000806040838503121561137557600080fd5b82356113808161133d565b946020939093013593505050565b6000806000606084860312156113a357600080fd5b83356113ae8161133d565b925060208401356113be8161133d565b929592945050506040919091013590565b6000602082840312156113e157600080fd5b5035919050565b6000602082840312156113fa57600080fd5b81356113368161133d565b6020810160038310611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148857600080fd5b823567ffffffffffffffff81111561149f57600080fd5b8301601f810185136114b057600080fd5b803567ffffffffffffffff8111156114ca576114ca611446565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153657611536611446565b60405281815282820160200187101561154e57600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158057600080fd5b823561158b8161133d565b9150602083013561159b8161133d565b809150509250929050565b600181811c908216806115ba57607f821691505b6020821081036115f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610516576105166115f9565b60408152600061164e60408301856112bf565b90508260208301529392505050565b60006020828403121561166f57600080fd5b8151801515811461133657600080fd5b60808152600061169260808301876112bf565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c057600080fd5b81516113368161133d565b6000602082840312156116dd57600080fd5b5051919050565b8082028115828204841417610516576105166115f9565b80820180821115610516576105166115f956fea264697066735822122037649c2055bfb791d5356fcc351c4af595c644cc42f4d0379388cd4eda6b0fd864736f6c634300081a0033a2646970667358221220bbf6c41f1ca80136ab783d322a5d17070a5ee9109a981d84e000ec2f330eedd364736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index cdd4bae1..a2776242 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061dffd8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80637f924c4e11610145578063c3248272116100bd578063e63ab1e91161008c578063f5a3573311610071578063f5a35733146103cf578063fa7626d4146103d7578063fc79171b146103e457600080fd5b8063e63ab1e914610392578063eba3c49c146103c757600080fd5b8063c324827214610372578063cced12c71461037a578063df690b9a14610382578063e20c9f711461038a57600080fd5b8063aed71d9711610114578063b5508aa9116100f9578063b5508aa91461034a578063ba414fa614610352578063c27253181461036a57600080fd5b8063aed71d971461033a578063b0464fdc1461034257600080fd5b80637f924c4e1461030057806385226c8114610308578063916a17c61461031d57806396d9d8761461033257600080fd5b806331d09956116101d857806344b2a40b116101a7578063597cfeb01161018c578063597cfeb0146102db57806366d9a9a0146102e3578063720b9aa9146102f857600080fd5b806344b2a40b146102cb578063461fc5af146102d357600080fd5b806331d09956146102ab5780633a25c460146102b35780633e5e3c23146102bb5780633f7286f4146102c357600080fd5b80631c785a14116102145780631c785a14146102685780631ed7831c146102705780631fe687971461028e5780632ade38801461029657600080fd5b806309f080da146102465780630a9254e414610250578063104b352214610258578063198d5ca414610260575b600080fd5b61024e6103ec565b005b61024e6105e0565b61024e61104d565b61024e61123f565b61024e6114f9565b610278611e42565b6040516102859190618ba0565b60405180910390f35b61024e611ea4565b61029e6123d3565b6040516102859190618c3c565b61024e612515565b61024e6126d4565b61027861288f565b6102786128ef565b61024e61294f565b61024e612ad7565b61024e612c95565b6102eb61306b565b6040516102859190618da2565b61024e6131ed565b61024e613460565b6103106134b2565b6040516102859190618e40565b610325613582565b6040516102859190618eb7565b61024e61367d565b61024e6137d0565b610325613adc565b610310613bd7565b61035a613ca7565b6040519015158152602001610285565b61024e613d7b565b61024e613f34565b61024e6140ed565b61024e6142d8565b610278614496565b6103b97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610285565b61024e6144f6565b61024e6146b4565b601f5461035a9060ff1681565b61024e61486b565b60006040516020016103fd90618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156104c757600080fd5b505af11580156104db573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561053857600080fd5b505af115801561054c573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af6596794506105aa9387938116926001929116908990600401618fc9565b600060405180830381600087803b1580156105c457600080fd5b505af11580156105d8573d6000803e3d6000fd5b505050505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161062690618ab3565b604051809103906000f080158015610642573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610726919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526149a2565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c919061901e565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161085090618ac0565b604051809103906000f08015801561086c573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561090857600080fd5b505af115801561091c573d6000803e3d6000fd5b50505050600080600060405161093190618acd565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561096d573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556020546040516012936001938493600093919216906109c390618ada565b6109d296959493929190619047565b604051809103906000f0801580156109ee573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610a8557600080fd5b505af1158015610a99573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610b0357600080fd5b505af1158015610b17573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c0057600080fd5b505af1158015610c14573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cac919061913c565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d41919061913c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed6919061913c565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f2857600080fd5b505af1158015610f3c573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd4919061913c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b50505050565b60405160019060009061106290602001618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561112c57600080fd5b505af1158015611140573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561119d57600080fd5b505af11580156111b1573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506112089286928992911690889060040161915e565b600060405180830381600087803b15801561122257600080fd5b505af1158015611236573d6000803e3d6000fd5b50505050505050565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190619198565b90506112da6000826149c1565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561133357600080fd5b505af1158015611347573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156113b757600080fd5b505af11580156113cb573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e79190619198565b90506114f46000826149c1565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561155257600080fd5b505af1158015611566573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061165191906004016191b1565b600060405180830381600087803b15801561166b57600080fd5b505af115801561167f573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116d357600080fd5b505af11580156116e7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561174457600080fd5b505af1158015611758573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061184391906004016191b1565b600060405180830381600087803b15801561185d57600080fd5b505af1158015611871573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118c557600080fd5b505af11580156118d9573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561199e57600080fd5b505af11580156119b2573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611a2557600080fd5b505af1158015611a39573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611b2257600080fd5b505af1158015611b36573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611b9357600080fd5b505af1158015611ba7573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bfb57600080fd5b505af1158015611c0f573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca09190619198565b9050611cad6000826149c1565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d0657600080fd5b505af1158015611d1a573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611d9257600080fd5b505af1158015611da6573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e369190619198565b90506114f483826149c1565b60606016805480602002602001604051908101604052809291908181526020018280548015611e9a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e7c575b5050505050905090565b6022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f329190619198565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190619198565b6024546040519192506001600160a01b03163190600090611fe490602001618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156120d257600080fd5b505af11580156120e6573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061214193506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612171936001600160a01b03928316928c9216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d257600080fd5b505af11580156121e6573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061223d9286928c92911690889060040161915e565b600060405180830381600087803b15801561225757600080fd5b505af115801561226b573d6000803e3d6000fd5b50506022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156122d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fb9190619198565b905061231061230a8888619266565b826149c1565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561237a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239e9190619198565b90506123aa86826149c1565b6123c96123b78987619279565b6024546001600160a01b0316316149c1565b5050505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561250c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156124f55783829060005260206000200180546124689061928c565b80601f01602080910402602001604051908101604052809291908181526020018280546124949061928c565b80156124e15780601f106124b6576101008083540402835291602001916124e1565b820191906000526020600020905b8154815290600101906020018083116124c457829003601f168201915b505050505081526020019060010190612449565b5050505081525050815260200190600101906123f7565b50505050905090565b600060405160200161252690618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156125f057600080fd5b505af1158015612604573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f500494506105aa9387938116926001929116908990600401618fc9565b6040516001906000906126e990602001618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156127b357600080fd5b505af11580156127c7573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561282457600080fd5b505af1158015612838573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506112089286928992911690889060040161915e565b60606018805480602002602001604051908101604052809291908181526020018280548015611e9a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611e7c575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611e9a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611e7c575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129ab57600080fd5b505af11580156129bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a2f57600080fd5b505af1158015612a43573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612abc57600080fd5b505af1158015612ad0573d6000803e3d6000fd5b5050505050565b6000604051602001612ae890618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612bb257600080fd5b505af1158015612bc6573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c2357600080fd5b505af1158015612c37573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506105aa9387938116926001929116908990600401618fc9565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015612cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d229190619198565b9050612d2f6000826149c1565b6000604051602001612d4090618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612e2e57600080fd5b505af1158015612e42573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450612e9d93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612ece936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f2f57600080fd5b505af1158015612f43573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450612fa19387938116926001929116908990600401618fc9565b600060405180830381600087803b158015612fbb57600080fd5b505af1158015612fcf573d6000803e3d6000fd5b5050602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa15801561303a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305e9190619198565b90506110476001826149c1565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561250c57838290600052602060002090600202016040518060400160405290816000820180546130c29061928c565b80601f01602080910402602001604051908101604052809291908181526020018280546130ee9061928c565b801561313b5780601f106131105761010080835404028352916020019161313b565b820191906000526020600020905b81548152906001019060200180831161311e57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156131d557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116131825790505b5050505050815250508152602001906001019061308f565b60006040516020016131fe90618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061335b93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461338c936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156133ee57600080fd5b505af1158015613402573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b94506105aa9387938116926001929116908990600401618fc9565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401611c5f565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561250c5783829060005260206000200180546134f59061928c565b80601f01602080910402602001604051908101604052809291908181526020018280546135219061928c565b801561356e5780601f106135435761010080835404028352916020019161356e565b820191906000526020600020905b81548152906001019060200180831161355157829003601f168201915b5050505050815260200190600101906134d6565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561250c5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561366557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116136125790505b505050505081525050815260200190600101906135a6565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d957600080fd5b505af11580156136ed573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561375d57600080fd5b505af1158015613771573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612aa2565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385d9190619198565b905061386a6000826149c1565b600060405160200161387b90618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561396957600080fd5b505af115801561397d573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e9994894506139d893506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613a09936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a6a57600080fd5b505af1158015613a7e573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450612fa19387938116926001929116908990600401618fc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561250c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613bbf57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411613b6c5790505b50505050508152505081526020019060010190613b00565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561250c578382906000526020600020018054613c1a9061928c565b80601f0160208091040260200160405190810160405280929190818152602001828054613c469061928c565b8015613c935780601f10613c6857610100808354040283529160200191613c93565b820191906000526020600020905b815481529060010190602001808311613c7657829003601f168201915b505050505081526020019060010190613bfb565b60085460009060ff1615613cbf575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d749190619198565b1415905090565b6000604051602001613d8c90618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015613e5657600080fd5b505af1158015613e6a573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613ec757600080fd5b505af1158015613edb573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506105aa928692169060019086908990600401618fc9565b6000604051602001613f4590618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561400f57600080fd5b505af1158015614023573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561408057600080fd5b505af1158015614094573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af6596793506105aa928692169060019086908990600401618fc9565b60006040516020016140fe90618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156141ec57600080fd5b505af1158015614200573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061425b93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461428c936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612648565b60006040516020016142e990618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561442457600080fd5b505af1158015614438573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506105aa9387938116926001929116908990600401618fc9565b60606015805480602002602001604051908101604052809291908181526020018280548015611e9a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611e7c575050505050905090565b600060405160200161450790618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156145d157600080fd5b505af11580156145e5573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561464257600080fd5b505af1158015614656573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af6596794506105aa9387938116926001929116908990600401618fc9565b6040516001906000906146c990602001618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561479357600080fd5b505af11580156147a7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561480457600080fd5b505af1158015614818573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061120890849087908590889060040161915e565b600060405160200161487c90618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561494657600080fd5b505af115801561495a573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016133d4565b60006149ac618ae7565b6149b7848483614a40565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614a2c57600080fd5b505afa1580156105d8573d6000803e3d6000fd5b600080614a4d8584614abb565b9050614ab06040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614a9b9291906192d9565b60405160208183030381529060405285614ac7565b9150505b9392505050565b6000614ab48383614af5565b60c08101515160009015614aeb57614ae484848460c00151614b10565b9050614ab4565b614ae48484614cb6565b6000614b018383614da1565b614ab483836020015184614ac7565b600080614b1b614db1565b90506000614b298683614e84565b90506000614b40826060015183602001518561532a565b90506000614b508383898961553c565b90506000614b5d826163b9565b602081015181519192509060030b15614bd057898260400151604051602001614b879291906192fb565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614bc7916004016191b1565b60405180910390fd5b6000614c136040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616588565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614c669084906004016191b1565b602060405180830381865afa158015614c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ca7919061901e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614d0b9087906004016191b1565b600060405180830381865afa158015614d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d509190810190619464565b90506000614d7e8285604051602001614d6a929190619499565b604051602081830303815290604052616788565b90506001600160a01b0381166149b7578484604051602001614b879291906194c8565b614dad8282600061679b565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614e38908490600401619573565b600060405180830381865afa158015614e55573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e7d91908101906195ba565b9250505090565b614eb66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614f016040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614f0a8561689e565b60208201526000614f1a86616c83565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614f5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f8491908101906195ba565b86838560200151604051602001614f9e9493929190619603565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614ff69085906004016191b1565b600060405180830381865afa158015615013573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261503b91908101906195ba565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615083908490600401619707565b602060405180830381865afa1580156150a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150c4919061913c565b6150d95781604051602001614b879190619759565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061511e9084906004016197eb565b600060405180830381865afa15801561513b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261516391908101906195ba565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906151aa90849060040161983d565b602060405180830381865afa1580156151c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151eb919061913c565b15615280576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061523590849060040161983d565b600060405180830381865afa158015615252573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261527a91908101906195ba565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016152a5919061988f565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016152d19291906198fb565b600060405180830381865afa1580156152ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261531691908101906195ba565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816153465790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106153a6576153a6619920565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106153fa576153fa619920565b602002602001018190525084604051602001615416919061994f565b6040516020818303038152906040528160028151811061543857615438619920565b60200260200101819052508260405160200161545491906199bb565b6040516020818303038152906040528160038151811061547657615476619920565b6020026020010181905250600061548c826163b9565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061551d9060408051808201825260008082526020918201528151808301909252845182528085019082015290616f06565b6155325785604051602001614b8791906199fc565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561558c565b511590565b61570057826020015115615648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614bc7565b8260c0015115615700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614bc7565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161571957905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061577490619a8d565b935060ff168151811061578957615789619920565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016157da9190619aac565b6040516020818303038152906040528282806157f590619a8d565b935060ff168151811061580a5761580a619920565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061585790619a8d565b935060ff168151811061586c5761586c619920565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806158b990619a8d565b935060ff16815181106158ce576158ce619920565b602002602001018190525087602001518282806158ea90619a8d565b935060ff16815181106158ff576158ff619920565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061594c90619a8d565b935060ff168151811061596157615961619920565b60209081029190910101528751828261597981619a8d565b935060ff168151811061598e5761598e619920565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806159db90619a8d565b935060ff16815181106159f0576159f0619920565b6020026020010181905250615a0446616f67565b8282615a0f81619a8d565b935060ff1681518110615a2457615a24619920565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615a7190619a8d565b935060ff1681518110615a8657615a86619920565b602002602001018190525086828280615a9e90619a8d565b935060ff1681518110615ab357615ab3619920565b6020908102919091010152855115615bda5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615b0481619a8d565b935060ff1681518110615b1957615b19619920565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615b699089906004016191b1565b600060405180830381865afa158015615b86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bae91908101906195ba565b8282615bb981619a8d565b935060ff1681518110615bce57615bce619920565b60200260200101819052505b846020015115615caa5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615c2381619a8d565b935060ff1681518110615c3857615c38619920565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615c8590619a8d565b935060ff1681518110615c9a57615c9a619920565b6020026020010181905250615e71565b615ce26155878660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615d755760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615d2581619a8d565b935060ff1681518110615d3a57615d3a619920565b60200260200101819052508460a00151604051602001615d5a919061994f565b604051602081830303815290604052828280615c8590619a8d565b8460c00151158015615db8575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615db690511590565b155b15615e715760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615dfc81619a8d565b935060ff1681518110615e1157615e11619920565b6020026020010181905250615e2588617007565b604051602001615e35919061994f565b604051602081830303815290604052828280615e5090619a8d565b935060ff1681518110615e6557615e65619920565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615ea590511590565b615f3a5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615ee881619a8d565b935060ff1681518110615efd57615efd619920565b60200260200101819052508460400151828280615f1990619a8d565b935060ff1681518110615f2e57615f2e619920565b60200260200101819052505b60608501511561605b5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615f8381619a8d565b935060ff1681518110615f9857615f98619920565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616007573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261602f91908101906195ba565b828261603a81619a8d565b935060ff168151811061604f5761604f619920565b60200260200101819052505b60e085015151156161025760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826160a581619a8d565b935060ff16815181106160ba576160ba619920565b60200260200101819052506160d68560e0015160000151616f67565b82826160e181619a8d565b935060ff16815181106160f6576160f6619920565b60200260200101819052505b60e085015160200151156161ac5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261614f81619a8d565b935060ff168151811061616457616164619920565b60200260200101819052506161808560e0015160200151616f67565b828261618b81619a8d565b935060ff16815181106161a0576161a0619920565b60200260200101819052505b60e085015160400151156162565760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826161f981619a8d565b935060ff168151811061620e5761620e619920565b602002602001018190525061622a8560e0015160400151616f67565b828261623581619a8d565b935060ff168151811061624a5761624a619920565b60200260200101819052505b60e085015160600151156163005760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826162a381619a8d565b935060ff16815181106162b8576162b8619920565b60200260200101819052506162d48560e0015160600151616f67565b82826162df81619a8d565b935060ff16815181106162f4576162f4619920565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561631e5761631e61937c565b60405190808252806020026020018201604052801561635157816020015b606081526020019060019003908161633c5790505b50905060005b8260ff168160ff1610156163aa57838160ff168151811061637a5761637a619920565b6020026020010151828260ff168151811061639757616397619920565b6020908102919091010152600101616357565b5093505050505b949350505050565b6163e06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161646691869101619b17565b600060405180830381865afa158015616483573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ab91908101906195ba565b905060006164b98683617af6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016164e99190618e40565b6000604051808303816000875af1158015616508573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165309190810190619b5e565b805190915060030b158015906165495750602081015151155b80156165585750604081015151155b15615532578160008151811061657057616570619920565b6020026020010151604051602001614b879190619c14565b606060006165bd8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506165f49082905b90617c4b565b156167515760006166718261666b846166656166378a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617c72565b90617cd4565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506166d5908290617c4b565b1561673f57604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261673c905b8290617d59565b90505b61674881617d7f565b92505050614ab4565b821561676a578484604051602001614b87929190619e00565b5050604080516020810190915260008152614ab4565b509392505050565b6000808251602084016000f09392505050565b8160a00151156167aa57505050565b60006167b7848484617de8565b905060006167c4826163b9565b602081015181519192509060030b1580156168605750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616860906040805180820182526000808252602091820152815180830190925284518252808501908201526165ee565b1561686d57505050505050565b6040820151511561688d578160400151604051602001614b879190619ea7565b80604051602001614b879190619f05565b606060006168d38360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616938905b8290616f06565b156169a757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ab4906169a2908390618383565b617d7f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a09905b829061840d565b600103616ad657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a6f90616735565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ab4906169a2905b8390617d59565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3590616931565b15616c6c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616b9d9083906184a7565b905060008160018351616bb09190619266565b81518110616bc057616bc0619920565b60200260200101519050616c636169a2616c366040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618383565b95945050505050565b82604051602001614b879190619f70565b50919050565b60606000616cb88360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616d1a90616931565b15616d2857614ab481617d7f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d8790616a02565b600103616df157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ab4906169a290616acf565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5090616931565b15616c6c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616eb89083906184a7565b9050600181511115616ef4578060028251616ed39190619266565b81518110616ee357616ee3619920565b602002602001015192505050919050565b5082604051602001614b879190619f70565b805182516000911115616f1b575060006149bb565b81518351602085015160009291616f3191619279565b616f3b9190619266565b905082602001518103616f525760019150506149bb565b82516020840151819020912014905092915050565b60606000616f748361854c565b600101905060008167ffffffffffffffff811115616f9457616f9461937c565b6040519080825280601f01601f191660200182016040528015616fbe576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616fc857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617093905b829061862e565b156170d357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171329061708c565b1561717257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171d19061708c565b1561721157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172709061708c565b806172d55750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172d59061708c565b1561731557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173749061708c565b806173d95750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d99061708c565b1561741957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174789061708c565b806174dd5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174dd9061708c565b1561751d57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757c9061708c565b806175e15750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175e19061708c565b1561762157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176809061708c565b156176c057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261771f9061708c565b1561775f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177be9061708c565b156177fe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261785d9061708c565b1561789d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178fc9061708c565b1561793c57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799b9061708c565b80617a005750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a009061708c565b15617a4057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a9f9061708c565b15617adf57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614b87929060200161a04e565b60608060005b8451811015617b815781858281518110617b1857617b18619920565b6020026020010151604051602001617b31929190619499565b604051602081830303815290604052915060018551617b509190619266565b8114617b795781604051602001617b67919061a1b7565b60405160208183030381529060405291505b600101617afc565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617b9a5790505090508381600081518110617bc557617bc5619920565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617c1957617c19619920565b60200260200101819052508181600281518110617c3857617c38619920565b6020908102919091010152949350505050565b6020808301518351835192840151600093617c699291849190618642565b14159392505050565b60408051808201909152600080825260208201526000617ca48460000151856020015185600001518660200151618753565b9050836020015181617cb69190619266565b84518590617cc5908390619266565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617cf95750816149bb565b6020808301519084015160019114617d205750815160208481015190840151829020919020145b8015617d5157825184518590617d37908390619266565b9052508251602085018051617d4d908390619279565b9052505b509192915050565b6040805180820190915260008082526020820152617d78838383618873565b5092915050565b60606000826000015167ffffffffffffffff811115617da057617da061937c565b6040519080825280601f01601f191660200182016040528015617dca576020820181803683370190505b5090506000602082019050617d78818560200151866000015161891e565b60606000617df4614db1565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617e1157905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617e6c90619a8d565b935060ff1681518110617e8157617e81619920565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617ed2919061a1f8565b604051602081830303815290604052828280617eed90619a8d565b935060ff1681518110617f0257617f02619920565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617f4f90619a8d565b935060ff1681518110617f6457617f64619920565b602002602001018190525082604051602001617f8091906199bb565b604051602081830303815290604052828280617f9b90619a8d565b935060ff1681518110617fb057617fb0619920565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ffd90619a8d565b935060ff168151811061801257618012619920565b60200260200101819052506180278784618998565b828261803281619a8d565b935060ff168151811061804757618047619920565b6020908102919091010152855151156180f35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261809981619a8d565b935060ff16815181106180ae576180ae619920565b60200260200101819052506180c7866000015184618998565b82826180d281619a8d565b935060ff16815181106180e7576180e7619920565b60200260200101819052505b8560800151156181615760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261813c81619a8d565b935060ff168151811061815157618151619920565b60200260200101819052506181c7565b84156181c75760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826181a681619a8d565b935060ff16815181106181bb576181bb619920565b60200260200101819052505b604086015151156182635760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261821181619a8d565b935060ff168151811061822657618226619920565b6020026020010181905250856040015182828061824290619a8d565b935060ff168151811061825757618257619920565b60200260200101819052505b8560600151156182cd5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826182ac81619a8d565b935060ff16815181106182c1576182c1619920565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156182eb576182eb61937c565b60405190808252806020026020018201604052801561831e57816020015b60608152602001906001900390816183095790505b50905060005b8260ff168160ff16101561837757838160ff168151811061834757618347619920565b6020026020010151828260ff168151811061836457618364619920565b6020908102919091010152600101618324565b50979650505050505050565b60408051808201909152600080825260208201528151835110156183a85750816149bb565b815183516020850151600092916183be91619279565b6183c89190619266565b602084015190915060019082146183e9575082516020840151819020908220145b801561840457835185518690618400908390619266565b9052505b50929392505050565b60008082600001516184318560000151866020015186600001518760200151618753565b61843b9190619279565b90505b8351602085015161844f9190619279565b8111617d78578161845f8161a23d565b925050826000015161849685602001518361847a9190619266565b86516184869190619266565b8386600001518760200151618753565b6184a09190619279565b905061843e565b606060006184b5848461840d565b6184c0906001619279565b67ffffffffffffffff8111156184d8576184d861937c565b60405190808252806020026020018201604052801561850b57816020015b60608152602001906001900390816184f65790505b50905060005b8151811015616780576185276169a28686617d59565b82828151811061853957618539619920565b6020908102919091010152600101618511565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618595577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106185c1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106185df57662386f26fc10000830492506010015b6305f5e10083106185f7576305f5e100830492506008015b612710831061860b57612710830492506004015b6064831061861d576064830492506002015b600a83106149bb5760010192915050565b600061863a83836189d8565b159392505050565b60008085841161874957602084116186f5576000841561868d576001618669866020619266565b61867490600861a257565b61867f90600261a355565b6186899190619266565b1990505b835181168561869c8989619279565b6186a69190619266565b805190935082165b8181146186e0578784116186c857879450505050506163b1565b836186d28161a361565b9450508284511690506186ae565b6186ea8785619279565b9450505050506163b1565b8383206187028588619266565b61870c9087619279565b91505b858210618747578482208082036187345761872a8684619279565b93505050506163b1565b61873f600184619266565b92505061870f565b505b5092949350505050565b6000838186851161885e576020851161880d576000851561879f57600161877b876020619266565b61878690600861a257565b61879190600261a355565b61879b9190619266565b1990505b845181166000876187b08b8b619279565b6187ba9190619266565b855190915083165b8281146187ff578186106187e7576187da8b8b619279565b96505050505050506163b1565b856187f18161a23d565b9650508386511690506187c2565b8596505050505050506163b1565b508383206000905b61881f8689619266565b821161885c5785832080820361883b57839450505050506163b1565b618846600185619279565b93505081806188549061a23d565b925050618815565b505b6188688787619279565b979650505050505050565b604080518082019091526000808252602082015260006188a58560000151866020015186600001518760200151618753565b6020808701805191860191909152519091506188c19082619266565b8352845160208601516188d49190619279565b81036188e35760008552618915565b835183516188f19190619279565b85518690618900908390619266565b905250835161890f9082619279565b60208601525b50909392505050565b602081106189565781518352618935602084619279565b9250618942602083619279565b915061894f602082619266565b905061891e565b600019811561898557600161896c836020619266565b6189789061010061a355565b6189829190619266565b90505b9151835183169219169190911790915250565b606060006189a68484614e84565b80516020808301516040519394506189c09390910161a378565b60405160208183030381529060405291505092915050565b81518151600091908111156189eb575081515b6020808501519084015160005b83811015618aa45782518251808214618a74576000196020871015618a5357600184618a25896020619266565b618a2f9190619279565b618a3a90600861a257565b618a4590600261a355565b618a4f9190619266565b1990505b8181168382168181039114618a715797506149bb9650505050505050565b50505b618a7f602086619279565b9450618a8c602085619279565b93505050602081618a9d9190619279565b90506189f8565b5084518651615532919061a3d0565b610b678061a3f183390190565b61053f8061af5883390190565b61106f8061b49783390190565b611ac28061c50683390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618b2a618b2f565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618b2a6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618be15783516001600160a01b0316835260209384019390920191600101618bba565b509095945050505050565b60005b83811015618c07578181015183820152602001618bef565b50506000910152565b60008151808452618c28816020860160208601618bec565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618d1e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618d08848651618c10565b6020958601959094509290920191600101618cce565b509197505050602094850194929092019150600101618c64565b50929695505050505050565b600081518084526020840193506020830160005b82811015618d985781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618d58565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618e0e6040880182618c10565b9050602082015191508681036020880152618e298183618d44565b965050506020938401939190910190600101618dca565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618ea2858351618c10565b94506020938401939190910190600101618e68565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618f386040870182618d44565b9550506020938401939190910190600101618edf565b6020815260006149bb60208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b6000815160608452618fa06060850182618c10565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a081526000618fdc60a0830188618f8b565b6001600160a01b03871660208401528560408401526001600160a01b038516606084015282810360808401526190128185618c10565b98975050505050505050565b60006020828403121561903057600080fd5b81516001600160a01b0381168114614ab457600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619101577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261912260c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561914e57600080fd5b81518015158114614ab457600080fd5b6080815260006191716080830187618f8b565b8560208401526001600160a01b038516604084015282810360608401526188688185618c10565b6000602082840312156191aa57600080fd5b5051919050565b602081526000614ab46020830184618c10565b60a0815260006191d760a0830187618c10565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261886881600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156149bb576149bb619237565b808201808211156149bb576149bb619237565b600181811c908216806192a057607f821691505b602082108103616c7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b03831681526040602082015260006163b16040830184618c10565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161933381601a850160208801618bec565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161937081601c840160208801618bec565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156193ce576193ce61937c565b60405290565b60008067ffffffffffffffff8411156193ef576193ef61937c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561941e5761941e61937c565b60405283815290508082840185101561943657600080fd5b616780846020830185618bec565b600082601f83011261945557600080fd5b614ab4838351602085016193d4565b60006020828403121561947657600080fd5b815167ffffffffffffffff81111561948d57600080fd5b6149b784828501619444565b600083516194ab818460208801618bec565b8351908301906194bf818360208801618bec565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161950081601a850160208801618bec565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161953d816033840160208801618bec565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614ab46080830184618c10565b6000602082840312156195cc57600080fd5b815167ffffffffffffffff8111156195e357600080fd5b8201601f810184136195f457600080fd5b6149b7848251602084016193d4565b60008551619615818460208a01618bec565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161964f816001840160208a01618bec565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161968d816002840160208901618bec565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516196cf816002840160208801618bec565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061971a6040830184618c10565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161979181601f850160208701618bec565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006197fe6040830184618c10565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006198506040830184618c10565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516198c7816014850160208701618bec565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061990e6040830185618c10565b8281036020840152614ab08185618c10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619987816001850160208701618bec565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516199cd818460208701618bec565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619a8081604b850160208701618bec565b91909101604b0192915050565b600060ff821660ff8103619aa357619aa3619237565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619b0a816029850160208701618bec565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614ab46080830184618c10565b600060208284031215619b7057600080fd5b815167ffffffffffffffff811115619b8757600080fd5b820160608185031215619b9957600080fd5b619ba16193ab565b81518060030b8114619bb257600080fd5b8152602082015167ffffffffffffffff811115619bce57600080fd5b619bda86828501619444565b602083015250604082015167ffffffffffffffff811115619bfa57600080fd5b619c0686828501619444565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619c72816021850160208701618bec565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619e5e816021850160208801618bec565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619e9b81602e840160208801618bec565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619b0a816029850160208701618bec565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619f63816022850160208701618bec565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619fa881600e850160208701618bec565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a086816018850160208801618bec565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a0c381601c840160208801618bec565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a1c9818460208701618bec565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a23081601c850160208701618bec565b91909101601c0192915050565b6000600019820361a2505761a250619237565b5060010190565b80820281158282048414176149bb576149bb619237565b6001815b600184111561a2a95780850481111561a28d5761a28d619237565b600184161561a29b57908102905b60019390931c92800261a272565b935093915050565b60008261a2c0575060016149bb565b8161a2cd575060006149bb565b816001811461a2e3576002811461a2ed5761a309565b60019150506149bb565b60ff84111561a2fe5761a2fe619237565b50506001821b6149bb565b5060208310610133831016604e8410600b841016171561a32c575081810a6149bb565b61a339600019848461a26e565b806000190482111561a34d5761a34d619237565b029392505050565b6000614ab4838361a2b1565b60008161a3705761a370619237565b506000190190565b6000835161a38a818460208801618bec565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a3c4816001840160208801618bec565b01600101949350505050565b8181036000831280158383131683831282161715617d7857617d7861923756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220a43967e13d8e35f364f3cdb6ecac268084c561ca3e6d91a1f4a54b41cd42ccbb64736f6c634300081a003360c060405234801561001057600080fd5b50604051611ac2380380611ac283398101604081905261002f916101db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600761006f898261032d565b50600861007c888261032d565b506009805460ff191660ff881617905560808590528360028111156100a3576100a36103eb565b60a08160028111156100b7576100b76103eb565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104019350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261011e57600080fd5b81516001600160401b03811115610137576101376100f7565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610165576101656100f7565b60405281815283820160200185101561017d57600080fd5b60005b8281101561019c57602081860181015183830182015201610180565b506000918101602001919091529392505050565b8051600381106101bf57600080fd5b919050565b80516001600160a01b03811681146101bf57600080fd5b600080600080600080600080610100898b0312156101f857600080fd5b88516001600160401b0381111561020e57600080fd5b61021a8b828c0161010d565b60208b015190995090506001600160401b0381111561023857600080fd5b6102448b828c0161010d565b975050604089015160ff8116811461025b57600080fd5b60608a0151909650945061027160808a016101b0565b60a08a0151909450925061028760c08a016101c4565b915061029560e08a016101c4565b90509295985092959890939650565b600181811c908216806102b857607f821691505b6020821081036102d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561032857806000526020600020601f840160051c810160208510156103055750805b601f840160051c820191505b818110156103255760008155600101610311565b50505b505050565b81516001600160401b03811115610346576103466100f7565b61035a8161035484546102a4565b846102de565b6020601f82116001811461038e57600083156103765750848201515b600019600385901b1c1916600184901b178455610325565b600084815260208120601f198516915b828110156103be578785015182556020948501946001909201910161039e565b50848210156103dc5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05161168e61043460003960006103280152600081816102d901528181610a1d0152610b23015261168e6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b714610432578063f687d12a1461043b578063fa62d57f1461044e57600080fd5b8063d9eeebed146103a5578063dd62ed3e146103d9578063eddeb1231461041f57600080fd5b8063c7012626116100bd578063c70126261461036a578063c835d7cc1461037d578063ccc775991461039257600080fd5b806395d89b411461031b578063a3413d0314610323578063a9059cbb1461035757600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a082311461029e57806385e1f4d0146102d45780638b851b95146102fb57600080fd5b80633ce4a5bc1461025d57806342966c681461027857806347e7ef241461028b57600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610457565b6040516101b2919061126d565b60405180910390f35b6101ce6101c93660046112ac565b6104e9565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe3660046112d8565b610500565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60095460405160ff90911681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce610286366004611319565b610597565b6101ce6102993660046112ac565b6105ab565b6101e26102ac366004611332565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a56106ff565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b2919061134f565b6101ce6103653660046112ac565b61070e565b6101ce6103783660046113bf565b61071b565b61039061038b366004611332565b61086a565b005b6103906103a0366004611332565b610931565b6103ad6109f1565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e26103e73660046114b7565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b61039061042d366004611319565b610c0f565b6101e260025481565b610390610449366004611319565b610c91565b6101e260035481565b606060078054610466906114f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610492906114f0565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b5050505050905090565b60006104f6338484610d13565b5060015b92915050565b600061050d848484610e1c565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610578576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61058c85336105878685611572565b610d13565b506001949350505050565b60006105a33383610fd7565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab148015906105e9575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561060d575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610644576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61064e8383611119565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526106ee918690611585565b60405180910390a250600192915050565b606060088054610466906114f0565b60006104f6338484610e1c565b60008060006107286109f1565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de91906115a7565b610814576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081e3385610fd7565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d95591610857918991899187916115c9565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108b7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461097e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610926565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa891906115f8565b905073ffffffffffffffffffffffffffffffffffffffff8116610af7576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa9190611615565b905080600003610be6576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610bf9919061162e565b610c039190611645565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610c5c576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610926565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cde576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610926565b73ffffffffffffffffffffffffffffffffffffffff8316610d60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610dad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e69576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610eb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610f16576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f208282611572565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681529081208054849290610f63908490611645565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fc991815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611024576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205481811015611084576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61108e8282611572565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040812091909155600680548492906110c9908490611572565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e0f565b73ffffffffffffffffffffffffffffffffffffffff8216611166576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546111789190611645565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906111b2908490611645565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561122f57602081850181015186830182015201611213565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006112806020830184611209565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112a957600080fd5b50565b600080604083850312156112bf57600080fd5b82356112ca81611287565b946020939093013593505050565b6000806000606084860312156112ed57600080fd5b83356112f881611287565b9250602084013561130881611287565b929592945050506040919091013590565b60006020828403121561132b57600080fd5b5035919050565b60006020828403121561134457600080fd5b813561128081611287565b602081016003831061138a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113d257600080fd5b823567ffffffffffffffff8111156113e957600080fd5b8301601f810185136113fa57600080fd5b803567ffffffffffffffff81111561141457611414611390565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561148057611480611390565b60405281815282820160200187101561149857600080fd5b8160208401602083013760006020928201830152969401359450505050565b600080604083850312156114ca57600080fd5b82356114d581611287565b915060208301356114e581611287565b809150509250929050565b600181811c9082168061150457607f821691505b60208210810361153d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104fa576104fa611543565b6040815260006115986040830185611209565b90508260208301529392505050565b6000602082840312156115b957600080fd5b8151801515811461128057600080fd5b6080815260006115dc6080830187611209565b6020830195909552506040810192909252606090910152919050565b60006020828403121561160a57600080fd5b815161128081611287565b60006020828403121561162757600080fd5b5051919050565b80820281158282048414176104fa576104fa611543565b808201808211156104fa576104fa61154356fea2646970667358221220ff62fd4bd87c4bd8cb6b710eb3bc879bf82b272805bab80a5c462f9aee4e937164736f6c634300081a0033a2646970667358221220dcd0d99782ed797df53094330b057cc08b1511aee7778c49f359e6c10985b95664736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallZContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallZContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertZContractIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteZContractFailsIfSenderIsNotFungibleModule\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061e0f08061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80637f924c4e11610145578063c3248272116100bd578063e63ab1e91161008c578063f5a3573311610071578063f5a35733146103cf578063fa7626d4146103d7578063fc79171b146103e457600080fd5b8063e63ab1e914610392578063eba3c49c146103c757600080fd5b8063c324827214610372578063cced12c71461037a578063df690b9a14610382578063e20c9f711461038a57600080fd5b8063aed71d9711610114578063b5508aa9116100f9578063b5508aa91461034a578063ba414fa614610352578063c27253181461036a57600080fd5b8063aed71d971461033a578063b0464fdc1461034257600080fd5b80637f924c4e1461030057806385226c8114610308578063916a17c61461031d57806396d9d8761461033257600080fd5b806331d09956116101d857806344b2a40b116101a7578063597cfeb01161018c578063597cfeb0146102db57806366d9a9a0146102e3578063720b9aa9146102f857600080fd5b806344b2a40b146102cb578063461fc5af146102d357600080fd5b806331d09956146102ab5780633a25c460146102b35780633e5e3c23146102bb5780633f7286f4146102c357600080fd5b80631c785a14116102145780631c785a14146102685780631ed7831c146102705780631fe687971461028e5780632ade38801461029657600080fd5b806309f080da146102465780630a9254e414610250578063104b352214610258578063198d5ca414610260575b600080fd5b61024e6103ec565b005b61024e6105e0565b61024e61104d565b61024e61123f565b61024e6114f9565b610278611e42565b6040516102859190618ba0565b60405180910390f35b61024e611ea4565b61029e6123d3565b6040516102859190618c3c565b61024e612515565b61024e6126d4565b61027861288f565b6102786128ef565b61024e61294f565b61024e612ad7565b61024e612c95565b6102eb61306b565b6040516102859190618da2565b61024e6131ed565b61024e613460565b6103106134b2565b6040516102859190618e40565b610325613582565b6040516102859190618eb7565b61024e61367d565b61024e6137d0565b610325613adc565b610310613bd7565b61035a613ca7565b6040519015158152602001610285565b61024e613d7b565b61024e613f34565b61024e6140ed565b61024e6142d8565b610278614496565b6103b97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610285565b61024e6144f6565b61024e6146b4565b601f5461035a9060ff1681565b61024e61486b565b60006040516020016103fd90618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156104c757600080fd5b505af11580156104db573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561053857600080fd5b505af115801561054c573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af6596794506105aa9387938116926001929116908990600401618fc9565b600060405180830381600087803b1580156105c457600080fd5b505af11580156105d8573d6000803e3d6000fd5b505050505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161062690618ab3565b604051809103906000f080158015610642573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610726919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526149a2565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc926004808401939192918290030181865afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c919061901e565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161085090618ac0565b604051809103906000f08015801561086c573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561090857600080fd5b505af115801561091c573d6000803e3d6000fd5b50505050600080600060405161093190618acd565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561096d573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556020546040516012936001938493600093919216906109c390618ada565b6109d296959493929190619047565b604051809103906000f0801580156109ee573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610a8557600080fd5b505af1158015610a99573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610b0357600080fd5b505af1158015610b17573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c0057600080fd5b505af1158015610c14573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cac919061913c565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d41919061913c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610e2a57600080fd5b505af1158015610e3e573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed6919061913c565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f2857600080fd5b505af1158015610f3c573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd4919061913c565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b50505050565b60405160019060009061106290602001618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561112c57600080fd5b505af1158015611140573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561119d57600080fd5b505af11580156111b1573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506112089286928992911690889060040161915e565b600060405180830381600087803b15801561122257600080fd5b505af1158015611236573d6000803e3d6000fd5b50505050505050565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190619198565b90506112da6000826149c1565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561133357600080fd5b505af1158015611347573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156113b757600080fd5b505af11580156113cb573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e79190619198565b90506114f46000826149c1565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561155257600080fd5b505af1158015611566573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061165191906004016191b1565b600060405180830381600087803b15801561166b57600080fd5b505af115801561167f573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116d357600080fd5b505af11580156116e7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561174457600080fd5b505af1158015611758573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061184391906004016191b1565b600060405180830381600087803b15801561185d57600080fd5b505af1158015611871573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118c557600080fd5b505af11580156118d9573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561199e57600080fd5b505af11580156119b2573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b158015611a2557600080fd5b505af1158015611a39573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611b2257600080fd5b505af1158015611b36573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611b9357600080fd5b505af1158015611ba7573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bfb57600080fd5b505af1158015611c0f573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca09190619198565b9050611cad6000826149c1565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d0657600080fd5b505af1158015611d1a573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611d9257600080fd5b505af1158015611da6573d6000803e3d6000fd5b50506021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e369190619198565b90506114f483826149c1565b60606016805480602002602001604051908101604052809291908181526020018280548015611e9a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e7c575b5050505050905090565b6022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f329190619198565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc19190619198565b6024546040519192506001600160a01b03163190600090611fe490602001618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156120d257600080fd5b505af11580156120e6573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061214193506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612171936001600160a01b03928316928c9216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121d257600080fd5b505af11580156121e6573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061223d9286928c92911690889060040161915e565b600060405180830381600087803b15801561225757600080fd5b505af115801561226b573d6000803e3d6000fd5b50506022546027546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156122d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fb9190619198565b905061231061230a8888619266565b826149c1565b6022546020546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561237a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239e9190619198565b90506123aa86826149c1565b6123c96123b78987619279565b6024546001600160a01b0316316149c1565b5050505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561250c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156124f55783829060005260206000200180546124689061928c565b80601f01602080910402602001604051908101604052809291908181526020018280546124949061928c565b80156124e15780601f106124b6576101008083540402835291602001916124e1565b820191906000526020600020905b8154815290600101906020018083116124c457829003601f168201915b505050505081526020019060010190612449565b5050505081525050815260200190600101906123f7565b50505050905090565b600060405160200161252690618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156125f057600080fd5b505af1158015612604573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b50506020546021546024546040517f309f50040000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063309f500494506105aa9387938116926001929116908990600401618fc9565b6040516001906000906126e990602001618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156127b357600080fd5b505af11580156127c7573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561282457600080fd5b505af1158015612838573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506112089286928992911690889060040161915e565b60606018805480602002602001604051908101604052809291908181526020018280548015611e9a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611e7c575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611e9a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611e7c575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129ab57600080fd5b505af11580156129bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a2f57600080fd5b505af1158015612a43573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612abc57600080fd5b505af1158015612ad0573d6000803e3d6000fd5b5050505050565b6000604051602001612ae890618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015612bb257600080fd5b505af1158015612bc6573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c2357600080fd5b505af1158015612c37573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506105aa9387938116926001929116908990600401618fc9565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015612cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d229190619198565b9050612d2f6000826149c1565b6000604051602001612d4090618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612e2e57600080fd5b505af1158015612e42573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450612e9d93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054612ece936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f2f57600080fd5b505af1158015612f43573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450612fa19387938116926001929116908990600401618fc9565b600060405180830381600087803b158015612fbb57600080fd5b505af1158015612fcf573d6000803e3d6000fd5b5050602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa15801561303a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305e9190619198565b90506110476001826149c1565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561250c57838290600052602060002090600202016040518060400160405290816000820180546130c29061928c565b80601f01602080910402602001604051908101604052809291908181526020018280546130ee9061928c565b801561313b5780601f106131105761010080835404028352916020019161313b565b820191906000526020600020905b81548152906001019060200180831161311e57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156131d557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116131825790505b5050505050815250508152602001906001019061308f565b60006040516020016131fe90618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061335b93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461338c936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156133ee57600080fd5b505af1158015613402573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b94506105aa9387938116926001929116908990600401618fc9565b6021546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260019260009216906370a0823190602401611c5f565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561250c5783829060005260206000200180546134f59061928c565b80601f01602080910402602001604051908101604052809291908181526020018280546135219061928c565b801561356e5780601f106135435761010080835404028352916020019161356e565b820191906000526020600020905b81548152906001019060200180831161355157829003601f168201915b5050505050815260200190600101906134d6565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561250c5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561366557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116136125790505b505050505081525050815260200190600101906135a6565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136d957600080fd5b505af11580156136ed573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561375d57600080fd5b505af1158015613771573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612aa2565b602154602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385d9190619198565b905061386a6000826149c1565b600060405160200161387b90618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561396957600080fd5b505af115801561397d573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e9994894506139d893506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613a09936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a6a57600080fd5b505af1158015613a7e573d6000803e3d6000fd5b50506020546021546024546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af659679450612fa19387938116926001929116908990600401618fc9565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561250c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613bbf57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411613b6c5790505b50505050508152505081526020019060010190613b00565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561250c578382906000526020600020018054613c1a9061928c565b80601f0160208091040260200160405190810160405280929190818152602001828054613c469061928c565b8015613c935780601f10613c6857610100808354040283529160200191613c93565b820191906000526020600020905b815481529060010190602001808311613c7657829003601f168201915b505050505081526020019060010190613bfb565b60085460009060ff1615613cbf575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d749190619198565b1415905090565b6000604051602001613d8c90618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015613e5657600080fd5b505af1158015613e6a573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613ec757600080fd5b505af1158015613edb573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506105aa928692169060019086908990600401618fc9565b6000604051602001613f4590618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561400f57600080fd5b505af1158015614023573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561408057600080fd5b505af1158015614094573d6000803e3d6000fd5b50506020546021546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635af6596793506105aa928692169060019086908990600401618fc9565b60006040516020016140fe90618f4e565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156141ec57600080fd5b505af1158015614200573d6000803e3d6000fd5b5050602080546040517ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948945061425b93506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260275460205461428c936001600160a01b039283169260019216906191c4565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612648565b60006040516020016142e990618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561442457600080fd5b505af1158015614438573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506105aa9387938116926001929116908990600401618fc9565b60606015805480602002602001604051908101604052809291908181526020018280548015611e9a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611e7c575050505050905090565b600060405160200161450790618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156145d157600080fd5b505af11580156145e5573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561464257600080fd5b505af1158015614656573d6000803e3d6000fd5b50506020546021546027546040517f5af659670000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635af6596794506105aa9387938116926001929116908990600401618fc9565b6040516001906000906146c990602001618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561479357600080fd5b505af11580156147a7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561480457600080fd5b505af1158015614818573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061120890849087908590889060040161915e565b600060405160200161487c90618f4e565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f2b2add3d0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561494657600080fd5b505af115801561495a573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024016133d4565b60006149ac618ae7565b6149b7848483614a40565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614a2c57600080fd5b505afa1580156105d8573d6000803e3d6000fd5b600080614a4d8584614abb565b9050614ab06040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614a9b9291906192d9565b60405160208183030381529060405285614ac7565b9150505b9392505050565b6000614ab48383614af5565b60c08101515160009015614aeb57614ae484848460c00151614b10565b9050614ab4565b614ae48484614cb6565b6000614b018383614da1565b614ab483836020015184614ac7565b600080614b1b614db1565b90506000614b298683614e84565b90506000614b40826060015183602001518561532a565b90506000614b508383898961553c565b90506000614b5d826163b9565b602081015181519192509060030b15614bd057898260400151604051602001614b879291906192fb565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614bc7916004016191b1565b60405180910390fd5b6000614c136040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616588565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614c669084906004016191b1565b602060405180830381865afa158015614c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ca7919061901e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614d0b9087906004016191b1565b600060405180830381865afa158015614d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d509190810190619464565b90506000614d7e8285604051602001614d6a929190619499565b604051602081830303815290604052616788565b90506001600160a01b0381166149b7578484604051602001614b879291906194c8565b614dad8282600061679b565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90614e38908490600401619573565b600060405180830381865afa158015614e55573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e7d91908101906195ba565b9250505090565b614eb66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050614f016040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b614f0a8561689e565b60208201526000614f1a86616c83565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614f5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f8491908101906195ba565b86838560200151604051602001614f9e9493929190619603565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614ff69085906004016191b1565b600060405180830381865afa158015615013573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261503b91908101906195ba565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615083908490600401619707565b602060405180830381865afa1580156150a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150c4919061913c565b6150d95781604051602001614b879190619759565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061511e9084906004016197eb565b600060405180830381865afa15801561513b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261516391908101906195ba565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906151aa90849060040161983d565b602060405180830381865afa1580156151c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151eb919061913c565b15615280576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061523590849060040161983d565b600060405180830381865afa158015615252573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261527a91908101906195ba565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016152a5919061988f565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016152d19291906198fb565b600060405180830381865afa1580156152ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261531691908101906195ba565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816153465790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106153a6576153a6619920565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106153fa576153fa619920565b602002602001018190525084604051602001615416919061994f565b6040516020818303038152906040528160028151811061543857615438619920565b60200260200101819052508260405160200161545491906199bb565b6040516020818303038152906040528160038151811061547657615476619920565b6020026020010181905250600061548c826163b9565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061551d9060408051808201825260008082526020918201528151808301909252845182528085019082015290616f06565b6155325785604051602001614b8791906199fc565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561558c565b511590565b61570057826020015115615648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614bc7565b8260c0015115615700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614bc7565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161571957905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061577490619a8d565b935060ff168151811061578957615789619920565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016157da9190619aac565b6040516020818303038152906040528282806157f590619a8d565b935060ff168151811061580a5761580a619920565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061585790619a8d565b935060ff168151811061586c5761586c619920565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806158b990619a8d565b935060ff16815181106158ce576158ce619920565b602002602001018190525087602001518282806158ea90619a8d565b935060ff16815181106158ff576158ff619920565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061594c90619a8d565b935060ff168151811061596157615961619920565b60209081029190910101528751828261597981619a8d565b935060ff168151811061598e5761598e619920565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806159db90619a8d565b935060ff16815181106159f0576159f0619920565b6020026020010181905250615a0446616f67565b8282615a0f81619a8d565b935060ff1681518110615a2457615a24619920565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615a7190619a8d565b935060ff1681518110615a8657615a86619920565b602002602001018190525086828280615a9e90619a8d565b935060ff1681518110615ab357615ab3619920565b6020908102919091010152855115615bda5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615b0481619a8d565b935060ff1681518110615b1957615b19619920565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615b699089906004016191b1565b600060405180830381865afa158015615b86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bae91908101906195ba565b8282615bb981619a8d565b935060ff1681518110615bce57615bce619920565b60200260200101819052505b846020015115615caa5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282615c2381619a8d565b935060ff1681518110615c3857615c38619920565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280615c8590619a8d565b935060ff1681518110615c9a57615c9a619920565b6020026020010181905250615e71565b615ce26155878660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b615d755760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615d2581619a8d565b935060ff1681518110615d3a57615d3a619920565b60200260200101819052508460a00151604051602001615d5a919061994f565b604051602081830303815290604052828280615c8590619a8d565b8460c00151158015615db8575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152615db690511590565b155b15615e715760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282615dfc81619a8d565b935060ff1681518110615e1157615e11619920565b6020026020010181905250615e2588617007565b604051602001615e35919061994f565b604051602081830303815290604052828280615e5090619a8d565b935060ff1681518110615e6557615e65619920565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152615ea590511590565b615f3a5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282615ee881619a8d565b935060ff1681518110615efd57615efd619920565b60200260200101819052508460400151828280615f1990619a8d565b935060ff1681518110615f2e57615f2e619920565b60200260200101819052505b60608501511561605b5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615f8381619a8d565b935060ff1681518110615f9857615f98619920565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616007573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261602f91908101906195ba565b828261603a81619a8d565b935060ff168151811061604f5761604f619920565b60200260200101819052505b60e085015151156161025760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826160a581619a8d565b935060ff16815181106160ba576160ba619920565b60200260200101819052506160d68560e0015160000151616f67565b82826160e181619a8d565b935060ff16815181106160f6576160f6619920565b60200260200101819052505b60e085015160200151156161ac5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261614f81619a8d565b935060ff168151811061616457616164619920565b60200260200101819052506161808560e0015160200151616f67565b828261618b81619a8d565b935060ff16815181106161a0576161a0619920565b60200260200101819052505b60e085015160400151156162565760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826161f981619a8d565b935060ff168151811061620e5761620e619920565b602002602001018190525061622a8560e0015160400151616f67565b828261623581619a8d565b935060ff168151811061624a5761624a619920565b60200260200101819052505b60e085015160600151156163005760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826162a381619a8d565b935060ff16815181106162b8576162b8619920565b60200260200101819052506162d48560e0015160600151616f67565b82826162df81619a8d565b935060ff16815181106162f4576162f4619920565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561631e5761631e61937c565b60405190808252806020026020018201604052801561635157816020015b606081526020019060019003908161633c5790505b50905060005b8260ff168160ff1610156163aa57838160ff168151811061637a5761637a619920565b6020026020010151828260ff168151811061639757616397619920565b6020908102919091010152600101616357565b5093505050505b949350505050565b6163e06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161646691869101619b17565b600060405180830381865afa158015616483573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ab91908101906195ba565b905060006164b98683617af6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016164e99190618e40565b6000604051808303816000875af1158015616508573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165309190810190619b5e565b805190915060030b158015906165495750602081015151155b80156165585750604081015151155b15615532578160008151811061657057616570619920565b6020026020010151604051602001614b879190619c14565b606060006165bd8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506165f49082905b90617c4b565b156167515760006166718261666b846166656166378a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617c72565b90617cd4565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506166d5908290617c4b565b1561673f57604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261673c905b8290617d59565b90505b61674881617d7f565b92505050614ab4565b821561676a578484604051602001614b87929190619e00565b5050604080516020810190915260008152614ab4565b509392505050565b6000808251602084016000f09392505050565b8160a00151156167aa57505050565b60006167b7848484617de8565b905060006167c4826163b9565b602081015181519192509060030b1580156168605750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616860906040805180820182526000808252602091820152815180830190925284518252808501908201526165ee565b1561686d57505050505050565b6040820151511561688d578160400151604051602001614b879190619ea7565b80604051602001614b879190619f05565b606060006168d38360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616938905b8290616f06565b156169a757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ab4906169a2908390618383565b617d7f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a09905b829061840d565b600103616ad657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a6f90616735565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ab4906169a2905b8390617d59565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3590616931565b15616c6c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616b9d9083906184a7565b905060008160018351616bb09190619266565b81518110616bc057616bc0619920565b60200260200101519050616c636169a2616c366040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618383565b95945050505050565b82604051602001614b879190619f70565b50919050565b60606000616cb88360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616d1a90616931565b15616d2857614ab481617d7f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d8790616a02565b600103616df157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ab4906169a290616acf565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e5090616931565b15616c6c57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616eb89083906184a7565b9050600181511115616ef4578060028251616ed39190619266565b81518110616ee357616ee3619920565b602002602001015192505050919050565b5082604051602001614b879190619f70565b805182516000911115616f1b575060006149bb565b81518351602085015160009291616f3191619279565b616f3b9190619266565b905082602001518103616f525760019150506149bb565b82516020840151819020912014905092915050565b60606000616f748361854c565b600101905060008167ffffffffffffffff811115616f9457616f9461937c565b6040519080825280601f01601f191660200182016040528015616fbe576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616fc857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617093905b829061862e565b156170d357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171329061708c565b1561717257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171d19061708c565b1561721157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172709061708c565b806172d55750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172d59061708c565b1561731557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173749061708c565b806173d95750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173d99061708c565b1561741957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174789061708c565b806174dd5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174dd9061708c565b1561751d57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261757c9061708c565b806175e15750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175e19061708c565b1561762157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176809061708c565b156176c057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261771f9061708c565b1561775f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177be9061708c565b156177fe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261785d9061708c565b1561789d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178fc9061708c565b1561793c57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261799b9061708c565b80617a005750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a009061708c565b15617a4057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a9f9061708c565b15617adf57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614b87929060200161a04e565b60608060005b8451811015617b815781858281518110617b1857617b18619920565b6020026020010151604051602001617b31929190619499565b604051602081830303815290604052915060018551617b509190619266565b8114617b795781604051602001617b67919061a1b7565b60405160208183030381529060405291505b600101617afc565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617b9a5790505090508381600081518110617bc557617bc5619920565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110617c1957617c19619920565b60200260200101819052508181600281518110617c3857617c38619920565b6020908102919091010152949350505050565b6020808301518351835192840151600093617c699291849190618642565b14159392505050565b60408051808201909152600080825260208201526000617ca48460000151856020015185600001518660200151618753565b9050836020015181617cb69190619266565b84518590617cc5908390619266565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617cf95750816149bb565b6020808301519084015160019114617d205750815160208481015190840151829020919020145b8015617d5157825184518590617d37908390619266565b9052508251602085018051617d4d908390619279565b9052505b509192915050565b6040805180820190915260008082526020820152617d78838383618873565b5092915050565b60606000826000015167ffffffffffffffff811115617da057617da061937c565b6040519080825280601f01601f191660200182016040528015617dca576020820181803683370190505b5090506000602082019050617d78818560200151866000015161891e565b60606000617df4614db1565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081617e1157905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617e6c90619a8d565b935060ff1681518110617e8157617e81619920565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001617ed2919061a1f8565b604051602081830303815290604052828280617eed90619a8d565b935060ff1681518110617f0257617f02619920565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617f4f90619a8d565b935060ff1681518110617f6457617f64619920565b602002602001018190525082604051602001617f8091906199bb565b604051602081830303815290604052828280617f9b90619a8d565b935060ff1681518110617fb057617fb0619920565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ffd90619a8d565b935060ff168151811061801257618012619920565b60200260200101819052506180278784618998565b828261803281619a8d565b935060ff168151811061804757618047619920565b6020908102919091010152855151156180f35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261809981619a8d565b935060ff16815181106180ae576180ae619920565b60200260200101819052506180c7866000015184618998565b82826180d281619a8d565b935060ff16815181106180e7576180e7619920565b60200260200101819052505b8560800151156181615760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261813c81619a8d565b935060ff168151811061815157618151619920565b60200260200101819052506181c7565b84156181c75760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826181a681619a8d565b935060ff16815181106181bb576181bb619920565b60200260200101819052505b604086015151156182635760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261821181619a8d565b935060ff168151811061822657618226619920565b6020026020010181905250856040015182828061824290619a8d565b935060ff168151811061825757618257619920565b60200260200101819052505b8560600151156182cd5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826182ac81619a8d565b935060ff16815181106182c1576182c1619920565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156182eb576182eb61937c565b60405190808252806020026020018201604052801561831e57816020015b60608152602001906001900390816183095790505b50905060005b8260ff168160ff16101561837757838160ff168151811061834757618347619920565b6020026020010151828260ff168151811061836457618364619920565b6020908102919091010152600101618324565b50979650505050505050565b60408051808201909152600080825260208201528151835110156183a85750816149bb565b815183516020850151600092916183be91619279565b6183c89190619266565b602084015190915060019082146183e9575082516020840151819020908220145b801561840457835185518690618400908390619266565b9052505b50929392505050565b60008082600001516184318560000151866020015186600001518760200151618753565b61843b9190619279565b90505b8351602085015161844f9190619279565b8111617d78578161845f8161a23d565b925050826000015161849685602001518361847a9190619266565b86516184869190619266565b8386600001518760200151618753565b6184a09190619279565b905061843e565b606060006184b5848461840d565b6184c0906001619279565b67ffffffffffffffff8111156184d8576184d861937c565b60405190808252806020026020018201604052801561850b57816020015b60608152602001906001900390816184f65790505b50905060005b8151811015616780576185276169a28686617d59565b82828151811061853957618539619920565b6020908102919091010152600101618511565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618595577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106185c1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106185df57662386f26fc10000830492506010015b6305f5e10083106185f7576305f5e100830492506008015b612710831061860b57612710830492506004015b6064831061861d576064830492506002015b600a83106149bb5760010192915050565b600061863a83836189d8565b159392505050565b60008085841161874957602084116186f5576000841561868d576001618669866020619266565b61867490600861a257565b61867f90600261a355565b6186899190619266565b1990505b835181168561869c8989619279565b6186a69190619266565b805190935082165b8181146186e0578784116186c857879450505050506163b1565b836186d28161a361565b9450508284511690506186ae565b6186ea8785619279565b9450505050506163b1565b8383206187028588619266565b61870c9087619279565b91505b858210618747578482208082036187345761872a8684619279565b93505050506163b1565b61873f600184619266565b92505061870f565b505b5092949350505050565b6000838186851161885e576020851161880d576000851561879f57600161877b876020619266565b61878690600861a257565b61879190600261a355565b61879b9190619266565b1990505b845181166000876187b08b8b619279565b6187ba9190619266565b855190915083165b8281146187ff578186106187e7576187da8b8b619279565b96505050505050506163b1565b856187f18161a23d565b9650508386511690506187c2565b8596505050505050506163b1565b508383206000905b61881f8689619266565b821161885c5785832080820361883b57839450505050506163b1565b618846600185619279565b93505081806188549061a23d565b925050618815565b505b6188688787619279565b979650505050505050565b604080518082019091526000808252602082015260006188a58560000151866020015186600001518760200151618753565b6020808701805191860191909152519091506188c19082619266565b8352845160208601516188d49190619279565b81036188e35760008552618915565b835183516188f19190619279565b85518690618900908390619266565b905250835161890f9082619279565b60208601525b50909392505050565b602081106189565781518352618935602084619279565b9250618942602083619279565b915061894f602082619266565b905061891e565b600019811561898557600161896c836020619266565b6189789061010061a355565b6189829190619266565b90505b9151835183169219169190911790915250565b606060006189a68484614e84565b80516020808301516040519394506189c09390910161a378565b60405160208183030381529060405291505092915050565b81518151600091908111156189eb575081515b6020808501519084015160005b83811015618aa45782518251808214618a74576000196020871015618a5357600184618a25896020619266565b618a2f9190619279565b618a3a90600861a257565b618a4590600261a355565b618a4f9190619266565b1990505b8181168382168181039114618a715797506149bb9650505050505050565b50505b618a7f602086619279565b9450618a8c602085619279565b93505050602081618a9d9190619279565b90506189f8565b5084518651615532919061a3d0565b610b678061a3f183390190565b61053f8061af5883390190565b61106f8061b49783390190565b611bb58061c50683390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618b2a618b2f565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618b2a6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618be15783516001600160a01b0316835260209384019390920191600101618bba565b509095945050505050565b60005b83811015618c07578181015183820152602001618bef565b50506000910152565b60008151808452618c28816020860160208601618bec565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618d1e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352618d08848651618c10565b6020958601959094509290920191600101618cce565b509197505050602094850194929092019150600101618c64565b50929695505050505050565b600081518084526020840193506020830160005b82811015618d985781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618d58565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618e0e6040880182618c10565b9050602082015191508681036020880152618e298183618d44565b965050506020938401939190910190600101618dca565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618ea2858351618c10565b94506020938401939190910190600101618e68565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015618d38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152618f386040870182618d44565b9550506020938401939190910190600101618edf565b6020815260006149bb60208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b6000815160608452618fa06060850182618c10565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60a081526000618fdc60a0830188618f8b565b6001600160a01b03871660208401528560408401526001600160a01b038516606084015282810360808401526190128185618c10565b98975050505050505050565b60006020828403121561903057600080fd5b81516001600160a01b0381168114614ab457600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619101577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261912260c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561914e57600080fd5b81518015158114614ab457600080fd5b6080815260006191716080830187618f8b565b8560208401526001600160a01b038516604084015282810360608401526188688185618c10565b6000602082840312156191aa57600080fd5b5051919050565b602081526000614ab46020830184618c10565b60a0815260006191d760a0830187618c10565b6001600160a01b03861660208401528460408401526001600160a01b0384166060840152828103608084015261886881600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156149bb576149bb619237565b808201808211156149bb576149bb619237565b600181811c908216806192a057607f821691505b602082108103616c7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b03831681526040602082015260006163b16040830184618c10565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161933381601a850160208801618bec565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161937081601c840160208801618bec565b01601c01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156193ce576193ce61937c565b60405290565b60008067ffffffffffffffff8411156193ef576193ef61937c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561941e5761941e61937c565b60405283815290508082840185101561943657600080fd5b616780846020830185618bec565b600082601f83011261945557600080fd5b614ab4838351602085016193d4565b60006020828403121561947657600080fd5b815167ffffffffffffffff81111561948d57600080fd5b6149b784828501619444565b600083516194ab818460208801618bec565b8351908301906194bf818360208801618bec565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161950081601a850160208801618bec565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161953d816033840160208801618bec565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614ab46080830184618c10565b6000602082840312156195cc57600080fd5b815167ffffffffffffffff8111156195e357600080fd5b8201601f810184136195f457600080fd5b6149b7848251602084016193d4565b60008551619615818460208a01618bec565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161964f816001840160208a01618bec565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161968d816002840160208901618bec565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516196cf816002840160208801618bec565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061971a6040830184618c10565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161979181601f850160208701618bec565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006197fe6040830184618c10565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006198506040830184618c10565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516198c7816014850160208701618bec565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061990e6040830185618c10565b8281036020840152614ab08185618c10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619987816001850160208701618bec565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516199cd818460208701618bec565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619a8081604b850160208701618bec565b91909101604b0192915050565b600060ff821660ff8103619aa357619aa3619237565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619b0a816029850160208701618bec565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614ab46080830184618c10565b600060208284031215619b7057600080fd5b815167ffffffffffffffff811115619b8757600080fd5b820160608185031215619b9957600080fd5b619ba16193ab565b81518060030b8114619bb257600080fd5b8152602082015167ffffffffffffffff811115619bce57600080fd5b619bda86828501619444565b602083015250604082015167ffffffffffffffff811115619bfa57600080fd5b619c0686828501619444565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619c72816021850160208701618bec565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619e5e816021850160208801618bec565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619e9b81602e840160208801618bec565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619b0a816029850160208701618bec565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619f63816022850160208701618bec565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619fa881600e850160208701618bec565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a086816018850160208801618bec565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a0c381601c840160208801618bec565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a1c9818460208701618bec565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a23081601c850160208701618bec565b91909101601c0192915050565b6000600019820361a2505761a250619237565b5060010190565b80820281158282048414176149bb576149bb619237565b6001815b600184111561a2a95780850481111561a28d5761a28d619237565b600184161561a29b57908102905b60019390931c92800261a272565b935093915050565b60008261a2c0575060016149bb565b8161a2cd575060006149bb565b816001811461a2e3576002811461a2ed5761a309565b60019150506149bb565b60ff84111561a2fe5761a2fe619237565b50506001821b6149bb565b5060208310610133831016604e8410600b841016171561a32c575081810a6149bb565b61a339600019848461a26e565b806000190482111561a34d5761a34d619237565b029392505050565b6000614ab4838361a2b1565b60008161a3705761a370619237565b506000190190565b6000835161a38a818460208801618bec565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a3c4816001840160208801618bec565b01600101949350505050565b8181036000831280158383131683831282161715617d7857617d7861923756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a00336080604052348015600f57600080fd5b506105208061001f6000396000f3fe60806040526004361061002a5760003560e01c806369582bee14610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e3660046101ba565b610073565b34801561005f57600080fd5b5061003161006e3660046101ba565b6100ee565b6060811561008a5761008782840184610273565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999486100b58780610369565b6100c560408a0160208b016103ce565b896040013533866040516100de969594939291906103f0565b60405180910390a1505050505050565b606081156101055761010282840184610273565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100b58780610369565b60006060828403121561014257600080fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016c57600080fd5b919050565b60008083601f84011261018357600080fd5b50813567ffffffffffffffff81111561019b57600080fd5b6020830191508360208285010111156101b357600080fd5b9250929050565b6000806000806000608086880312156101d257600080fd5b853567ffffffffffffffff8111156101e957600080fd5b6101f588828901610130565b95505061020460208701610148565b935060408601359250606086013567ffffffffffffffff81111561022757600080fd5b61023388828901610171565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561028557600080fd5b813567ffffffffffffffff81111561029c57600080fd5b8201601f810184136102ad57600080fd5b803567ffffffffffffffff8111156102c7576102c7610244565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561033357610333610244565b60405281815282820160200186101561034b57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261039e57600080fd5b83018035915067ffffffffffffffff8211156103b957600080fd5b6020019150368190038213156101b357600080fd5b6000602082840312156103e057600080fd5b6103e982610148565b9392505050565b60a081528560a0820152858760c0830137600060c0878301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116820173ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff8516606084015260c083820301608084015283518060c083015260005b818110156104a557602081870181015184830160e0015201610488565b50600060e0838301810191909152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909101019897505050505050505056fea2646970667358221220f4d1ccb9c8450e782e1c77412473fd37637a5c83a2a3272307d8c8bc8e8c7a3364736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220a43967e13d8e35f364f3cdb6ecac268084c561ca3e6d91a1f4a54b41cd42ccbb64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb5380380611bb583398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60076100aa8982610360565b5060086100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c051611744610471600039600061024f015260006103440152600081816102f501528181610ad30152610bd901526117446000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b71461044e578063f687d12a14610457578063fa62d57f1461046a57600080fd5b8063d9eeebed146103c1578063dd62ed3e146103f5578063eddeb1231461043b57600080fd5b8063c7012626116100bd578063c701262614610386578063c835d7cc14610399578063ccc77599146103ae57600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a08231146102ba57806385e1f4d0146102f05780638b851b951461031757600080fd5b80633ce4a5bc1461027957806342966c681461029457806347e7ef24146102a757600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610473565b6040516101b29190611323565b60405180910390f35b6101ce6101c9366004611362565b610505565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe36600461138e565b61051c565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce6102a23660046113cf565b6105b3565b6101ce6102b5366004611362565b6105c7565b6101e26102c83660046113e8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071b565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611405565b6101ce610381366004611362565b61072a565b6101ce610394366004611475565b610737565b6103ac6103a73660046113e8565b610886565b005b6103ac6103bc3660046113e8565b61099a565b6103c9610aa7565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e261040336600461156d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b6103ac6104493660046113cf565b610cc5565b6101e260025481565b6103ac6104653660046113cf565b610d47565b6101e260035481565b606060078054610482906115a6565b80601f01602080910402602001604051908101604052809291908181526020018280546104ae906115a6565b80156104fb5780601f106104d0576101008083540402835291602001916104fb565b820191906000526020600020905b8154815290600101906020018083116104de57829003601f168201915b5050505050905090565b6000610512338484610dc9565b5060015b92915050565b6000610529848484610ed2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610594576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a885336105a38685611628565b610dc9565b506001949350505050565b60006105bf338361108d565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610605575060005473ffffffffffffffffffffffffffffffffffffffff163314155b8015610629575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610660576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066a83836111cf565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070a91869061163b565b60405180910390a250600192915050565b606060088054610482906115a6565b6000610512338484610ed2565b6000806000610744610aa7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa919061165d565b610830576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083a338561108d565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955916108739189918991879161167f565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610920576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109e7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a34576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a3879060200161098f565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5e91906116ae565b905073ffffffffffffffffffffffffffffffffffffffff8116610bad576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6091906116cb565b905080600003610c9c576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610caf91906116e4565b610cb991906116fb565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d12576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f9060200161098f565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d94576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a9060200161098f565b73ffffffffffffffffffffffffffffffffffffffff8316610e16576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e63576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f1f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f6c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610fcc576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd68282611628565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526004602052604080822093909355908516815290812080548492906110199084906116fb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161107f91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110da576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020548181101561113a576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111448282611628565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120919091556006805484929061117f908490611628565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec5565b73ffffffffffffffffffffffffffffffffffffffff821661121c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806006600082825461122e91906116fb565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906112689084906116fb565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e5576020818501810151868301820152016112c9565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133660208301846112bf565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461135f57600080fd5b50565b6000806040838503121561137557600080fd5b82356113808161133d565b946020939093013593505050565b6000806000606084860312156113a357600080fd5b83356113ae8161133d565b925060208401356113be8161133d565b929592945050506040919091013590565b6000602082840312156113e157600080fd5b5035919050565b6000602082840312156113fa57600080fd5b81356113368161133d565b6020810160038310611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148857600080fd5b823567ffffffffffffffff81111561149f57600080fd5b8301601f810185136114b057600080fd5b803567ffffffffffffffff8111156114ca576114ca611446565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153657611536611446565b60405281815282820160200187101561154e57600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158057600080fd5b823561158b8161133d565b9150602083013561159b8161133d565b809150509250929050565b600181811c908216806115ba57607f821691505b6020821081036115f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610516576105166115f9565b60408152600061164e60408301856112bf565b90508260208301529392505050565b60006020828403121561166f57600080fd5b8151801515811461133657600080fd5b60808152600061169260808301876112bf565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c057600080fd5b81516113368161133d565b6000602082840312156116dd57600080fd5b5051919050565b8082028115828204841417610516576105166115f9565b80820180821115610516576105166115f956fea264697066735822122037649c2055bfb791d5356fcc351c4af595c644cc42f4d0379388cd4eda6b0fd864736f6c634300081a0033a264697066735822122054c6e540a9d50e6dd6a5b875f4ecd996e638f4785fc8f1d113da110c73100a8a64736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/igatewayevm.sol/igatewayevm.go b/v2/pkg/igatewayevm.sol/igatewayevm.go index 84aee76f..bd144008 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevm.go +++ b/v2/pkg/igatewayevm.sol/igatewayevm.go @@ -31,7 +31,7 @@ var ( // IGatewayEVMMetaData contains all meta data concerning the IGatewayEVM contract. var IGatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", } // IGatewayEVMABI is the input ABI used to generate the binding from. @@ -180,6 +180,111 @@ func (_IGatewayEVM *IGatewayEVMTransactorRaw) Transact(opts *bind.TransactOpts, return _IGatewayEVM.Contract.contract.Transact(opts, method, params...) } +// Call is a paid mutator transaction binding the contract method 0x1b8b921d. +// +// Solidity: function call(address receiver, bytes payload) returns() +func (_IGatewayEVM *IGatewayEVMTransactor) Call(opts *bind.TransactOpts, receiver common.Address, payload []byte) (*types.Transaction, error) { + return _IGatewayEVM.contract.Transact(opts, "call", receiver, payload) +} + +// Call is a paid mutator transaction binding the contract method 0x1b8b921d. +// +// Solidity: function call(address receiver, bytes payload) returns() +func (_IGatewayEVM *IGatewayEVMSession) Call(receiver common.Address, payload []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.Call(&_IGatewayEVM.TransactOpts, receiver, payload) +} + +// Call is a paid mutator transaction binding the contract method 0x1b8b921d. +// +// Solidity: function call(address receiver, bytes payload) returns() +func (_IGatewayEVM *IGatewayEVMTransactorSession) Call(receiver common.Address, payload []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.Call(&_IGatewayEVM.TransactOpts, receiver, payload) +} + +// Deposit is a paid mutator transaction binding the contract method 0xf340fa01. +// +// Solidity: function deposit(address receiver) payable returns() +func (_IGatewayEVM *IGatewayEVMTransactor) Deposit(opts *bind.TransactOpts, receiver common.Address) (*types.Transaction, error) { + return _IGatewayEVM.contract.Transact(opts, "deposit", receiver) +} + +// Deposit is a paid mutator transaction binding the contract method 0xf340fa01. +// +// Solidity: function deposit(address receiver) payable returns() +func (_IGatewayEVM *IGatewayEVMSession) Deposit(receiver common.Address) (*types.Transaction, error) { + return _IGatewayEVM.Contract.Deposit(&_IGatewayEVM.TransactOpts, receiver) +} + +// Deposit is a paid mutator transaction binding the contract method 0xf340fa01. +// +// Solidity: function deposit(address receiver) payable returns() +func (_IGatewayEVM *IGatewayEVMTransactorSession) Deposit(receiver common.Address) (*types.Transaction, error) { + return _IGatewayEVM.Contract.Deposit(&_IGatewayEVM.TransactOpts, receiver) +} + +// Deposit0 is a paid mutator transaction binding the contract method 0xf45346dc. +// +// Solidity: function deposit(address receiver, uint256 amount, address asset) returns() +func (_IGatewayEVM *IGatewayEVMTransactor) Deposit0(opts *bind.TransactOpts, receiver common.Address, amount *big.Int, asset common.Address) (*types.Transaction, error) { + return _IGatewayEVM.contract.Transact(opts, "deposit0", receiver, amount, asset) +} + +// Deposit0 is a paid mutator transaction binding the contract method 0xf45346dc. +// +// Solidity: function deposit(address receiver, uint256 amount, address asset) returns() +func (_IGatewayEVM *IGatewayEVMSession) Deposit0(receiver common.Address, amount *big.Int, asset common.Address) (*types.Transaction, error) { + return _IGatewayEVM.Contract.Deposit0(&_IGatewayEVM.TransactOpts, receiver, amount, asset) +} + +// Deposit0 is a paid mutator transaction binding the contract method 0xf45346dc. +// +// Solidity: function deposit(address receiver, uint256 amount, address asset) returns() +func (_IGatewayEVM *IGatewayEVMTransactorSession) Deposit0(receiver common.Address, amount *big.Int, asset common.Address) (*types.Transaction, error) { + return _IGatewayEVM.Contract.Deposit0(&_IGatewayEVM.TransactOpts, receiver, amount, asset) +} + +// DepositAndCall is a paid mutator transaction binding the contract method 0x29c59b5d. +// +// Solidity: function depositAndCall(address receiver, bytes payload) payable returns() +func (_IGatewayEVM *IGatewayEVMTransactor) DepositAndCall(opts *bind.TransactOpts, receiver common.Address, payload []byte) (*types.Transaction, error) { + return _IGatewayEVM.contract.Transact(opts, "depositAndCall", receiver, payload) +} + +// DepositAndCall is a paid mutator transaction binding the contract method 0x29c59b5d. +// +// Solidity: function depositAndCall(address receiver, bytes payload) payable returns() +func (_IGatewayEVM *IGatewayEVMSession) DepositAndCall(receiver common.Address, payload []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.DepositAndCall(&_IGatewayEVM.TransactOpts, receiver, payload) +} + +// DepositAndCall is a paid mutator transaction binding the contract method 0x29c59b5d. +// +// Solidity: function depositAndCall(address receiver, bytes payload) payable returns() +func (_IGatewayEVM *IGatewayEVMTransactorSession) DepositAndCall(receiver common.Address, payload []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.DepositAndCall(&_IGatewayEVM.TransactOpts, receiver, payload) +} + +// DepositAndCall0 is a paid mutator transaction binding the contract method 0x8c6f037f. +// +// Solidity: function depositAndCall(address receiver, uint256 amount, address asset, bytes payload) returns() +func (_IGatewayEVM *IGatewayEVMTransactor) DepositAndCall0(opts *bind.TransactOpts, receiver common.Address, amount *big.Int, asset common.Address, payload []byte) (*types.Transaction, error) { + return _IGatewayEVM.contract.Transact(opts, "depositAndCall0", receiver, amount, asset, payload) +} + +// DepositAndCall0 is a paid mutator transaction binding the contract method 0x8c6f037f. +// +// Solidity: function depositAndCall(address receiver, uint256 amount, address asset, bytes payload) returns() +func (_IGatewayEVM *IGatewayEVMSession) DepositAndCall0(receiver common.Address, amount *big.Int, asset common.Address, payload []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.DepositAndCall0(&_IGatewayEVM.TransactOpts, receiver, amount, asset, payload) +} + +// DepositAndCall0 is a paid mutator transaction binding the contract method 0x8c6f037f. +// +// Solidity: function depositAndCall(address receiver, uint256 amount, address asset, bytes payload) returns() +func (_IGatewayEVM *IGatewayEVMTransactorSession) DepositAndCall0(receiver common.Address, amount *big.Int, asset common.Address, payload []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.DepositAndCall0(&_IGatewayEVM.TransactOpts, receiver, amount, asset, payload) +} + // Execute is a paid mutator transaction binding the contract method 0x1cff79cd. // // Solidity: function execute(address destination, bytes data) payable returns(bytes) @@ -201,6 +306,27 @@ func (_IGatewayEVM *IGatewayEVMTransactorSession) Execute(destination common.Add return _IGatewayEVM.Contract.Execute(&_IGatewayEVM.TransactOpts, destination, data) } +// ExecuteRevert is a paid mutator transaction binding the contract method 0x35c018db. +// +// Solidity: function executeRevert(address destination, bytes data) payable returns() +func (_IGatewayEVM *IGatewayEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, destination common.Address, data []byte) (*types.Transaction, error) { + return _IGatewayEVM.contract.Transact(opts, "executeRevert", destination, data) +} + +// ExecuteRevert is a paid mutator transaction binding the contract method 0x35c018db. +// +// Solidity: function executeRevert(address destination, bytes data) payable returns() +func (_IGatewayEVM *IGatewayEVMSession) ExecuteRevert(destination common.Address, data []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.ExecuteRevert(&_IGatewayEVM.TransactOpts, destination, data) +} + +// ExecuteRevert is a paid mutator transaction binding the contract method 0x35c018db. +// +// Solidity: function executeRevert(address destination, bytes data) payable returns() +func (_IGatewayEVM *IGatewayEVMTransactorSession) ExecuteRevert(destination common.Address, data []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.ExecuteRevert(&_IGatewayEVM.TransactOpts, destination, data) +} + // ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. // // Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() diff --git a/v2/pkg/igatewayzevm.sol/igatewayzevm.go b/v2/pkg/igatewayzevm.sol/igatewayzevm.go index c49c8d3c..37b95648 100644 --- a/v2/pkg/igatewayzevm.sol/igatewayzevm.go +++ b/v2/pkg/igatewayzevm.sol/igatewayzevm.go @@ -29,6 +29,13 @@ var ( _ = abi.ConvertType ) +// RevertContext is an auto generated low-level Go binding around an user-defined struct. +type RevertContext struct { + Origin []byte + Sender common.Address + ChainID *big.Int +} + // ZContext is an auto generated low-level Go binding around an user-defined struct. type ZContext struct { Origin []byte @@ -38,7 +45,7 @@ type ZContext struct { // IGatewayZEVMMetaData contains all meta data concerning the IGatewayZEVM contract. var IGatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structrevertContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", } // IGatewayZEVMABI is the input ABI used to generate the binding from. @@ -229,25 +236,67 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Deposit(zrc20 common.Address return _IGatewayZEVM.Contract.Deposit(&_IGatewayZEVM.TransactOpts, zrc20, amount, target) } -// DepositAndCall is a paid mutator transaction binding the contract method 0xc39aca37. +// DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. +// +// Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndCall(opts *bind.TransactOpts, context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.contract.Transact(opts, "depositAndCall", context, amount, target, message) +} + +// DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. +// +// Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.DepositAndCall(&_IGatewayZEVM.TransactOpts, context, amount, target, message) +} + +// DepositAndCall is a paid mutator transaction binding the contract method 0x21501a95. +// +// Solidity: function depositAndCall((bytes,address,uint256) context, uint256 amount, address target, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndCall(context ZContext, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.DepositAndCall(&_IGatewayZEVM.TransactOpts, context, amount, target, message) +} + +// DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndCall(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { - return _IGatewayZEVM.contract.Transact(opts, "depositAndCall", context, zrc20, amount, target, message) +func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndCall0(opts *bind.TransactOpts, context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.contract.Transact(opts, "depositAndCall0", context, zrc20, amount, target, message) } -// DepositAndCall is a paid mutator transaction binding the contract method 0xc39aca37. +// DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndCall(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { - return _IGatewayZEVM.Contract.DepositAndCall(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) +func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.DepositAndCall0(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// DepositAndCall is a paid mutator transaction binding the contract method 0xc39aca37. +// DepositAndCall0 is a paid mutator transaction binding the contract method 0xc39aca37. // // Solidity: function depositAndCall((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() -func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndCall(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { - return _IGatewayZEVM.Contract.DepositAndCall(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) +func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndCall0(context ZContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.DepositAndCall0(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) +} + +// DepositAndRevert is a paid mutator transaction binding the contract method 0x5af65967. +// +// Solidity: function depositAndRevert((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndRevert(opts *bind.TransactOpts, context RevertContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.contract.Transact(opts, "depositAndRevert", context, zrc20, amount, target, message) +} + +// DepositAndRevert is a paid mutator transaction binding the contract method 0x5af65967. +// +// Solidity: function depositAndRevert((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndRevert(context RevertContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.DepositAndRevert(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) +} + +// DepositAndRevert is a paid mutator transaction binding the contract method 0x5af65967. +// +// Solidity: function depositAndRevert((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndRevert(context RevertContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.DepositAndRevert(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } // Execute is a paid mutator transaction binding the contract method 0xbcf7f32b. @@ -271,6 +320,27 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Execute(context ZContext, zr return _IGatewayZEVM.Contract.Execute(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } +// ExecuteRevert is a paid mutator transaction binding the contract method 0x309f5004. +// +// Solidity: function executeRevert((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, context RevertContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.contract.Transact(opts, "executeRevert", context, zrc20, amount, target, message) +} + +// ExecuteRevert is a paid mutator transaction binding the contract method 0x309f5004. +// +// Solidity: function executeRevert((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMSession) ExecuteRevert(context RevertContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.ExecuteRevert(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) +} + +// ExecuteRevert is a paid mutator transaction binding the contract method 0x309f5004. +// +// Solidity: function executeRevert((bytes,address,uint256) context, address zrc20, uint256 amount, address target, bytes message) returns() +func (_IGatewayZEVM *IGatewayZEVMTransactorSession) ExecuteRevert(context RevertContext, zrc20 common.Address, amount *big.Int, target common.Address, message []byte) (*types.Transaction, error) { + return _IGatewayZEVM.Contract.ExecuteRevert(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) +} + // Withdraw is a paid mutator transaction binding the contract method 0x135390f9. // // Solidity: function withdraw(bytes receiver, uint256 amount, address zrc20) returns() diff --git a/v2/pkg/igatewayzevm.sol/igatewayzevmerrors.go b/v2/pkg/igatewayzevm.sol/igatewayzevmerrors.go index cb6c3e73..596e475e 100644 --- a/v2/pkg/igatewayzevm.sol/igatewayzevmerrors.go +++ b/v2/pkg/igatewayzevm.sol/igatewayzevmerrors.go @@ -31,7 +31,7 @@ var ( // IGatewayZEVMErrorsMetaData contains all meta data concerning the IGatewayZEVMErrors contract. var IGatewayZEVMErrorsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrFungible\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", } // IGatewayZEVMErrorsABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/senderzevm.sol/senderzevm.go b/v2/pkg/senderzevm.sol/senderzevm.go index d4052b61..6c8455eb 100644 --- a/v2/pkg/senderzevm.sol/senderzevm.go +++ b/v2/pkg/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"callReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawAndCallReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea264697066735822122011f5a132ec30e33aab727a8c0099e5989394033720d9fda5b9669b838309363564736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea264697066735822122077d23238a2e7d47c8bbeab590e5478444c1217f3c032da9d8971c2c3fc1625ce64736f6c634300081a0033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go index 67c61efa..64615af2 100644 --- a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go +++ b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go @@ -31,7 +31,7 @@ var ( // ZetaConnectorBaseMetaData contains all meta data concerning the ZetaConnectorBase contract. var ZetaConnectorBaseMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // ZetaConnectorBaseABI is the input ABI used to generate the binding from. @@ -428,37 +428,6 @@ func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) SupportsInterface(inte return _ZetaConnectorBase.Contract.SupportsInterface(&_ZetaConnectorBase.CallOpts, interfaceId) } -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ZetaConnectorBase *ZetaConnectorBaseCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ZetaConnectorBase.contract.Call(opts, &out, "tssAddress") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ZetaConnectorBase *ZetaConnectorBaseSession) TssAddress() (common.Address, error) { - return _ZetaConnectorBase.Contract.TssAddress(&_ZetaConnectorBase.CallOpts) -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ZetaConnectorBase *ZetaConnectorBaseCallerSession) TssAddress() (common.Address, error) { - return _ZetaConnectorBase.Contract.TssAddress(&_ZetaConnectorBase.CallOpts) -} - // ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. // // Solidity: function zetaToken() view returns(address) diff --git a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go index 88856e77..8d020f62 100644 --- a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go +++ b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNativeMetaData contains all meta data concerning the ZetaConnectorNative contract. var ZetaConnectorNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b5060405161163738038061163783398101604081905261002f916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b1561008f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516113836102b4600039600081816101f70152818161046d0152818161051e01528181610638015281816107cc0152818161087d015261094b0152600081816101ab0152818161048f015281816104f1015281816107ee015261085001526113836000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635b112591116100cd57806385f438c111610081578063a217fddf11610066578063a217fddf1461033e578063d547741f14610346578063e63ab1e91461035957600080fd5b806385f438c1146102d157806391d14854146102f857600080fd5b80635e3e9fef116100b25780635e3e9fef146102a3578063743e0c9b146102b65780638456cb59146102c957600080fd5b80635b112591146102785780635c975abb1461029857600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110be565b610380565b60405190151581526020015b60405180910390f35b61019161018c366004611129565b610419565b005b6101916101a13660046111bb565b6105e4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111ee565b60009081526002602052604090206001015490565b604051908152602001610175565b610191610258366004611207565b6106bf565b61019161026b366004611207565b6106ea565b610191610743565b6003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff16610169565b6101916102b1366004611129565b610778565b6101916102c43660046111ee565b610929565b610191610973565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610169610306366004611207565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b610191610354366004611207565b6109a5565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104216109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044b81610a0d565b610453610a17565b6104b473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd49061054e907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105ca939291906112d9565b60405180910390a2506105dd6001600055565b5050505050565b6105ec6109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061681610a0d565b61061e610a17565b61065f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a56565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106a791815260200190565b60405180910390a2506106ba6001600055565b505050565b6000828152600260205260409020600101546106da81610a0d565b6106e48383610ad7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610739576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ba8282610bd7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61076d81610a0d565b610775610c96565b50565b6107806109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107aa81610a0d565b6107b2610a17565b61081373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108ad907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105ca939291906112d9565b610931610a17565b61077573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d13565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099d81610a0d565b610775610d59565b6000828152600260205260409020600101546109c081610a0d565b6106e48383610bd7565b600260005403610a06576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107758133610db2565b60015460ff1615610a54576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106ba91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e43565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b6d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610413565b506000610413565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610413565b610c9e610ed9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106e49186918216906323b872dd90608401610a90565b610d61610a17565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ce9565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e3f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6573ffffffffffffffffffffffffffffffffffffffff841683610f15565b90508051600014158015610e8a575080806020019051810190610e8891906112fc565b155b156106ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e36565b60015460ff16610a54576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2383836000610f2a565b9392505050565b606081471015610f68576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e36565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f91919061131e565b60006040518083038185875af1925050503d8060008114610fce576040519150601f19603f3d011682016040523d82523d6000602084013e610fd3565b606091505b5091509150610fe3868383610fed565b9695505050505050565b60608261100257610ffd8261107c565b610f23565b8151158015611026575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611075576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e36565b5080610f23565b80511561108c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112457600080fd5b919050565b60008060008060006080868803121561114157600080fd5b61114a86611100565b945060208601359350604086013567ffffffffffffffff81111561116d57600080fd5b8601601f8101881361117e57600080fd5b803567ffffffffffffffff81111561119557600080fd5b8860208284010111156111a757600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d057600080fd5b6111d984611100565b95602085013595506040909401359392505050565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b8235915061122a60208401611100565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112ce608083018486611233565b979650505050505050565b8381526040602082015260006112f3604083018486611233565b95945050505050565b60006020828403121561130e57600080fd5b81518015158114610f2357600080fd5b6000825160005b8181101561133f5760208186018101518583015201611325565b50600092019182525091905056fea264697066735822122076f21f1ac8f2c01b56f41facd345cbe7bb75624ae7a01f61b68ad17dc9af27a464736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60c060405234801561001057600080fd5b506040516115f63803806115f683398101604081905261002f916101ef565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf600082610123565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610123565b506101157f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610123565b505050505050505050610243565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101c95760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101813390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101cd565b5060005b92915050565b80516001600160a01b03811681146101ea57600080fd5b919050565b6000806000806080858703121561020557600080fd5b61020e856101d3565b935061021c602086016101d3565b925061022a604086016101d3565b9150610238606086016101d3565b905092959194509250565b60805160a0516113486102ae600039600081816101dc01528181610432015281816104e3015281816105fd0152818161079101528181610842015261091001526000818161019001528181610454015281816104b6015281816107b3015261081501526113486000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80635c975abb116100b257806385f438c111610081578063a217fddf11610066578063a217fddf14610303578063d547741f1461030b578063e63ab1e91461031e57600080fd5b806385f438c11461029657806391d14854146102bd57600080fd5b80635c975abb1461025d5780635e3e9fef14610268578063743e0c9b1461027b5780638456cb591461028e57600080fd5b806321e093b1116101095780632f2ff15d116100ee5780632f2ff15d1461022f57806336568abe146102425780633f4ba83a1461025557600080fd5b806321e093b1146101d7578063248a9ca3146101fe57600080fd5b806301ffc9a71461013b57806302d5c89914610163578063106e629014610178578063116191b61461018b575b600080fd5b61014e610149366004611083565b610345565b60405190151581526020015b60405180910390f35b6101766101713660046110ee565b6103de565b005b610176610186366004611180565b6105a9565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b61022161020c3660046111b3565b60009081526002602052604090206001015490565b60405190815260200161015a565b61017661023d3660046111cc565b610684565b6101766102503660046111cc565b6106af565b610176610708565b60015460ff1661014e565b6101766102763660046110ee565b61073d565b6101766102893660046111b3565b6108ee565b610176610938565b6102217f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61014e6102cb3660046111cc565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610221600081565b6101766103193660046111cc565b61096a565b6102217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103d857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103e661098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610410816109d2565b6104186109dc565b61047973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610513907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161058f9392919061129e565b60405180910390a2506105a26001600055565b5050505050565b6105b161098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46105db816109d2565b6105e36109dc565b61062473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a1b565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161066c91815260200190565b60405180910390a25061067f6001600055565b505050565b60008281526002602052604090206001015461069f816109d2565b6106a98383610a9c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106fe576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61067f8282610b9c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610732816109d2565b61073a610c5b565b50565b61074561098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f816109d2565b6107776109dc565b6107d873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610872907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561088c57600080fd5b505af11580156108a0573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161058f9392919061129e565b6108f66109dc565b61073a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610cd8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610962816109d2565b61073a610d1e565b600082815260026020526040902060010154610985816109d2565b6106a98383610b9c565b6002600054036109cb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61073a8133610d77565b60015460ff1615610a19576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261067f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e08565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b323390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016103d8565b5060006103d8565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103d8565b610c63610e9e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106a99186918216906323b872dd90608401610a55565b610d266109dc565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cae565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e04576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e2a73ffffffffffffffffffffffffffffffffffffffff841683610eda565b90508051600014158015610e4f575080806020019051810190610e4d91906112c1565b155b1561067f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610dfb565b60015460ff16610a19576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610ee883836000610eef565b9392505050565b606081471015610f2d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610dfb565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f5691906112e3565b60006040518083038185875af1925050503d8060008114610f93576040519150601f19603f3d011682016040523d82523d6000602084013e610f98565b606091505b5091509150610fa8868383610fb2565b9695505050505050565b606082610fc757610fc282611041565b610ee8565b8151158015610feb575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561103a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610dfb565b5080610ee8565b8051156110515780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561109557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ee857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146110e957600080fd5b919050565b60008060008060006080868803121561110657600080fd5b61110f866110c5565b945060208601359350604086013567ffffffffffffffff81111561113257600080fd5b8601601f8101881361114357600080fd5b803567ffffffffffffffff81111561115a57600080fd5b88602082840101111561116c57600080fd5b959894975060200195606001359392505050565b60008060006060848603121561119557600080fd5b61119e846110c5565b95602085013595506040909401359392505050565b6000602082840312156111c557600080fd5b5035919050565b600080604083850312156111df57600080fd5b823591506111ef602084016110c5565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112936080830184866111f8565b979650505050505050565b8381526040602082015260006112b86040830184866111f8565b95945050505050565b6000602082840312156112d357600080fd5b81518015158114610ee857600080fd5b6000825160005b8181101561130457602081860181015185830152016112ea565b50600092019182525091905056fea2646970667358221220acfa51062c59716e02e413798f47a294f807ab6bfe6bcb7c13ce0530e6e5b1b864736f6c634300081a0033", } // ZetaConnectorNativeABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var ZetaConnectorNativeABI = ZetaConnectorNativeMetaData.ABI var ZetaConnectorNativeBin = ZetaConnectorNativeMetaData.Bin // DeployZetaConnectorNative deploys a new Ethereum contract, binding an instance of ZetaConnectorNative to it. -func DeployZetaConnectorNative(auth *bind.TransactOpts, backend bind.ContractBackend, _gateway common.Address, _zetaToken common.Address, _tssAddress common.Address, _admin common.Address) (common.Address, *types.Transaction, *ZetaConnectorNative, error) { +func DeployZetaConnectorNative(auth *bind.TransactOpts, backend bind.ContractBackend, gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (common.Address, *types.Transaction, *ZetaConnectorNative, error) { parsed, err := ZetaConnectorNativeMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployZetaConnectorNative(auth *bind.TransactOpts, backend bind.ContractBac return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNativeBin), backend, _gateway, _zetaToken, _tssAddress, _admin) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNativeBin), backend, gateway_, zetaToken_, tssAddress_, admin_) if err != nil { return common.Address{}, nil, nil, err } @@ -450,37 +450,6 @@ func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) SupportsInterface( return _ZetaConnectorNative.Contract.SupportsInterface(&_ZetaConnectorNative.CallOpts, interfaceId) } -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ZetaConnectorNative *ZetaConnectorNativeCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ZetaConnectorNative.contract.Call(opts, &out, "tssAddress") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ZetaConnectorNative *ZetaConnectorNativeSession) TssAddress() (common.Address, error) { - return _ZetaConnectorNative.Contract.TssAddress(&_ZetaConnectorNative.CallOpts) -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) TssAddress() (common.Address, error) { - return _ZetaConnectorNative.Contract.TssAddress(&_ZetaConnectorNative.CallOpts) -} - // ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. // // Solidity: function zetaToken() view returns(address) diff --git a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go index 88e3e12b..50b8693a 100644 --- a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go +++ b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNativeTestMetaData contains all meta data concerning the ZetaConnectorNativeTest contract. var ZetaConnectorNativeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d6508061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063d509b16c1161008c578063e20c9f7111610066578063e20c9f71146102a8578063fa7626d4146102b0578063fe574f84146102bd57600080fd5b8063d509b16c14610290578063dcf7d03714610298578063de1cb76c146102a057600080fd5b8063b5508aa9116100bd578063b5508aa914610268578063ba414fa614610270578063c19099721461028857600080fd5b8063916a17c61461024b578063b0464fdc1461026057600080fd5b80633f7286f41161013a578063828320141161011457806382832014146101f957806385226c811461020157806385f438c11461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806366d9a9a0146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b610199610a2b565b6040516101a69190617b71565b60405180910390f35b6101b7610a8d565b6040516101a69190617c0d565b61018f610bcf565b6101996113a2565b610199611402565b61018f611462565b6101ec611abe565b6040516101a69190617d73565b61018f611c40565b610209611eb2565b6040516101a69190617e11565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101a6565b610253611f82565b6040516101a69190617e88565b61025361207d565b610209612178565b610278612248565b60405190151581526020016101a6565b61018f61231c565b61018f6125a0565b61018f6129b6565b61018f613076565b6101996136dc565b601f546102789060ff1681565b61018f61373c565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161031790617a84565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561039b573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261048c919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613973565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061051890617a91565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610554573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105af90617a9e565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105f3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161063890617aab565b604051809103906000f080158015610654573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b15801561097957600080fd5b505af115801561098d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a8357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a65575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610bc657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610baf578382906000526020600020018054610b2290617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e90617f1f565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b505050505081526020019060010190610b03565b505050508152505081526020019060010190610ab1565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce9190617f6c565b9050610cdb816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e32916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610ef257600080fd5b505af1158015610f06573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061104e9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110c857600080fd5b505af11580156110dc573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061113492909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561114e57600080fd5b505af1158015611162573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190617f6c565b90506111e58188613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112599190617f6c565b905061126e816112698a8761802e565b613992565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190617f6c565b9050611315816000613992565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190617f6c565b9050611396816000613992565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361150393921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190617f6c565b9050611551816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116a8916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156116c257600080fd5b505af11580156116d6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561176857600080fd5b505af115801561177c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561184e57600080fd5b505af1158015611862573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118a79089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061198d92909116908a9089908b90600401617fc6565b600060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a319190617f6c565b9050611a3e816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab29190617f6c565b905061126e8185613992565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610bc65783829060005260206000209060020201604051806040016040529081600082018054611b1590617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4190617f1f565b8015611b8e5780601f10611b6357610100808354040283529160200191611b8e565b820191906000526020600020905b815481529060010190602001808311611b7157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c2857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611bd55790505b50505050508152505081526020019060010190611ae2565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf657600080fd5b505af1158015611d0a573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611df59190600401618041565b600060405180830381600087803b158015611e0f57600080fd5b505af1158015611e23573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7b9290911690879086908890600401617fc6565b600060405180830381600087803b158015611e9557600080fd5b505af1158015611ea9573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610bc6578382906000526020600020018054611ef590617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190617f1f565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b505050505081526020019060010190611ed6565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561206557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120125790505b50505050508152505081526020019060010190611fa6565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561216057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161210d5790505b505050505081525050815260200190600101906120a1565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610bc65783829060005260206000200180546121bb90617f1f565b80601f01602080910402602001604051908101604052809291908181526020018280546121e790617f1f565b80156122345780601f1061220957610100808354040283529160200191612234565b820191906000526020600020905b81548152906001019060200180831161221757829003601f168201915b50505050508152602001906001019061219c565b60085460009060ff1615612260575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190617f6c565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561241b57600080fd5b505af115801561242f573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061251a9190600401618041565b600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7b9290911690879086908890600401617fc6565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101602060405180830381865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190617f6c565b9050612625816000613992565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612705916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156127c557600080fd5b505af11580156127d9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561289157600080fd5b505af11580156128a5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561291957600080fd5b505af115801561292d573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a39190617f6c565b90506129af8186613992565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190617f6c565b9050612ac2816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b369190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612c19916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015612c3357600080fd5b505af1158015612c47573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612cd957600080fd5b505af1158015612ced573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612d2b600289618054565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612df357600080fd5b505af1158015612e07573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150612e4c9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ec657600080fd5b505af1158015612eda573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612f3292909116908a9089908b90600401617fc6565b600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd69190617f6c565b9050612fe78161126960028a618054565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305b9190617f6c565b905061126e8161306c60028b618054565b611269908761802e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa15801561310b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312f9190617f6c565b905061313c816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561318c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b09190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613293916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156132ad57600080fd5b505af11580156132c1573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561335357600080fd5b505af1158015613367573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506133aa92506001600160a01b0390911690879061808f565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda79061349f908a908990617fad565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe915061358e9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360857600080fd5b505af115801561361c573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061367492909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561368e57600080fd5b505af11580156136a2573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101611198565b60606015805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137b657600080fd5b505af11580156137ca573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138b59190600401618041565b600060405180830381600087803b1580156138cf57600080fd5b505af11580156138e3573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561395757600080fd5b505af115801561396b573d6000803e3d6000fd5b505050505050565b600061397d617ab8565b613988848483613a11565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139fd57600080fd5b505afa15801561396b573d6000803e3d6000fd5b600080613a1e8584613a8c565b9050613a816040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a6c92919061808f565b60405160208183030381529060405285613a98565b9150505b9392505050565b6000613a858383613ac6565b60c08101515160009015613abc57613ab584848460c00151613ae1565b9050613a85565b613ab58484613c87565b6000613ad28383613d72565b613a8583836020015184613a98565b600080613aec613d82565b90506000613afa8683613e55565b90506000613b1182606001518360200151856142fb565b90506000613b218383898961450d565b90506000613b2e8261538a565b602081015181519192509060030b15613ba157898260400151604051602001613b589291906180b1565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b9891600401618041565b60405180910390fd5b6000613be46040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615559565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c37908490600401618041565b602060405180830381865afa158015613c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c789190618132565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cdc908790600401618041565b600060405180830381865afa158015613cf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d219190810190618243565b90506000613d4f8285604051602001613d3b929190618278565b604051602081830303815290604052615759565b90506001600160a01b038116613988578484604051602001613b589291906182a7565b613d7e8282600061576c565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613e09908490600401618352565b600060405180830381865afa158015613e26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e4e9190810190618399565b9250505090565b613e876040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ed26040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613edb8561586f565b60208201526000613eeb86615c54565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f559190810190618399565b86838560200151604051602001613f6f94939291906183e2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fc7908590600401618041565b600060405180830381865afa158015613fe4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261400c9190810190618399565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906140549084906004016184e6565b602060405180830381865afa158015614071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140959190618538565b6140aa5781604051602001613b58919061855a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140ef9084906004016185ec565b600060405180830381865afa15801561410c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141349190810190618399565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061417b90849060040161863e565b602060405180830381865afa158015614198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141bc9190618538565b15614251576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061420690849060040161863e565b600060405180830381865afa158015614223573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261424b9190810190618399565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142769190618690565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016142a29291906186fc565b600060405180830381865afa1580156142bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142e79190810190618399565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143175790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061437757614377618721565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143cb576143cb618721565b6020026020010181905250846040516020016143e79190618750565b6040516020818303038152906040528160028151811061440957614409618721565b60200260200101819052508260405160200161442591906187bc565b6040516020818303038152906040528160038151811061444757614447618721565b6020026020010181905250600061445d8261538a565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144ee9060408051808201825260008082526020918201528151808301909252845182528085019082015290615ed7565b6145035785604051602001613b5891906187fd565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561455d565b511590565b6146d157826020015115614619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b98565b8260c00151156146d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b98565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146ea57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806147459061888e565b935060ff168151811061475a5761475a618721565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016147ab91906188ad565b6040516020818303038152906040528282806147c69061888e565b935060ff16815181106147db576147db618721565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806148289061888e565b935060ff168151811061483d5761483d618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061488a9061888e565b935060ff168151811061489f5761489f618721565b602002602001018190525087602001518282806148bb9061888e565b935060ff16815181106148d0576148d0618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061491d9061888e565b935060ff168151811061493257614932618721565b60209081029190910101528751828261494a8161888e565b935060ff168151811061495f5761495f618721565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806149ac9061888e565b935060ff16815181106149c1576149c1618721565b60200260200101819052506149d546615f38565b82826149e08161888e565b935060ff16815181106149f5576149f5618721565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a429061888e565b935060ff1681518110614a5757614a57618721565b602002602001018190525086828280614a6f9061888e565b935060ff1681518110614a8457614a84618721565b6020908102919091010152855115614bab5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ad58161888e565b935060ff1681518110614aea57614aea618721565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b3a908990600401618041565b600060405180830381865afa158015614b57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b7f9190810190618399565b8282614b8a8161888e565b935060ff1681518110614b9f57614b9f618721565b60200260200101819052505b846020015115614c7b5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614bf48161888e565b935060ff1681518110614c0957614c09618721565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c569061888e565b935060ff1681518110614c6b57614c6b618721565b6020026020010181905250614e42565b614cb36145588660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d465760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614cf68161888e565b935060ff1681518110614d0b57614d0b618721565b60200260200101819052508460a00151604051602001614d2b9190618750565b604051602081830303815290604052828280614c569061888e565b8460c00151158015614d89575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d8790511590565b155b15614e425760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dcd8161888e565b935060ff1681518110614de257614de2618721565b6020026020010181905250614df688615fd8565b604051602001614e069190618750565b604051602081830303815290604052828280614e219061888e565b935060ff1681518110614e3657614e36618721565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e7690511590565b614f0b5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eb98161888e565b935060ff1681518110614ece57614ece618721565b60200260200101819052508460400151828280614eea9061888e565b935060ff1681518110614eff57614eff618721565b60200260200101819052505b60608501511561502c5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f548161888e565b935060ff1681518110614f6957614f69618721565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fd8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150009190810190618399565b828261500b8161888e565b935060ff168151811061502057615020618721565b60200260200101819052505b60e085015151156150d35760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150768161888e565b935060ff168151811061508b5761508b618721565b60200260200101819052506150a78560e0015160000151615f38565b82826150b28161888e565b935060ff16815181106150c7576150c7618721565b60200260200101819052505b60e0850151602001511561517d5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826151208161888e565b935060ff168151811061513557615135618721565b60200260200101819052506151518560e0015160200151615f38565b828261515c8161888e565b935060ff168151811061517157615171618721565b60200260200101819052505b60e085015160400151156152275760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151ca8161888e565b935060ff16815181106151df576151df618721565b60200260200101819052506151fb8560e0015160400151615f38565b82826152068161888e565b935060ff168151811061521b5761521b618721565b60200260200101819052505b60e085015160600151156152d15760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152748161888e565b935060ff168151811061528957615289618721565b60200260200101819052506152a58560e0015160600151615f38565b82826152b08161888e565b935060ff16815181106152c5576152c5618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152ef576152ef61815b565b60405190808252806020026020018201604052801561532257816020015b606081526020019060019003908161530d5790505b50905060005b8260ff168160ff16101561537b57838160ff168151811061534b5761534b618721565b6020026020010151828260ff168151811061536857615368618721565b6020908102919091010152600101615328565b5093505050505b949350505050565b6153b16040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161543791869101618918565b600060405180830381865afa158015615454573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261547c9190810190618399565b9050600061548a8683616ac7565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ba9190617e11565b6000604051808303816000875af11580156154d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615501919081019061895f565b805190915060030b1580159061551a5750602081015151155b80156155295750604081015151155b15614503578160008151811061554157615541618721565b6020026020010151604051602001613b589190618a15565b6060600061558e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155c59082905b90616c1c565b156157225760006156428261563c846156366156088a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c43565b90616ca5565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156a6908290616c1c565b1561571057604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261570d905b8290616d2a565b90505b61571981616d50565b92505050613a85565b821561573b578484604051602001613b58929190618c01565b5050604080516020810190915260008152613a85565b509392505050565b6000808251602084016000f09392505050565b8160a001511561577b57505050565b6000615788848484616db9565b905060006157958261538a565b602081015181519192509060030b1580156158315750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615831906040805180820182526000808252602091820152815180830190925284518252808501908201526155bf565b1561583e57505050505050565b6040820151511561585e578160400151604051602001613b589190618ca8565b80604051602001613b589190618d06565b606060006158a48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615909905b8290615ed7565b1561597857604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973908390617354565b616d50565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159da905b82906173de565b600103615aa757604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a4090615706565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973905b8390616d2a565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b0690615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6e908390617478565b905060008160018351615b81919061802e565b81518110615b9157615b91618721565b60200260200101519050615c34615973615c076040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617354565b95945050505050565b82604051602001613b589190618d71565b50919050565b60606000615c898360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ceb90615902565b15615cf957613a8581616d50565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d58906159d3565b600103615dc257604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a859061597390615aa0565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e2190615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e89908390617478565b9050600181511115615ec5578060028251615ea4919061802e565b81518110615eb457615eb4618721565b602002602001015192505050919050565b5082604051602001613b589190618d71565b805182516000911115615eec5750600061398c565b81518351602085015160009291615f0291618e4f565b615f0c919061802e565b905082602001518103615f2357600191505061398c565b82516020840151819020912014905092915050565b60606000615f458361751d565b600101905060008167ffffffffffffffff811115615f6557615f6561815b565b6040519080825280601f01601f191660200182016040528015615f8f576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f9957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616064905b82906175ff565b156160a457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161039061605d565b1561614357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161a29061605d565b156161e257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162419061605d565b806162a65750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162a69061605d565b156162e657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163459061605d565b806163aa5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163aa9061605d565b156163ea57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164499061605d565b806164ae5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164ae9061605d565b156164ee57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654d9061605d565b806165b25750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165b29061605d565b156165f257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166519061605d565b1561669157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166f09061605d565b1561673057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261678f9061605d565b156167cf57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261682e9061605d565b1561686e57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168cd9061605d565b1561690d57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696c9061605d565b806169d15750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169d19061605d565b15616a1157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a709061605d565b15616ab057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b589290602001618e62565b60608060005b8451811015616b525781858281518110616ae957616ae9618721565b6020026020010151604051602001616b02929190618278565b604051602081830303815290604052915060018551616b21919061802e565b8114616b4a5781604051602001616b389190618fcb565b60405160208183030381529060405291505b600101616acd565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b6b5790505090508381600081518110616b9657616b96618721565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bea57616bea618721565b60200260200101819052508181600281518110616c0957616c09618721565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c3a9291849190617613565b14159392505050565b60408051808201909152600080825260208201526000616c758460000151856020015185600001518660200151617724565b9050836020015181616c87919061802e565b84518590616c9690839061802e565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cca57508161398c565b6020808301519084015160019114616cf15750815160208481015190840151829020919020145b8015616d2257825184518590616d0890839061802e565b9052508251602085018051616d1e908390618e4f565b9052505b509192915050565b6040805180820190915260008082526020820152616d49838383617844565b5092915050565b60606000826000015167ffffffffffffffff811115616d7157616d7161815b565b6040519080825280601f01601f191660200182016040528015616d9b576020820181803683370190505b5090506000602082019050616d4981856020015186600001516178ef565b60606000616dc5613d82565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616de257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e3d9061888e565b935060ff1681518110616e5257616e52618721565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616ea3919061900c565b604051602081830303815290604052828280616ebe9061888e565b935060ff1681518110616ed357616ed3618721565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f209061888e565b935060ff1681518110616f3557616f35618721565b602002602001018190525082604051602001616f5191906187bc565b604051602081830303815290604052828280616f6c9061888e565b935060ff1681518110616f8157616f81618721565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fce9061888e565b935060ff1681518110616fe357616fe3618721565b6020026020010181905250616ff88784617969565b82826170038161888e565b935060ff168151811061701857617018618721565b6020908102919091010152855151156170c45760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261706a8161888e565b935060ff168151811061707f5761707f618721565b6020026020010181905250617098866000015184617969565b82826170a38161888e565b935060ff16815181106170b8576170b8618721565b60200260200101819052505b8560800151156171325760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261710d8161888e565b935060ff168151811061712257617122618721565b6020026020010181905250617198565b84156171985760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171778161888e565b935060ff168151811061718c5761718c618721565b60200260200101819052505b604086015151156172345760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171e28161888e565b935060ff16815181106171f7576171f7618721565b602002602001018190525085604001518282806172139061888e565b935060ff168151811061722857617228618721565b60200260200101819052505b85606001511561729e5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261727d8161888e565b935060ff168151811061729257617292618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172bc576172bc61815b565b6040519080825280602002602001820160405280156172ef57816020015b60608152602001906001900390816172da5790505b50905060005b8260ff168160ff16101561734857838160ff168151811061731857617318618721565b6020026020010151828260ff168151811061733557617335618721565b60209081029190910101526001016172f5565b50979650505050505050565b604080518082019091526000808252602082015281518351101561737957508161398c565b8151835160208501516000929161738f91618e4f565b617399919061802e565b602084015190915060019082146173ba575082516020840151819020908220145b80156173d5578351855186906173d190839061802e565b9052505b50929392505050565b60008082600001516174028560000151866020015186600001518760200151617724565b61740c9190618e4f565b90505b835160208501516174209190618e4f565b8111616d49578161743081619051565b925050826000015161746785602001518361744b919061802e565b8651617457919061802e565b8386600001518760200151617724565b6174719190618e4f565b905061740f565b6060600061748684846173de565b617491906001618e4f565b67ffffffffffffffff8111156174a9576174a961815b565b6040519080825280602002602001820160405280156174dc57816020015b60608152602001906001900390816174c75790505b50905060005b8151811015615751576174f86159738686616d2a565b82828151811061750a5761750a618721565b60209081029190910101526001016174e2565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617566577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617592576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175b057662386f26fc10000830492506010015b6305f5e10083106175c8576305f5e100830492506008015b61271083106175dc57612710830492506004015b606483106175ee576064830492506002015b600a831061398c5760010192915050565b600061760b83836179a9565b159392505050565b60008085841161771a57602084116176c6576000841561765e57600161763a86602061802e565b61764590600861906b565b617650906002619169565b61765a919061802e565b1990505b835181168561766d8989618e4f565b617677919061802e565b805190935082165b8181146176b1578784116176995787945050505050615382565b836176a381619175565b94505082845116905061767f565b6176bb8785618e4f565b945050505050615382565b8383206176d3858861802e565b6176dd9087618e4f565b91505b85821061771857848220808203617705576176fb8684618e4f565b9350505050615382565b61771060018461802e565b9250506176e0565b505b5092949350505050565b6000838186851161782f57602085116177de576000851561777057600161774c87602061802e565b61775790600861906b565b617762906002619169565b61776c919061802e565b1990505b845181166000876177818b8b618e4f565b61778b919061802e565b855190915083165b8281146177d0578186106177b8576177ab8b8b618e4f565b9650505050505050615382565b856177c281619051565b965050838651169050617793565b859650505050505050615382565b508383206000905b6177f0868961802e565b821161782d5785832080820361780c5783945050505050615382565b617817600185618e4f565b935050818061782590619051565b9250506177e6565b505b6178398787618e4f565b979650505050505050565b604080518082019091526000808252602082015260006178768560000151866020015186600001518760200151617724565b602080870180519186019190915251909150617892908261802e565b8352845160208601516178a59190618e4f565b81036178b457600085526178e6565b835183516178c29190618e4f565b855186906178d190839061802e565b90525083516178e09082618e4f565b60208601525b50909392505050565b602081106179275781518352617906602084618e4f565b9250617913602083618e4f565b915061792060208261802e565b90506178ef565b600019811561795657600161793d83602061802e565b61794990610100619169565b617953919061802e565b90505b9151835183169219169190911790915250565b606060006179778484613e55565b80516020808301516040519394506179919390910161918c565b60405160208183030381529060405291505092915050565b81518151600091908111156179bc575081515b6020808501519084015160005b83811015617a755782518251808214617a45576000196020871015617a24576001846179f689602061802e565b617a009190618e4f565b617a0b90600861906b565b617a16906002619169565b617a20919061802e565b1990505b8181168382168181039114617a4257975061398c9650505050505050565b50505b617a50602086618e4f565b9450617a5d602085618e4f565b93505050602081617a6e9190618e4f565b90506179c9565b508451865161450391906191e4565b610c9f8061920583390190565b6113e280619ea483390190565b6116378061b28683390190565b610d5e8061c8bd83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afb617b00565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afb6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb25783516001600160a01b0316835260209384019390920191600101617b8b565b509095945050505050565b60005b83811015617bd8578181015183820152602001617bc0565b50506000910152565b60008151808452617bf9816020860160208601617bbd565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd9848651617be1565b6020958601959094509290920191600101617c9f565b509197505050602094850194929092019150600101617c35565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d695781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d29565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617ddf6040880182617be1565b9050602082015191508681036020880152617dfa8183617d15565b965050506020938401939190910190600101617d9b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e73858351617be1565b94506020938401939190910190600101617e39565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f096040870182617d15565b9550506020938401939190910190600101617eb0565b600181811c90821680617f3357607f821691505b602082108103615c4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f7e57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615c346060830184617be1565b8281526040602082015260006153826040830184617be1565b6001600160a01b0385168152836020820152608060408201526000617fee6080830185617be1565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561398c5761398c617fff565b602081526000613a856020830184617be1565b60008261808a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153826040830184617be1565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180e981601a850160208801617bbd565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161812681601c840160208801617bbd565b01601c01949350505050565b60006020828403121561814457600080fd5b81516001600160a01b0381168114613a8557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156181ad576181ad61815b565b60405290565b60008067ffffffffffffffff8411156181ce576181ce61815b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156181fd576181fd61815b565b60405283815290508082840185101561821557600080fd5b615751846020830185617bbd565b600082601f83011261823457600080fd5b613a85838351602085016181b3565b60006020828403121561825557600080fd5b815167ffffffffffffffff81111561826c57600080fd5b61398884828501618223565b6000835161828a818460208801617bbd565b83519083019061829e818360208801617bbd565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516182df81601a850160208801617bbd565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161831c816033840160208801617bbd565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a856080830184617be1565b6000602082840312156183ab57600080fd5b815167ffffffffffffffff8111156183c257600080fd5b8201601f810184136183d357600080fd5b613988848251602084016181b3565b600085516183f4818460208a01617bbd565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161842e816001840160208a01617bbd565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161846c816002840160208901617bbd565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516184ae816002840160208801617bbd565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184f96040830184617be1565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b60006020828403121561854a57600080fd5b81518015158114613a8557600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161859281601f850160208701617bbd565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006185ff6040830184617be1565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186516040830184617be1565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516186c8816014850160208701617bbd565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061870f6040830185617be1565b8281036020840152613a818185617be1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618788816001850160208701617bbd565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516187ce818460208701617bbd565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161888181604b850160208701617bbd565b91909101604b0192915050565b600060ff821660ff81036188a4576188a4617fff565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a856080830184617be1565b60006020828403121561897157600080fd5b815167ffffffffffffffff81111561898857600080fd5b82016060818503121561899a57600080fd5b6189a261818a565b81518060030b81146189b357600080fd5b8152602082015167ffffffffffffffff8111156189cf57600080fd5b6189db86828501618223565b602083015250604082015167ffffffffffffffff8111156189fb57600080fd5b618a0786828501618223565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618a73816021850160208701617bbd565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618c5f816021850160208801617bbd565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c9c81602e840160208801617bbd565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618d64816022850160208701617bbd565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618da981600e850160208701617bbd565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561398c5761398c617fff565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e9a816018850160208801617bbd565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618ed781601c840160208801617bbd565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618fdd818460208701617bbd565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161904481601c850160208701617bbd565b91909101601c0192915050565b6000600019820361906457619064617fff565b5060010190565b808202811582820484141761398c5761398c617fff565b6001815b60018411156190bd578085048111156190a1576190a1617fff565b60018416156190af57908102905b60019390931c928002619086565b935093915050565b6000826190d45750600161398c565b816190e15750600061398c565b81600181146190f757600281146191015761911d565b600191505061398c565b60ff84111561911257619112617fff565b50506001821b61398c565b5060208310610133831016604e8410600b8410161715619140575081810a61398c565b61914d6000198484619082565b806000190482111561916157619161617fff565b029392505050565b6000613a8583836190c5565b60008161918457619184617fff565b506000190190565b6000835161919e818460208801617bbd565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516191d8816001840160208801617bbd565b01600101949350505050565b8181036000831280158383131683831282161715616d4957616d49617fff56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405234801561001057600080fd5b5060405161163738038061163783398101604081905261002f916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b1561008f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516113836102b4600039600081816101f70152818161046d0152818161051e01528181610638015281816107cc0152818161087d015261094b0152600081816101ab0152818161048f015281816104f1015281816107ee015261085001526113836000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635b112591116100cd57806385f438c111610081578063a217fddf11610066578063a217fddf1461033e578063d547741f14610346578063e63ab1e91461035957600080fd5b806385f438c1146102d157806391d14854146102f857600080fd5b80635e3e9fef116100b25780635e3e9fef146102a3578063743e0c9b146102b65780638456cb59146102c957600080fd5b80635b112591146102785780635c975abb1461029857600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110be565b610380565b60405190151581526020015b60405180910390f35b61019161018c366004611129565b610419565b005b6101916101a13660046111bb565b6105e4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111ee565b60009081526002602052604090206001015490565b604051908152602001610175565b610191610258366004611207565b6106bf565b61019161026b366004611207565b6106ea565b610191610743565b6003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff16610169565b6101916102b1366004611129565b610778565b6101916102c43660046111ee565b610929565b610191610973565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610169610306366004611207565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b610191610354366004611207565b6109a5565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104216109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044b81610a0d565b610453610a17565b6104b473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd49061054e907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105ca939291906112d9565b60405180910390a2506105dd6001600055565b5050505050565b6105ec6109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061681610a0d565b61061e610a17565b61065f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a56565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106a791815260200190565b60405180910390a2506106ba6001600055565b505050565b6000828152600260205260409020600101546106da81610a0d565b6106e48383610ad7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610739576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ba8282610bd7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61076d81610a0d565b610775610c96565b50565b6107806109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107aa81610a0d565b6107b2610a17565b61081373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108ad907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105ca939291906112d9565b610931610a17565b61077573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d13565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099d81610a0d565b610775610d59565b6000828152600260205260409020600101546109c081610a0d565b6106e48383610bd7565b600260005403610a06576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107758133610db2565b60015460ff1615610a54576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106ba91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e43565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b6d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610413565b506000610413565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610413565b610c9e610ed9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106e49186918216906323b872dd90608401610a90565b610d61610a17565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ce9565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e3f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6573ffffffffffffffffffffffffffffffffffffffff841683610f15565b90508051600014158015610e8a575080806020019051810190610e8891906112fc565b155b156106ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e36565b60015460ff16610a54576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2383836000610f2a565b9392505050565b606081471015610f68576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e36565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f91919061131e565b60006040518083038185875af1925050503d8060008114610fce576040519150601f19603f3d011682016040523d82523d6000602084013e610fd3565b606091505b5091509150610fe3868383610fed565b9695505050505050565b60608261100257610ffd8261107c565b610f23565b8151158015611026575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611075576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e36565b5080610f23565b80511561108c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112457600080fd5b919050565b60008060008060006080868803121561114157600080fd5b61114a86611100565b945060208601359350604086013567ffffffffffffffff81111561116d57600080fd5b8601601f8101881361117e57600080fd5b803567ffffffffffffffff81111561119557600080fd5b8860208284010111156111a757600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d057600080fd5b6111d984611100565b95602085013595506040909401359392505050565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b8235915061122a60208401611100565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112ce608083018486611233565b979650505050505050565b8381526040602082015260006112f3604083018486611233565b95945050505050565b60006020828403121561130e57600080fd5b81518015158114610f2357600080fd5b6000825160005b8181101561133f5760208186018101518583015201611325565b50600092019182525091905056fea264697066735822122076f21f1ac8f2c01b56f41facd345cbe7bb75624ae7a01f61b68ad17dc9af27a464736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220b4235f4edd0cbb54ab4d84250a2d0a2b9ff09b592338112c0aa13aeb1ffce1cc64736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d6388061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063d509b16c1161008c578063e20c9f7111610066578063e20c9f71146102a8578063fa7626d4146102b0578063fe574f84146102bd57600080fd5b8063d509b16c14610290578063dcf7d03714610298578063de1cb76c146102a057600080fd5b8063b5508aa9116100bd578063b5508aa914610268578063ba414fa614610270578063c19099721461028857600080fd5b8063916a17c61461024b578063b0464fdc1461026057600080fd5b80633f7286f41161013a578063828320141161011457806382832014146101f957806385226c811461020157806385f438c11461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806366d9a9a0146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b610199610a2b565b6040516101a69190617b71565b60405180910390f35b6101b7610a8d565b6040516101a69190617c0d565b61018f610bcf565b6101996113a2565b610199611402565b61018f611462565b6101ec611abe565b6040516101a69190617d73565b61018f611c40565b610209611eb2565b6040516101a69190617e11565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101a6565b610253611f82565b6040516101a69190617e88565b61025361207d565b610209612178565b610278612248565b60405190151581526020016101a6565b61018f61231c565b61018f6125a0565b61018f6129b6565b61018f613076565b6101996136dc565b601f546102789060ff1681565b61018f61373c565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161031790617a84565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561039b573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261048c919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613973565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061051890617a91565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610554573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105af90617a9e565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105f3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161063890617aab565b604051809103906000f080158015610654573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b15801561097957600080fd5b505af115801561098d573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a8357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a65575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610bc657600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610baf578382906000526020600020018054610b2290617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e90617f1f565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b505050505081526020019060010190610b03565b505050508152505081526020019060010190610ab1565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce9190617f6c565b9050610cdb816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610e32916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610ef257600080fd5b505af1158015610f06573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced915061104e9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156110c857600080fd5b505af11580156110dc573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061113492909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561114e57600080fd5b505af1158015611162573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190617f6c565b90506111e58188613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112599190617f6c565b905061126e816112698a8761802e565b613992565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190617f6c565b9050611315816000613992565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190617f6c565b9050611396816000613992565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361150393921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190617f6c565b9050611551816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916116a8916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156116c257600080fd5b505af11580156116d6573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561176857600080fd5b505af115801561177c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561184e57600080fd5b505af1158015611862573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118a79089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061198d92909116908a9089908b90600401617fc6565b600060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a319190617f6c565b9050611a3e816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab29190617f6c565b905061126e8185613992565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610bc65783829060005260206000209060020201604051806040016040529081600082018054611b1590617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4190617f1f565b8015611b8e5780601f10611b6357610100808354040283529160200191611b8e565b820191906000526020600020905b815481529060010190602001808311611b7157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c2857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611bd55790505b50505050508152505081526020019060010190611ae2565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf657600080fd5b505af1158015611d0a573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611df59190600401618041565b600060405180830381600087803b158015611e0f57600080fd5b505af1158015611e23573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611e7b9290911690879086908890600401617fc6565b600060405180830381600087803b158015611e9557600080fd5b505af1158015611ea9573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610bc6578382906000526020600020018054611ef590617f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190617f1f565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b505050505081526020019060010190611ed6565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561206557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120125790505b50505050508152505081526020019060010190611fa6565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610bc65760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561216057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161210d5790505b505050505081525050815260200190600101906120a1565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610bc65783829060005260206000200180546121bb90617f1f565b80601f01602080910402602001604051908101604052809291908181526020018280546121e790617f1f565b80156122345780601f1061220957610100808354040283529160200191612234565b820191906000526020600020905b81548152906001019060200180831161221757829003601f168201915b50505050508152602001906001019061219c565b60085460009060ff1615612260575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190617f6c565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561241b57600080fd5b505af115801561242f573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061251a9190600401618041565b600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611e7b9290911690879086908890600401617fc6565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101602060405180830381865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190617f6c565b9050612625816000613992565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612705916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156127c557600080fd5b505af11580156127d9573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561289157600080fd5b505af11580156128a5573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561291957600080fd5b505af115801561292d573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a39190617f6c565b90506129af8186613992565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190617f6c565b9050612ac2816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b369190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612c19916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b158015612c3357600080fd5b505af1158015612c47573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612cd957600080fd5b505af1158015612ced573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612d2b600289618054565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612df357600080fd5b505af1158015612e07573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150612e4c9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ec657600080fd5b505af1158015612eda573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612f3292909116908a9089908b90600401617fc6565b600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd69190617f6c565b9050612fe78161126960028a618054565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305b9190617f6c565b905061126e8161306c60028b618054565b611269908761802e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa15801561310b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312f9190617f6c565b905061313c816000613992565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561318c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b09190617f6c565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613293916001600160a01b0391909116906000908690600401617f85565b600060405180830381600087803b1580156132ad57600080fd5b505af11580156132c1573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561335357600080fd5b505af1158015613367573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa93506133aa92506001600160a01b0390911690879061808f565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda79061349f908a908990617fad565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe915061358e9089908890617fad565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360857600080fd5b505af115801561361c573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061367492909116908a9089908b90600401617fc6565b600060405180830381600087803b15801561368e57600080fd5b505af11580156136a2573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101611198565b60606015805480602002602001604051908101604052809291908181526020018280548015610a83576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610a65575050505050905090565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137b657600080fd5b505af11580156137ca573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138b59190600401618041565b600060405180830381600087803b1580156138cf57600080fd5b505af11580156138e3573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561395757600080fd5b505af115801561396b573d6000803e3d6000fd5b505050505050565b600061397d617ab8565b613988848483613a11565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156139fd57600080fd5b505afa15801561396b573d6000803e3d6000fd5b600080613a1e8584613a8c565b9050613a816040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613a6c92919061808f565b60405160208183030381529060405285613a98565b9150505b9392505050565b6000613a858383613ac6565b60c08101515160009015613abc57613ab584848460c00151613ae1565b9050613a85565b613ab58484613c87565b6000613ad28383613d72565b613a8583836020015184613a98565b600080613aec613d82565b90506000613afa8683613e55565b90506000613b1182606001518360200151856142fb565b90506000613b218383898961450d565b90506000613b2e8261538a565b602081015181519192509060030b15613ba157898260400151604051602001613b589291906180b1565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b9891600401618041565b60405180910390fd5b6000613be46040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615559565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c37908490600401618041565b602060405180830381865afa158015613c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c789190618132565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613cdc908790600401618041565b600060405180830381865afa158015613cf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d219190810190618243565b90506000613d4f8285604051602001613d3b929190618278565b604051602081830303815290604052615759565b90506001600160a01b038116613988578484604051602001613b589291906182a7565b613d7e8282600061576c565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613e09908490600401618352565b600060405180830381865afa158015613e26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e4e9190810190618399565b9250505090565b613e876040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613ed26040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613edb8561586f565b60208201526000613eeb86615c54565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f559190810190618399565b86838560200151604051602001613f6f94939291906183e2565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613fc7908590600401618041565b600060405180830381865afa158015613fe4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261400c9190810190618399565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906140549084906004016184e6565b602060405180830381865afa158015614071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140959190618538565b6140aa5781604051602001613b58919061855a565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140ef9084906004016185ec565b600060405180830381865afa15801561410c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141349190810190618399565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061417b90849060040161863e565b602060405180830381865afa158015614198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141bc9190618538565b15614251576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061420690849060040161863e565b600060405180830381865afa158015614223573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261424b9190810190618399565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142769190618690565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016142a29291906186fc565b600060405180830381865afa1580156142bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142e79190810190618399565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816143175790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061437757614377618721565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106143cb576143cb618721565b6020026020010181905250846040516020016143e79190618750565b6040516020818303038152906040528160028151811061440957614409618721565b60200260200101819052508260405160200161442591906187bc565b6040516020818303038152906040528160038151811061444757614447618721565b6020026020010181905250600061445d8261538a565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144ee9060408051808201825260008082526020918201528151808301909252845182528085019082015290615ed7565b6145035785604051602001613b5891906187fd565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561455d565b511590565b6146d157826020015115614619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b98565b8260c00151156146d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b98565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816146ea57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806147459061888e565b935060ff168151811061475a5761475a618721565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016147ab91906188ad565b6040516020818303038152906040528282806147c69061888e565b935060ff16815181106147db576147db618721565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806148289061888e565b935060ff168151811061483d5761483d618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061488a9061888e565b935060ff168151811061489f5761489f618721565b602002602001018190525087602001518282806148bb9061888e565b935060ff16815181106148d0576148d0618721565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061491d9061888e565b935060ff168151811061493257614932618721565b60209081029190910101528751828261494a8161888e565b935060ff168151811061495f5761495f618721565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806149ac9061888e565b935060ff16815181106149c1576149c1618721565b60200260200101819052506149d546615f38565b82826149e08161888e565b935060ff16815181106149f5576149f5618721565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614a429061888e565b935060ff1681518110614a5757614a57618721565b602002602001018190525086828280614a6f9061888e565b935060ff1681518110614a8457614a84618721565b6020908102919091010152855115614bab5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614ad58161888e565b935060ff1681518110614aea57614aea618721565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b3a908990600401618041565b600060405180830381865afa158015614b57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b7f9190810190618399565b8282614b8a8161888e565b935060ff1681518110614b9f57614b9f618721565b60200260200101819052505b846020015115614c7b5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614bf48161888e565b935060ff1681518110614c0957614c09618721565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614c569061888e565b935060ff1681518110614c6b57614c6b618721565b6020026020010181905250614e42565b614cb36145588660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614d465760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614cf68161888e565b935060ff1681518110614d0b57614d0b618721565b60200260200101819052508460a00151604051602001614d2b9190618750565b604051602081830303815290604052828280614c569061888e565b8460c00151158015614d89575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d8790511590565b155b15614e425760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614dcd8161888e565b935060ff1681518110614de257614de2618721565b6020026020010181905250614df688615fd8565b604051602001614e069190618750565b604051602081830303815290604052828280614e219061888e565b935060ff1681518110614e3657614e36618721565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e7690511590565b614f0b5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614eb98161888e565b935060ff1681518110614ece57614ece618721565b60200260200101819052508460400151828280614eea9061888e565b935060ff1681518110614eff57614eff618721565b60200260200101819052505b60608501511561502c5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614f548161888e565b935060ff1681518110614f6957614f69618721565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614fd8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150009190810190618399565b828261500b8161888e565b935060ff168151811061502057615020618721565b60200260200101819052505b60e085015151156150d35760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150768161888e565b935060ff168151811061508b5761508b618721565b60200260200101819052506150a78560e0015160000151615f38565b82826150b28161888e565b935060ff16815181106150c7576150c7618721565b60200260200101819052505b60e0850151602001511561517d5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826151208161888e565b935060ff168151811061513557615135618721565b60200260200101819052506151518560e0015160200151615f38565b828261515c8161888e565b935060ff168151811061517157615171618721565b60200260200101819052505b60e085015160400151156152275760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826151ca8161888e565b935060ff16815181106151df576151df618721565b60200260200101819052506151fb8560e0015160400151615f38565b82826152068161888e565b935060ff168151811061521b5761521b618721565b60200260200101819052505b60e085015160600151156152d15760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152748161888e565b935060ff168151811061528957615289618721565b60200260200101819052506152a58560e0015160600151615f38565b82826152b08161888e565b935060ff16815181106152c5576152c5618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156152ef576152ef61815b565b60405190808252806020026020018201604052801561532257816020015b606081526020019060019003908161530d5790505b50905060005b8260ff168160ff16101561537b57838160ff168151811061534b5761534b618721565b6020026020010151828260ff168151811061536857615368618721565b6020908102919091010152600101615328565b5093505050505b949350505050565b6153b16040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161543791869101618918565b600060405180830381865afa158015615454573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261547c9190810190618399565b9050600061548a8683616ac7565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016154ba9190617e11565b6000604051808303816000875af11580156154d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615501919081019061895f565b805190915060030b1580159061551a5750602081015151155b80156155295750604081015151155b15614503578160008151811061554157615541618721565b6020026020010151604051602001613b589190618a15565b6060600061558e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155c59082905b90616c1c565b156157225760006156428261563c846156366156088a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616c43565b90616ca5565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506156a6908290616c1c565b1561571057604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261570d905b8290616d2a565b90505b61571981616d50565b92505050613a85565b821561573b578484604051602001613b58929190618c01565b5050604080516020810190915260008152613a85565b509392505050565b6000808251602084016000f09392505050565b8160a001511561577b57505050565b6000615788848484616db9565b905060006157958261538a565b602081015181519192509060030b1580156158315750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615831906040805180820182526000808252602091820152815180830190925284518252808501908201526155bf565b1561583e57505050505050565b6040820151511561585e578160400151604051602001613b589190618ca8565b80604051602001613b589190618d06565b606060006158a48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615909905b8290615ed7565b1561597857604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973908390617354565b616d50565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159da905b82906173de565b600103615aa757604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a4090615706565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a8590615973905b8390616d2a565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b0690615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b6e908390617478565b905060008160018351615b81919061802e565b81518110615b9157615b91618721565b60200260200101519050615c34615973615c076040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617354565b95945050505050565b82604051602001613b589190618d71565b50919050565b60606000615c898360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ceb90615902565b15615cf957613a8581616d50565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d58906159d3565b600103615dc257604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a859061597390615aa0565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e2190615902565b15615c3d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e89908390617478565b9050600181511115615ec5578060028251615ea4919061802e565b81518110615eb457615eb4618721565b602002602001015192505050919050565b5082604051602001613b589190618d71565b805182516000911115615eec5750600061398c565b81518351602085015160009291615f0291618e4f565b615f0c919061802e565b905082602001518103615f2357600191505061398c565b82516020840151819020912014905092915050565b60606000615f458361751d565b600101905060008167ffffffffffffffff811115615f6557615f6561815b565b6040519080825280601f01601f191660200182016040528015615f8f576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f9957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616064905b82906175ff565b156160a457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161039061605d565b1561614357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161a29061605d565b156161e257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162419061605d565b806162a65750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162a69061605d565b156162e657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163459061605d565b806163aa5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163aa9061605d565b156163ea57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164499061605d565b806164ae5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164ae9061605d565b156164ee57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654d9061605d565b806165b25750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165b29061605d565b156165f257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166519061605d565b1561669157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166f09061605d565b1561673057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261678f9061605d565b156167cf57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261682e9061605d565b1561686e57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168cd9061605d565b1561690d57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696c9061605d565b806169d15750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169d19061605d565b15616a1157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a709061605d565b15616ab057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613b589290602001618e62565b60608060005b8451811015616b525781858281518110616ae957616ae9618721565b6020026020010151604051602001616b02929190618278565b604051602081830303815290604052915060018551616b21919061802e565b8114616b4a5781604051602001616b389190618fcb565b60405160208183030381529060405291505b600101616acd565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616b6b5790505090508381600081518110616b9657616b96618721565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616bea57616bea618721565b60200260200101819052508181600281518110616c0957616c09618721565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c3a9291849190617613565b14159392505050565b60408051808201909152600080825260208201526000616c758460000151856020015185600001518660200151617724565b9050836020015181616c87919061802e565b84518590616c9690839061802e565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616cca57508161398c565b6020808301519084015160019114616cf15750815160208481015190840151829020919020145b8015616d2257825184518590616d0890839061802e565b9052508251602085018051616d1e908390618e4f565b9052505b509192915050565b6040805180820190915260008082526020820152616d49838383617844565b5092915050565b60606000826000015167ffffffffffffffff811115616d7157616d7161815b565b6040519080825280601f01601f191660200182016040528015616d9b576020820181803683370190505b5090506000602082019050616d4981856020015186600001516178ef565b60606000616dc5613d82565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616de257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616e3d9061888e565b935060ff1681518110616e5257616e52618721565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616ea3919061900c565b604051602081830303815290604052828280616ebe9061888e565b935060ff1681518110616ed357616ed3618721565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f209061888e565b935060ff1681518110616f3557616f35618721565b602002602001018190525082604051602001616f5191906187bc565b604051602081830303815290604052828280616f6c9061888e565b935060ff1681518110616f8157616f81618721565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616fce9061888e565b935060ff1681518110616fe357616fe3618721565b6020026020010181905250616ff88784617969565b82826170038161888e565b935060ff168151811061701857617018618721565b6020908102919091010152855151156170c45760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261706a8161888e565b935060ff168151811061707f5761707f618721565b6020026020010181905250617098866000015184617969565b82826170a38161888e565b935060ff16815181106170b8576170b8618721565b60200260200101819052505b8560800151156171325760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261710d8161888e565b935060ff168151811061712257617122618721565b6020026020010181905250617198565b84156171985760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171778161888e565b935060ff168151811061718c5761718c618721565b60200260200101819052505b604086015151156172345760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171e28161888e565b935060ff16815181106171f7576171f7618721565b602002602001018190525085604001518282806172139061888e565b935060ff168151811061722857617228618721565b60200260200101819052505b85606001511561729e5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261727d8161888e565b935060ff168151811061729257617292618721565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156172bc576172bc61815b565b6040519080825280602002602001820160405280156172ef57816020015b60608152602001906001900390816172da5790505b50905060005b8260ff168160ff16101561734857838160ff168151811061731857617318618721565b6020026020010151828260ff168151811061733557617335618721565b60209081029190910101526001016172f5565b50979650505050505050565b604080518082019091526000808252602082015281518351101561737957508161398c565b8151835160208501516000929161738f91618e4f565b617399919061802e565b602084015190915060019082146173ba575082516020840151819020908220145b80156173d5578351855186906173d190839061802e565b9052505b50929392505050565b60008082600001516174028560000151866020015186600001518760200151617724565b61740c9190618e4f565b90505b835160208501516174209190618e4f565b8111616d49578161743081619051565b925050826000015161746785602001518361744b919061802e565b8651617457919061802e565b8386600001518760200151617724565b6174719190618e4f565b905061740f565b6060600061748684846173de565b617491906001618e4f565b67ffffffffffffffff8111156174a9576174a961815b565b6040519080825280602002602001820160405280156174dc57816020015b60608152602001906001900390816174c75790505b50905060005b8151811015615751576174f86159738686616d2a565b82828151811061750a5761750a618721565b60209081029190910101526001016174e2565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617566577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617592576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106175b057662386f26fc10000830492506010015b6305f5e10083106175c8576305f5e100830492506008015b61271083106175dc57612710830492506004015b606483106175ee576064830492506002015b600a831061398c5760010192915050565b600061760b83836179a9565b159392505050565b60008085841161771a57602084116176c6576000841561765e57600161763a86602061802e565b61764590600861906b565b617650906002619169565b61765a919061802e565b1990505b835181168561766d8989618e4f565b617677919061802e565b805190935082165b8181146176b1578784116176995787945050505050615382565b836176a381619175565b94505082845116905061767f565b6176bb8785618e4f565b945050505050615382565b8383206176d3858861802e565b6176dd9087618e4f565b91505b85821061771857848220808203617705576176fb8684618e4f565b9350505050615382565b61771060018461802e565b9250506176e0565b505b5092949350505050565b6000838186851161782f57602085116177de576000851561777057600161774c87602061802e565b61775790600861906b565b617762906002619169565b61776c919061802e565b1990505b845181166000876177818b8b618e4f565b61778b919061802e565b855190915083165b8281146177d0578186106177b8576177ab8b8b618e4f565b9650505050505050615382565b856177c281619051565b965050838651169050617793565b859650505050505050615382565b508383206000905b6177f0868961802e565b821161782d5785832080820361780c5783945050505050615382565b617817600185618e4f565b935050818061782590619051565b9250506177e6565b505b6178398787618e4f565b979650505050505050565b604080518082019091526000808252602082015260006178768560000151866020015186600001518760200151617724565b602080870180519186019190915251909150617892908261802e565b8352845160208601516178a59190618e4f565b81036178b457600085526178e6565b835183516178c29190618e4f565b855186906178d190839061802e565b90525083516178e09082618e4f565b60208601525b50909392505050565b602081106179275781518352617906602084618e4f565b9250617913602083618e4f565b915061792060208261802e565b90506178ef565b600019811561795657600161793d83602061802e565b61794990610100619169565b617953919061802e565b90505b9151835183169219169190911790915250565b606060006179778484613e55565b80516020808301516040519394506179919390910161918c565b60405160208183030381529060405291505092915050565b81518151600091908111156179bc575081515b6020808501519084015160005b83811015617a755782518251808214617a45576000196020871015617a24576001846179f689602061802e565b617a009190618e4f565b617a0b90600861906b565b617a16906002619169565b617a20919061802e565b1990505b8181168382168181039114617a4257975061398c9650505050505050565b50505b617a50602086618e4f565b9450617a5d602085618e4f565b93505050602081617a6e9190618e4f565b90506179c9565b508451865161450391906191e4565b610c9f8061920583390190565b61140b80619ea483390190565b6115f68061b2af83390190565b610d5e8061c8a583390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617afb617b00565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617afb6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617bb25783516001600160a01b0316835260209384019390920191600101617b8b565b509095945050505050565b60005b83811015617bd8578181015183820152602001617bc0565b50506000910152565b60008151808452617bf9816020860160208601617bbd565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617cef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617cd9848651617be1565b6020958601959094509290920191600101617c9f565b509197505050602094850194929092019150600101617c35565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d695781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d29565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617ddf6040880182617be1565b9050602082015191508681036020880152617dfa8183617d15565b965050506020938401939190910190600101617d9b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e73858351617be1565b94506020938401939190910190600101617e39565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f096040870182617d15565b9550506020938401939190910190600101617eb0565b600181811c90821680617f3357607f821691505b602082108103615c4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f7e57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615c346060830184617be1565b8281526040602082015260006153826040830184617be1565b6001600160a01b0385168152836020820152608060408201526000617fee6080830185617be1565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561398c5761398c617fff565b602081526000613a856020830184617be1565b60008261808a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153826040830184617be1565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516180e981601a850160208801617bbd565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161812681601c840160208801617bbd565b01601c01949350505050565b60006020828403121561814457600080fd5b81516001600160a01b0381168114613a8557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156181ad576181ad61815b565b60405290565b60008067ffffffffffffffff8411156181ce576181ce61815b565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156181fd576181fd61815b565b60405283815290508082840185101561821557600080fd5b615751846020830185617bbd565b600082601f83011261823457600080fd5b613a85838351602085016181b3565b60006020828403121561825557600080fd5b815167ffffffffffffffff81111561826c57600080fd5b61398884828501618223565b6000835161828a818460208801617bbd565b83519083019061829e818360208801617bbd565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516182df81601a850160208801617bbd565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161831c816033840160208801617bbd565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a856080830184617be1565b6000602082840312156183ab57600080fd5b815167ffffffffffffffff8111156183c257600080fd5b8201601f810184136183d357600080fd5b613988848251602084016181b3565b600085516183f4818460208a01617bbd565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161842e816001840160208a01617bbd565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161846c816002840160208901617bbd565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516184ae816002840160208801617bbd565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184f96040830184617be1565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b60006020828403121561854a57600080fd5b81518015158114613a8557600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161859281601f850160208701617bbd565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006185ff6040830184617be1565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006186516040830184617be1565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516186c8816014850160208701617bbd565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061870f6040830185617be1565b8281036020840152613a818185617be1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618788816001850160208701617bbd565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516187ce818460208701617bbd565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161888181604b850160208701617bbd565b91909101604b0192915050565b600060ff821660ff81036188a4576188a4617fff565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a856080830184617be1565b60006020828403121561897157600080fd5b815167ffffffffffffffff81111561898857600080fd5b82016060818503121561899a57600080fd5b6189a261818a565b81518060030b81146189b357600080fd5b8152602082015167ffffffffffffffff8111156189cf57600080fd5b6189db86828501618223565b602083015250604082015167ffffffffffffffff8111156189fb57600080fd5b618a0786828501618223565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618a73816021850160208701617bbd565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618c5f816021850160208801617bbd565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c9c81602e840160208801617bbd565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161890b816029850160208701617bbd565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618d64816022850160208701617bbd565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618da981600e850160208701617bbd565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561398c5761398c617fff565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e9a816018850160208801617bbd565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618ed781601c840160208801617bbd565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618fdd818460208701617bbd565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161904481601c850160208701617bbd565b91909101601c0192915050565b6000600019820361906457619064617fff565b5060010190565b808202811582820484141761398c5761398c617fff565b6001815b60018411156190bd578085048111156190a1576190a1617fff565b60018416156190af57908102905b60019390931c928002619086565b935093915050565b6000826190d45750600161398c565b816190e15750600061398c565b81600181146190f757600281146191015761911d565b600191505061398c565b60ff84111561911257619112617fff565b50506001821b61398c565b5060208310610133831016604e8410600b8410161715619140575081810a61398c565b61914d6000198484619082565b806000190482111561916157619161617fff565b029392505050565b6000613a8583836190c5565b60008161918457619184617fff565b506000190190565b6000835161919e818460208801617bbd565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516191d8816001840160208801617bbd565b01600101949350505050565b8181036000831280158383131683831282161715616d4957616d49617fff56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405234801561001057600080fd5b506040516115f63803806115f683398101604081905261002f916101ef565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf600082610123565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610123565b506101157f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610123565b505050505050505050610243565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101c95760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101813390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101cd565b5060005b92915050565b80516001600160a01b03811681146101ea57600080fd5b919050565b6000806000806080858703121561020557600080fd5b61020e856101d3565b935061021c602086016101d3565b925061022a604086016101d3565b9150610238606086016101d3565b905092959194509250565b60805160a0516113486102ae600039600081816101dc01528181610432015281816104e3015281816105fd0152818161079101528181610842015261091001526000818161019001528181610454015281816104b6015281816107b3015261081501526113486000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80635c975abb116100b257806385f438c111610081578063a217fddf11610066578063a217fddf14610303578063d547741f1461030b578063e63ab1e91461031e57600080fd5b806385f438c11461029657806391d14854146102bd57600080fd5b80635c975abb1461025d5780635e3e9fef14610268578063743e0c9b1461027b5780638456cb591461028e57600080fd5b806321e093b1116101095780632f2ff15d116100ee5780632f2ff15d1461022f57806336568abe146102425780633f4ba83a1461025557600080fd5b806321e093b1146101d7578063248a9ca3146101fe57600080fd5b806301ffc9a71461013b57806302d5c89914610163578063106e629014610178578063116191b61461018b575b600080fd5b61014e610149366004611083565b610345565b60405190151581526020015b60405180910390f35b6101766101713660046110ee565b6103de565b005b610176610186366004611180565b6105a9565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b61022161020c3660046111b3565b60009081526002602052604090206001015490565b60405190815260200161015a565b61017661023d3660046111cc565b610684565b6101766102503660046111cc565b6106af565b610176610708565b60015460ff1661014e565b6101766102763660046110ee565b61073d565b6101766102893660046111b3565b6108ee565b610176610938565b6102217f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61014e6102cb3660046111cc565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610221600081565b6101766103193660046111cc565b61096a565b6102217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103d857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103e661098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610410816109d2565b6104186109dc565b61047973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610513907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161058f9392919061129e565b60405180910390a2506105a26001600055565b5050505050565b6105b161098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46105db816109d2565b6105e36109dc565b61062473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a1b565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161066c91815260200190565b60405180910390a25061067f6001600055565b505050565b60008281526002602052604090206001015461069f816109d2565b6106a98383610a9c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106fe576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61067f8282610b9c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610732816109d2565b61073a610c5b565b50565b61074561098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f816109d2565b6107776109dc565b6107d873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610872907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561088c57600080fd5b505af11580156108a0573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161058f9392919061129e565b6108f66109dc565b61073a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610cd8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610962816109d2565b61073a610d1e565b600082815260026020526040902060010154610985816109d2565b6106a98383610b9c565b6002600054036109cb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61073a8133610d77565b60015460ff1615610a19576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261067f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e08565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b323390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016103d8565b5060006103d8565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103d8565b610c63610e9e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106a99186918216906323b872dd90608401610a55565b610d266109dc565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cae565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e04576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e2a73ffffffffffffffffffffffffffffffffffffffff841683610eda565b90508051600014158015610e4f575080806020019051810190610e4d91906112c1565b155b1561067f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610dfb565b60015460ff16610a19576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610ee883836000610eef565b9392505050565b606081471015610f2d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610dfb565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f5691906112e3565b60006040518083038185875af1925050503d8060008114610f93576040519150601f19603f3d011682016040523d82523d6000602084013e610f98565b606091505b5091509150610fa8868383610fb2565b9695505050505050565b606082610fc757610fc282611041565b610ee8565b8151158015610feb575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561103a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610dfb565b5080610ee8565b8051156110515780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561109557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ee857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146110e957600080fd5b919050565b60008060008060006080868803121561110657600080fd5b61110f866110c5565b945060208601359350604086013567ffffffffffffffff81111561113257600080fd5b8601601f8101881361114357600080fd5b803567ffffffffffffffff81111561115a57600080fd5b88602082840101111561116c57600080fd5b959894975060200195606001359392505050565b60008060006060848603121561119557600080fd5b61119e846110c5565b95602085013595506040909401359392505050565b6000602082840312156111c557600080fd5b5035919050565b600080604083850312156111df57600080fd5b823591506111ef602084016110c5565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112936080830184866111f8565b979650505050505050565b8381526040602082015260006112b86040830184866111f8565b95945050505050565b6000602082840312156112d357600080fd5b81518015158114610ee857600080fd5b6000825160005b8181101561130457602081860181015185830152016112ea565b50600092019182525091905056fea2646970667358221220acfa51062c59716e02e413798f47a294f807ab6bfe6bcb7c13ce0530e6e5b1b864736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220747a3818b31faffeb08f09bfe6ae14783dd67e80a08be60f3ad20e065e59915f64736f6c634300081a0033", } // ZetaConnectorNativeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go index d002b04a..12508b51 100644 --- a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go +++ b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNonNativeMetaData contains all meta data concerning the ZetaConnectorNonNative contract. var ZetaConnectorNonNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_zetaToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_tssAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"_maxSupply\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a0033", } // ZetaConnectorNonNativeABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var ZetaConnectorNonNativeABI = ZetaConnectorNonNativeMetaData.ABI var ZetaConnectorNonNativeBin = ZetaConnectorNonNativeMetaData.Bin // DeployZetaConnectorNonNative deploys a new Ethereum contract, binding an instance of ZetaConnectorNonNative to it. -func DeployZetaConnectorNonNative(auth *bind.TransactOpts, backend bind.ContractBackend, _gateway common.Address, _zetaToken common.Address, _tssAddress common.Address, _admin common.Address) (common.Address, *types.Transaction, *ZetaConnectorNonNative, error) { +func DeployZetaConnectorNonNative(auth *bind.TransactOpts, backend bind.ContractBackend, gateway_ common.Address, zetaToken_ common.Address, tssAddress_ common.Address, admin_ common.Address) (common.Address, *types.Transaction, *ZetaConnectorNonNative, error) { parsed, err := ZetaConnectorNonNativeMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployZetaConnectorNonNative(auth *bind.TransactOpts, backend bind.Contract return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNonNativeBin), backend, _gateway, _zetaToken, _tssAddress, _admin) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNonNativeBin), backend, gateway_, zetaToken_, tssAddress_, admin_) if err != nil { return common.Address{}, nil, nil, err } @@ -481,37 +481,6 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) SupportsInte return _ZetaConnectorNonNative.Contract.SupportsInterface(&_ZetaConnectorNonNative.CallOpts, interfaceId) } -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ZetaConnectorNonNative.contract.Call(opts, &out, "tssAddress") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) TssAddress() (common.Address, error) { - return _ZetaConnectorNonNative.Contract.TssAddress(&_ZetaConnectorNonNative.CallOpts) -} - -// TssAddress is a free data retrieval call binding the contract method 0x5b112591. -// -// Solidity: function tssAddress() view returns(address) -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) TssAddress() (common.Address, error) { - return _ZetaConnectorNonNative.Contract.TssAddress(&_ZetaConnectorNonNative.CallOpts) -} - // ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. // // Solidity: function zetaToken() view returns(address) @@ -650,23 +619,23 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) RevokeRo // SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0. // -// Solidity: function setMaxSupply(uint256 _maxSupply) returns() -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactor) SetMaxSupply(opts *bind.TransactOpts, _maxSupply *big.Int) (*types.Transaction, error) { - return _ZetaConnectorNonNative.contract.Transact(opts, "setMaxSupply", _maxSupply) +// Solidity: function setMaxSupply(uint256 maxSupply_) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactor) SetMaxSupply(opts *bind.TransactOpts, maxSupply_ *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNonNative.contract.Transact(opts, "setMaxSupply", maxSupply_) } // SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0. // -// Solidity: function setMaxSupply(uint256 _maxSupply) returns() -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) SetMaxSupply(_maxSupply *big.Int) (*types.Transaction, error) { - return _ZetaConnectorNonNative.Contract.SetMaxSupply(&_ZetaConnectorNonNative.TransactOpts, _maxSupply) +// Solidity: function setMaxSupply(uint256 maxSupply_) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) SetMaxSupply(maxSupply_ *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.SetMaxSupply(&_ZetaConnectorNonNative.TransactOpts, maxSupply_) } // SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0. // -// Solidity: function setMaxSupply(uint256 _maxSupply) returns() -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) SetMaxSupply(_maxSupply *big.Int) (*types.Transaction, error) { - return _ZetaConnectorNonNative.Contract.SetMaxSupply(&_ZetaConnectorNonNative.TransactOpts, _maxSupply) +// Solidity: function setMaxSupply(uint256 maxSupply_) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) SetMaxSupply(maxSupply_ *big.Int) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.SetMaxSupply(&_ZetaConnectorNonNative.TransactOpts, maxSupply_) } // Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. diff --git a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go index 64f55d0e..b2e8b56a 100644 --- a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go +++ b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNonNativeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeTest contract. var ZetaConnectorNonNativeTestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Call\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RevertedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061dddc8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063d509b16c1161008c578063e20c9f7111610066578063e20c9f71146102a8578063fa7626d4146102b0578063fe574f84146102bd57600080fd5b8063d509b16c14610290578063dcf7d03714610298578063de1cb76c146102a057600080fd5b8063b5508aa9116100bd578063b5508aa914610268578063ba414fa614610270578063c19099721461028857600080fd5b8063916a17c61461024b578063b0464fdc1461026057600080fd5b80633f7286f41161013a578063828320141161011457806382832014146101f957806385226c811461020157806385f438c11461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806366d9a9a0146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b6101996109c4565b6040516101a69190617b03565b60405180910390f35b6101b7610a26565b6040516101a69190617b9f565b61018f610b68565b610199611343565b6101996113a3565b61018f611403565b6101ec6119f0565b6040516101a69190617d05565b61018f611b72565b610209611de4565b6040516101a69190617da3565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101a6565b610253611eb4565b6040516101a69190617e1a565b610253611faf565b6102096120aa565b61027861217a565b60405190151581526020016101a6565b61018f61224e565b61018f6124d2565b61018f6128f2565b61018f612f39565b61019961366e565b601f546102789060ff1681565b61018f6136ce565b60258054307fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556026805461123490831617905560278054615678921682179055604051819061031a90617a16565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801561034d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261043e919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613905565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556027546025546040519293918216929116906104ca90617a23565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610506573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061056190617a30565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105a5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561064357600080fd5b505af1158015610657573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b1580156106ca57600080fd5b505af11580156106de573d6000803e3d6000fd5b505050506040516106ee90617a3d565b604051809103906000f08015801561070a573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561084057600080fd5b505af1158015610854573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156108ba57600080fd5b505af11580156108ce573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a1c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109fe575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610b5f57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610b48578382906000526020600020018054610abb90617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae790617eb1565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081526020019060010190610a9c565b505050508152505081526020019060010190610a4a565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190617efe565b9050610c74816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190617efe565b9050610cf5816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610ddc916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015610df657600080fd5b505af1158015610e0a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610e9c57600080fd5b505af1158015610eb0573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610f9f57600080fd5b505af1158015610fb3573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150610ff89089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561107257600080fd5b505af1158015611086573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506110de92909116908a9089908b90600401617f58565b600060405180830381600087803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190617efe565b905061118e8188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156111de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112029190617efe565b905061120f816000613924565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190617efe565b90506112b6816000613924565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a9190617efe565b9050611337816000613924565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936114a493921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190617efe565b90506114f2816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190617efe565b9050611573816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161165a916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561171a57600080fd5b505af115801561172e573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561180057600080fd5b505af1158015611814573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118599089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118d357600080fd5b505af11580156118e7573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061193f92909116908a9089908b90600401617f58565b600060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190617efe565b905061118e816000613924565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000209060020201604051806040016040529081600082018054611a4790617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7390617eb1565b8015611ac05780601f10611a9557610100808354040283529160200191611ac0565b820191906000526020600020905b815481529060010190602001808311611aa357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611b5a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b075790505b50505050508152505081526020019060010190611a14565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611d279190600401617f91565b600060405180830381600087803b158015611d4157600080fd5b505af1158015611d55573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611dad9290911690879086908890600401617f58565b600060405180830381600087803b158015611dc757600080fd5b505af1158015611ddb573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610b5f578382906000526020600020018054611e2790617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5390617eb1565b8015611ea05780601f10611e7557610100808354040283529160200191611ea0565b820191906000526020600020905b815481529060010190602001808311611e8357829003601f168201915b505050505081526020019060010190611e08565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611f9757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f445790505b50505050508152505081526020019060010190611ed8565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561209257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161203f5790505b50505050508152505081526020019060010190611fd3565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000200180546120ed90617eb1565b80601f016020809104026020016040519081016040528092919081815260200182805461211990617eb1565b80156121665780601f1061213b57610100808354040283529160200191612166565b820191906000526020600020905b81548152906001019060200180831161214957829003601f168201915b5050505050815260200190600101906120ce565b60085460009060ff1615612192575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122479190617efe565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561234d57600080fd5b505af1158015612361573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061244c9190600401617f91565b600060405180830381600087803b15801561246657600080fd5b505af115801561247a573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611dad9290911690879086908890600401617f58565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015612527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254b9190617efe565b9050612558816000613924565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612641916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561265b57600080fd5b505af115801561266f573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156127cd57600080fd5b505af11580156127e1573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401600060405180830381600087803b15801561285557600080fd5b505af1158015612869573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156128bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128df9190617efe565b90506128eb8186613924565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156129cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f19190617efe565b90506129fe816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a729190617efe565b9050612a7f816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612b66916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015612b8057600080fd5b505af1158015612b94573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612c2657600080fd5b505af1158015612c3a573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612c78600289617fd3565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612d4057600080fd5b505af1158015612d54573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150612d999089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e1357600080fd5b505af1158015612e27573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612e7f92909116908a9089908b90600401617f58565b600060405180830381600087803b158015612e9957600080fd5b505af1158015612ead573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f239190617efe565b905061118e81612f3460028a617fd3565b613924565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015612fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff29190617efe565b9050612fff816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561304f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130739190617efe565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161315d916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561317757600080fd5b505af115801561318b573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561321d57600080fd5b505af1158015613231573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa935061327492506001600160a01b0390911690879061800e565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561330a57600080fd5b505af115801561331e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613369908a908990617f3f565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156133ff57600080fd5b505af1158015613413573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe91506134589089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156134d257600080fd5b505af11580156134e6573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061353e92909116908a9089908b90600401617f58565b600060405180830381600087803b15801561355857600080fd5b505af115801561356c573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156135be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e29190617efe565b90506135ee8188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561363e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136629190617efe565b905061120f8185613924565b60606015805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561374857600080fd5b505af115801561375c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138479190600401617f91565b600060405180830381600087803b15801561386157600080fd5b505af1158015613875573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b505050505050565b600061390f617a4a565b61391a8484836139a3565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561398f57600080fd5b505afa1580156138fd573d6000803e3d6000fd5b6000806139b08584613a1e565b9050613a136040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016139fe92919061800e565b60405160208183030381529060405285613a2a565b9150505b9392505050565b6000613a178383613a58565b60c08101515160009015613a4e57613a4784848460c00151613a73565b9050613a17565b613a478484613c19565b6000613a648383613d04565b613a1783836020015184613a2a565b600080613a7e613d14565b90506000613a8c8683613de7565b90506000613aa3826060015183602001518561428d565b90506000613ab38383898961449f565b90506000613ac08261531c565b602081015181519192509060030b15613b3357898260400151604051602001613aea929190618030565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b2a91600401617f91565b60405180910390fd5b6000613b766040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016154eb565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613bc9908490600401617f91565b602060405180830381865afa158015613be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0a91906180b1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613c6e908790600401617f91565b600060405180830381865afa158015613c8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cb391908101906181c2565b90506000613ce18285604051602001613ccd9291906181f7565b6040516020818303038152906040526156eb565b90506001600160a01b03811661391a578484604051602001613aea929190618226565b613d10828260006156fe565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613d9b9084906004016182d1565b600060405180830381865afa158015613db8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613de09190810190618318565b9250505090565b613e196040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613e646040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613e6d85615801565b60208201526000613e7d86615be6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613ebf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ee79190810190618318565b86838560200151604051602001613f019493929190618361565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613f59908590600401617f91565b600060405180830381865afa158015613f76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9e9190810190618318565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613fe6908490600401618465565b602060405180830381865afa158015614003573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402791906184b7565b61403c5781604051602001613aea91906184d9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061408190849060040161856b565b600060405180830381865afa15801561409e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140c69190810190618318565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061410d9084906004016185bd565b602060405180830381865afa15801561412a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414e91906184b7565b156141e3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141989084906004016185bd565b600060405180830381865afa1580156141b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141dd9190810190618318565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614208919061860f565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161423492919061867b565b600060405180830381865afa158015614251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142799190810190618318565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816142a95790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614309576143096186a0565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061435d5761435d6186a0565b60200260200101819052508460405160200161437991906186cf565b6040516020818303038152906040528160028151811061439b5761439b6186a0565b6020026020010181905250826040516020016143b7919061873b565b604051602081830303815290604052816003815181106143d9576143d96186a0565b602002602001018190525060006143ef8261531c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144809060408051808201825260008082526020918201528151808301909252845182528085019082015290615e69565b6144955785604051602001613aea919061877c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156144ef565b511590565b614663578260200151156145ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b2a565b8260c0015115614663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b2a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161467c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806146d79061880d565b935060ff16815181106146ec576146ec6186a0565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161473d919061882c565b6040516020818303038152906040528282806147589061880d565b935060ff168151811061476d5761476d6186a0565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806147ba9061880d565b935060ff16815181106147cf576147cf6186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061481c9061880d565b935060ff1681518110614831576148316186a0565b6020026020010181905250876020015182828061484d9061880d565b935060ff1681518110614862576148626186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806148af9061880d565b935060ff16815181106148c4576148c46186a0565b6020908102919091010152875182826148dc8161880d565b935060ff16815181106148f1576148f16186a0565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061493e9061880d565b935060ff1681518110614953576149536186a0565b602002602001018190525061496746615eca565b82826149728161880d565b935060ff1681518110614987576149876186a0565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806149d49061880d565b935060ff16815181106149e9576149e96186a0565b602002602001018190525086828280614a019061880d565b935060ff1681518110614a1657614a166186a0565b6020908102919091010152855115614b3d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614a678161880d565b935060ff1681518110614a7c57614a7c6186a0565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614acc908990600401617f91565b600060405180830381865afa158015614ae9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b119190810190618318565b8282614b1c8161880d565b935060ff1681518110614b3157614b316186a0565b60200260200101819052505b846020015115614c0d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614b868161880d565b935060ff1681518110614b9b57614b9b6186a0565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614be89061880d565b935060ff1681518110614bfd57614bfd6186a0565b6020026020010181905250614dd4565b614c456144ea8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614cd85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c888161880d565b935060ff1681518110614c9d57614c9d6186a0565b60200260200101819052508460a00151604051602001614cbd91906186cf565b604051602081830303815290604052828280614be89061880d565b8460c00151158015614d1b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d1990511590565b155b15614dd45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d5f8161880d565b935060ff1681518110614d7457614d746186a0565b6020026020010181905250614d8888615f6a565b604051602001614d9891906186cf565b604051602081830303815290604052828280614db39061880d565b935060ff1681518110614dc857614dc86186a0565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e0890511590565b614e9d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614e4b8161880d565b935060ff1681518110614e6057614e606186a0565b60200260200101819052508460400151828280614e7c9061880d565b935060ff1681518110614e9157614e916186a0565b60200260200101819052505b606085015115614fbe5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614ee68161880d565b935060ff1681518110614efb57614efb6186a0565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614f6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f929190810190618318565b8282614f9d8161880d565b935060ff1681518110614fb257614fb26186a0565b60200260200101819052505b60e085015151156150655760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150088161880d565b935060ff168151811061501d5761501d6186a0565b60200260200101819052506150398560e0015160000151615eca565b82826150448161880d565b935060ff1681518110615059576150596186a0565b60200260200101819052505b60e0850151602001511561510f5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826150b28161880d565b935060ff16815181106150c7576150c76186a0565b60200260200101819052506150e38560e0015160200151615eca565b82826150ee8161880d565b935060ff1681518110615103576151036186a0565b60200260200101819052505b60e085015160400151156151b95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261515c8161880d565b935060ff1681518110615171576151716186a0565b602002602001018190525061518d8560e0015160400151615eca565b82826151988161880d565b935060ff16815181106151ad576151ad6186a0565b60200260200101819052505b60e085015160600151156152635760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152068161880d565b935060ff168151811061521b5761521b6186a0565b60200260200101819052506152378560e0015160600151615eca565b82826152428161880d565b935060ff1681518110615257576152576186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615281576152816180da565b6040519080825280602002602001820160405280156152b457816020015b606081526020019060019003908161529f5790505b50905060005b8260ff168160ff16101561530d57838160ff16815181106152dd576152dd6186a0565b6020026020010151828260ff16815181106152fa576152fa6186a0565b60209081029190910101526001016152ba565b5093505050505b949350505050565b6153436040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916153c991869101618897565b600060405180830381865afa1580156153e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261540e9190810190618318565b9050600061541c8683616a59565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161544c9190617da3565b6000604051808303816000875af115801561546b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261549391908101906188de565b805190915060030b158015906154ac5750602081015151155b80156154bb5750604081015151155b1561449557816000815181106154d3576154d36186a0565b6020026020010151604051602001613aea9190618994565b606060006155208560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155579082905b90616bae565b156156b45760006155d4826155ce846155c861559a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616bd5565b90616c37565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615638908290616bae565b156156a257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261569f905b8290616cbc565b90505b6156ab81616ce2565b92505050613a17565b82156156cd578484604051602001613aea929190618b80565b5050604080516020810190915260008152613a17565b509392505050565b6000808251602084016000f09392505050565b8160a001511561570d57505050565b600061571a848484616d4b565b905060006157278261531c565b602081015181519192509060030b1580156157c35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157c390604080518082018252600080825260209182015281518083019092528451825280850190820152615551565b156157d057505050505050565b604082015151156157f0578160400151604051602001613aea9190618c27565b80604051602001613aea9190618c85565b606060006158368360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061589b905b8290615e69565b1561590a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a17906159059083906172e6565b616ce2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261596c905b8290617370565b600103615a3957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159d290615698565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a1790615905905b8390616cbc565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a9890615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b0090839061740a565b905060008160018351615b139190618cf0565b81518110615b2357615b236186a0565b60200260200101519050615bc6615905615b996040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906172e6565b95945050505050565b82604051602001613aea9190618d03565b50919050565b60606000615c1b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c7d90615894565b15615c8b57613a1781616ce2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cea90615965565b600103615d5457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a179061590590615a32565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615db390615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e1b90839061740a565b9050600181511115615e57578060028251615e369190618cf0565b81518110615e4657615e466186a0565b602002602001015192505050919050565b5082604051602001613aea9190618d03565b805182516000911115615e7e5750600061391e565b81518351602085015160009291615e9491618de1565b615e9e9190618cf0565b905082602001518103615eb557600191505061391e565b82516020840151819020912014905092915050565b60606000615ed7836174af565b600101905060008167ffffffffffffffff811115615ef757615ef76180da565b6040519080825280601f01601f191660200182016040528015615f21576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f2b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615ff6905b8290617591565b1561603657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261609590615fef565b156160d557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261613490615fef565b1561617457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161d390615fef565b806162385750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261623890615fef565b1561627857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162d790615fef565b8061633c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261633c90615fef565b1561637c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163db90615fef565b806164405750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261644090615fef565b1561648057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164df90615fef565b806165445750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654490615fef565b1561658457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165e390615fef565b1561662357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261668290615fef565b156166c257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261672190615fef565b1561676157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167c090615fef565b1561680057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685f90615fef565b1561689f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168fe90615fef565b806169635750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696390615fef565b156169a357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a0290615fef565b15616a4257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613aea9290602001618df4565b60608060005b8451811015616ae45781858281518110616a7b57616a7b6186a0565b6020026020010151604051602001616a949291906181f7565b604051602081830303815290604052915060018551616ab39190618cf0565b8114616adc5781604051602001616aca9190618f5d565b60405160208183030381529060405291505b600101616a5f565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616afd5790505090508381600081518110616b2857616b286186a0565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616b7c57616b7c6186a0565b60200260200101819052508181600281518110616b9b57616b9b6186a0565b6020908102919091010152949350505050565b6020808301518351835192840151600093616bcc92918491906175a5565b14159392505050565b60408051808201909152600080825260208201526000616c0784600001518560200151856000015186602001516176b6565b9050836020015181616c199190618cf0565b84518590616c28908390618cf0565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616c5c57508161391e565b6020808301519084015160019114616c835750815160208481015190840151829020919020145b8015616cb457825184518590616c9a908390618cf0565b9052508251602085018051616cb0908390618de1565b9052505b509192915050565b6040805180820190915260008082526020820152616cdb8383836177d6565b5092915050565b60606000826000015167ffffffffffffffff811115616d0357616d036180da565b6040519080825280601f01601f191660200182016040528015616d2d576020820181803683370190505b5090506000602082019050616cdb8185602001518660000151617881565b60606000616d57613d14565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616d7457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dcf9061880d565b935060ff1681518110616de457616de46186a0565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e359190618f9e565b604051602081830303815290604052828280616e509061880d565b935060ff1681518110616e6557616e656186a0565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616eb29061880d565b935060ff1681518110616ec757616ec76186a0565b602002602001018190525082604051602001616ee3919061873b565b604051602081830303815290604052828280616efe9061880d565b935060ff1681518110616f1357616f136186a0565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616f609061880d565b935060ff1681518110616f7557616f756186a0565b6020026020010181905250616f8a87846178fb565b8282616f958161880d565b935060ff1681518110616faa57616faa6186a0565b6020908102919091010152855151156170565760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616ffc8161880d565b935060ff1681518110617011576170116186a0565b602002602001018190525061702a8660000151846178fb565b82826170358161880d565b935060ff168151811061704a5761704a6186a0565b60200260200101819052505b8560800151156170c45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261709f8161880d565b935060ff16815181106170b4576170b46186a0565b602002602001018190525061712a565b841561712a5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171098161880d565b935060ff168151811061711e5761711e6186a0565b60200260200101819052505b604086015151156171c65760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171748161880d565b935060ff1681518110617189576171896186a0565b602002602001018190525085604001518282806171a59061880d565b935060ff16815181106171ba576171ba6186a0565b60200260200101819052505b8560600151156172305760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261720f8161880d565b935060ff1681518110617224576172246186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561724e5761724e6180da565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b8260ff168160ff1610156172da57838160ff16815181106172aa576172aa6186a0565b6020026020010151828260ff16815181106172c7576172c76186a0565b6020908102919091010152600101617287565b50979650505050505050565b604080518082019091526000808252602082015281518351101561730b57508161391e565b8151835160208501516000929161732191618de1565b61732b9190618cf0565b6020840151909150600190821461734c575082516020840151819020908220145b801561736757835185518690617363908390618cf0565b9052505b50929392505050565b600080826000015161739485600001518660200151866000015187602001516176b6565b61739e9190618de1565b90505b835160208501516173b29190618de1565b8111616cdb57816173c281618fe3565b92505082600001516173f98560200151836173dd9190618cf0565b86516173e99190618cf0565b83866000015187602001516176b6565b6174039190618de1565b90506173a1565b606060006174188484617370565b617423906001618de1565b67ffffffffffffffff81111561743b5761743b6180da565b60405190808252806020026020018201604052801561746e57816020015b60608152602001906001900390816174595790505b50905060005b81518110156156e35761748a6159058686616cbc565b82828151811061749c5761749c6186a0565b6020908102919091010152600101617474565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106174f8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617524576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061754257662386f26fc10000830492506010015b6305f5e100831061755a576305f5e100830492506008015b612710831061756e57612710830492506004015b60648310617580576064830492506002015b600a831061391e5760010192915050565b600061759d838361793b565b159392505050565b6000808584116176ac576020841161765857600084156175f05760016175cc866020618cf0565b6175d7906008618ffd565b6175e29060026190fb565b6175ec9190618cf0565b1990505b83518116856175ff8989618de1565b6176099190618cf0565b805190935082165b8181146176435787841161762b5787945050505050615314565b8361763581619107565b945050828451169050617611565b61764d8785618de1565b945050505050615314565b8383206176658588618cf0565b61766f9087618de1565b91505b8582106176aa578482208082036176975761768d8684618de1565b9350505050615314565b6176a2600184618cf0565b925050617672565b505b5092949350505050565b600083818685116177c1576020851161777057600085156177025760016176de876020618cf0565b6176e9906008618ffd565b6176f49060026190fb565b6176fe9190618cf0565b1990505b845181166000876177138b8b618de1565b61771d9190618cf0565b855190915083165b8281146177625781861061774a5761773d8b8b618de1565b9650505050505050615314565b8561775481618fe3565b965050838651169050617725565b859650505050505050615314565b508383206000905b6177828689618cf0565b82116177bf5785832080820361779e5783945050505050615314565b6177a9600185618de1565b93505081806177b790618fe3565b925050617778565b505b6177cb8787618de1565b979650505050505050565b6040805180820190915260008082526020820152600061780885600001518660200151866000015187602001516176b6565b6020808701805191860191909152519091506178249082618cf0565b8352845160208601516178379190618de1565b81036178465760008552617878565b835183516178549190618de1565b85518690617863908390618cf0565b90525083516178729082618de1565b60208601525b50909392505050565b602081106178b95781518352617898602084618de1565b92506178a5602083618de1565b91506178b2602082618cf0565b9050617881565b60001981156178e85760016178cf836020618cf0565b6178db906101006190fb565b6178e59190618cf0565b90505b9151835183169219169190911790915250565b606060006179098484613de7565b80516020808301516040519394506179239390910161911e565b60405160208183030381529060405291505092915050565b815181516000919081111561794e575081515b6020808501519084015160005b83811015617a0757825182518082146179d75760001960208710156179b657600184617988896020618cf0565b6179929190618de1565b61799d906008618ffd565b6179a89060026190fb565b6179b29190618cf0565b1990505b81811683821681810391146179d457975061391e9650505050505050565b50505b6179e2602086618de1565b94506179ef602085618de1565b93505050602081617a009190618de1565b905061795b565b50845186516144959190619176565b6112a68061919783390190565b6113e28061a43d83390190565b61182a8061b81f83390190565b610d5e8061d04983390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617a8d617a92565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617a8d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617b445783516001600160a01b0316835260209384019390920191600101617b1d565b509095945050505050565b60005b83811015617b6a578181015183820152602001617b52565b50506000910152565b60008151808452617b8b816020860160208601617b4f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617c81577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617c6b848651617b73565b6020958601959094509290920191600101617c31565b509197505050602094850194929092019150600101617bc7565b50929695505050505050565b600081518084526020840193506020830160005b82811015617cfb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617cbb565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617d716040880182617b73565b9050602082015191508681036020880152617d8c8183617ca7565b965050506020938401939190910190600101617d2d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e05858351617b73565b94506020938401939190910190600101617dcb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617e9b6040870182617ca7565b9550506020938401939190910190600101617e42565b600181811c90821680617ec557607f821691505b602082108103615be0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f1057600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615bc66060830184617b73565b8281526040602082015260006153146040830184617b73565b6001600160a01b0385168152836020820152608060408201526000617f806080830185617b73565b905082606083015295945050505050565b602081526000613a176020830184617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082618009577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153146040830184617b73565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161806881601a850160208801617b4f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516180a581601c840160208801617b4f565b01601c01949350505050565b6000602082840312156180c357600080fd5b81516001600160a01b0381168114613a1757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561812c5761812c6180da565b60405290565b60008067ffffffffffffffff84111561814d5761814d6180da565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561817c5761817c6180da565b60405283815290508082840185101561819457600080fd5b6156e3846020830185617b4f565b600082601f8301126181b357600080fd5b613a1783835160208501618132565b6000602082840312156181d457600080fd5b815167ffffffffffffffff8111156181eb57600080fd5b61391a848285016181a2565b60008351618209818460208801617b4f565b83519083019061821d818360208801617b4f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161825e81601a850160208801617b4f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161829b816033840160208801617b4f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a176080830184617b73565b60006020828403121561832a57600080fd5b815167ffffffffffffffff81111561834157600080fd5b8201601f8101841361835257600080fd5b61391a84825160208401618132565b60008551618373818460208a01617b4f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516183ad816001840160208a01617b4f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516183eb816002840160208901617b4f565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161842d816002840160208801617b4f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184786040830184617b73565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156184c957600080fd5b81518015158114613a1757600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161851181601f850160208701617b4f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061857e6040830184617b73565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006185d06040830184617b73565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618647816014850160208701617b4f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061868e6040830185617b73565b8281036020840152613a138185617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618707816001850160208701617b4f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161874d818460208701617b4f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161880081604b850160208701617b4f565b91909101604b0192915050565b600060ff821660ff810361882357618823617fa4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a176080830184617b73565b6000602082840312156188f057600080fd5b815167ffffffffffffffff81111561890757600080fd5b82016060818503121561891957600080fd5b618921618109565b81518060030b811461893257600080fd5b8152602082015167ffffffffffffffff81111561894e57600080fd5b61895a868285016181a2565b602083015250604082015167ffffffffffffffff81111561897a57600080fd5b618986868285016181a2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516189f2816021850160208701617b4f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618bde816021850160208801617b4f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c1b81602e840160208801617b4f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618ce3816022850160208701617b4f565b9190910160220192915050565b8181038181111561391e5761391e617fa4565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618d3b81600e850160208701617b4f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561391e5761391e617fa4565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e2c816018850160208801617b4f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618e6981601c840160208801617b4f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618f6f818460208701617b4f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618fd681601c850160208701617b4f565b91909101601c0192915050565b60006000198203618ff657618ff6617fa4565b5060010190565b808202811582820484141761391e5761391e617fa4565b6001815b600184111561904f5780850481111561903357619033617fa4565b600184161561904157908102905b60019390931c928002619018565b935093915050565b6000826190665750600161391e565b816190735750600061391e565b81600181146190895760028114619093576190af565b600191505061391e565b60ff8411156190a4576190a4617fa4565b50506001821b61391e565b5060208310610133831016604e8410600b84101617156190d2575081810a61391e565b6190df6000198484619014565b80600019048211156190f3576190f3617fa4565b029392505050565b6000613a178383619057565b60008161911657619116617fa4565b506000190190565b60008351619130818460208801617b4f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161916a816001840160208801617b4f565b01600101949350505050565b8181036000831280158383131683831282161715616cdb57616cdb617fa456fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a003360c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a264697066735822122049bb636b102be587bd8860316de0ccc099b1bf45bf33a7d054bec099acc25c6264736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ddd48061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063916a17c6116100d8578063d509b16c1161008c578063e20c9f7111610066578063e20c9f71146102a8578063fa7626d4146102b0578063fe574f84146102bd57600080fd5b8063d509b16c14610290578063dcf7d03714610298578063de1cb76c146102a057600080fd5b8063b5508aa9116100bd578063b5508aa914610268578063ba414fa614610270578063c19099721461028857600080fd5b8063916a17c61461024b578063b0464fdc1461026057600080fd5b80633f7286f41161013a578063828320141161011457806382832014146101f957806385226c811461020157806385f438c11461021657600080fd5b80633f7286f4146101d457806349346558146101dc57806366d9a9a0146101e457600080fd5b80632ade38801161016b5780632ade3880146101af5780633cba0107146101c45780633e5e3c23146101cc57600080fd5b80630a9254e4146101875780631ed7831c14610191575b600080fd5b61018f6102c5565b005b6101996109c4565b6040516101a69190617b03565b60405180910390f35b6101b7610a26565b6040516101a69190617b9f565b61018f610b68565b610199611343565b6101996113a3565b61018f611403565b6101ec6119f0565b6040516101a69190617d05565b61018f611b72565b610209611de4565b6040516101a69190617da3565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101a6565b610253611eb4565b6040516101a69190617e1a565b610253611faf565b6102096120aa565b61027861217a565b60405190151581526020016101a6565b61018f61224e565b61018f6124d2565b61018f6128f2565b61018f612f39565b61019961366e565b601f546102789060ff1681565b61018f6136ce565b60258054307fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556026805461123490831617905560278054615678921682179055604051819061031a90617a16565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801561034d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526027546025549251908616948101949094526044840192909252909216606482015261043e919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052613905565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556027546025546040519293918216929116906104ca90617a23565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610506573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061056190617a30565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105a5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561064357600080fd5b505af1158015610657573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b1580156106ca57600080fd5b505af11580156106de573d6000803e3d6000fd5b505050506040516106ee90617a3d565b604051809103906000f08015801561070a573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561084057600080fd5b505af1158015610854573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156108ba57600080fd5b505af11580156108ce573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610a1c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109fe575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610b5f57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610b48578382906000526020600020018054610abb90617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae790617eb1565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081526020019060010190610a9c565b505050508152505081526020019060010190610a4a565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190617efe565b9050610c74816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190617efe565b9050610cf5816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610ddc916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015610df657600080fd5b505af1158015610e0a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610e9c57600080fd5b505af1158015610eb0573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015610f9f57600080fd5b505af1158015610fb3573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150610ff89089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561107257600080fd5b505af1158015611086573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506110de92909116908a9089908b90600401617f58565b600060405180830381600087803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190617efe565b905061118e8188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156111de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112029190617efe565b905061120f816000613924565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190617efe565b90506112b6816000613924565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a9190617efe565b9050611337816000613924565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936114a493921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190617efe565b90506114f2816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190617efe565b9050611573816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161165a916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561171a57600080fd5b505af115801561172e573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561180057600080fd5b505af1158015611814573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced91506118599089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118d357600080fd5b505af11580156118e7573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061193f92909116908a9089908b90600401617f58565b600060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190617efe565b905061118e816000613924565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000209060020201604051806040016040529081600082018054611a4790617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7390617eb1565b8015611ac05780601f10611a9557610100808354040283529160200191611ac0565b820191906000526020600020905b815481529060010190602001808311611aa357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611b5a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611b075790505b50505050508152505081526020019060010190611a14565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526025547fca669fa70000000000000000000000000000000000000000000000000000000083526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611d279190600401617f91565b600060405180830381600087803b158015611d4157600080fd5b505af1158015611d55573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c8999350611dad9290911690879086908890600401617f58565b600060405180830381600087803b158015611dc757600080fd5b505af1158015611ddb573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610b5f578382906000526020600020018054611e2790617eb1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5390617eb1565b8015611ea05780601f10611e7557610100808354040283529160200191611ea0565b820191906000526020600020905b815481529060010190602001808311611e8357829003601f168201915b505050505081526020019060010190611e08565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015611f9757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f445790505b50505050508152505081526020019060010190611ed8565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561209257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161203f5790505b50505050508152505081526020019060010190611fd3565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610b5f5783829060005260206000200180546120ed90617eb1565b80601f016020809104026020016040519081016040528092919081815260200182805461211990617eb1565b80156121665780601f1061213b57610100808354040283529160200191612166565b820191906000526020600020905b81548152906001019060200180831161214957829003601f168201915b5050505050815260200190600101906120ce565b60085460009060ff1615612192575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122479190617efe565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561234d57600080fd5b505af1158015612361573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061244c9190600401617f91565b600060405180830381600087803b15801561246657600080fd5b505af115801561247a573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611dad9290911690879086908890600401617f58565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015612527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254b9190617efe565b9050612558816000613924565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612641916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561265b57600080fd5b505af115801561266f573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364915060200160405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156127cd57600080fd5b505af11580156127e1573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401600060405180830381600087803b15801561285557600080fd5b505af1158015612869573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156128bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128df9190617efe565b90506128eb8186613924565b5050505050565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156129cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f19190617efe565b90506129fe816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a729190617efe565b9050612a7f816000613924565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612b66916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b158015612b8057600080fd5b505af1158015612b94573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612c2657600080fd5b505af1158015612c3a573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050612c78600289617fd3565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612d4057600080fd5b505af1158015612d54573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced9150612d999089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e1357600080fd5b505af1158015612e27573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612e7f92909116908a9089908b90600401617f58565b600060405180830381600087803b158015612e9957600080fd5b505af1158015612ead573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015612eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f239190617efe565b905061118e81612f3460028a617fd3565b613924565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015612fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff29190617efe565b9050612fff816000613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561304f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130739190617efe565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161315d916001600160a01b0391909116906000908690600401617f17565b600060405180830381600087803b15801561317757600080fd5b505af115801561318b573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561321d57600080fd5b505af1158015613231573d6000803e3d6000fd5b50506020546040517f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa935061327492506001600160a01b0390911690879061800e565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561330a57600080fd5b505af115801561331e573d6000803e3d6000fd5b50506021546024546040516001600160a01b039283169450911691507f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda790613369908a908990617f3f565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156133ff57600080fd5b505af1158015613413573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe91506134589089908890617f3f565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156134d257600080fd5b505af11580156134e6573d6000803e3d6000fd5b50506023546021546040517f02d5c8990000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506302d5c899935061353e92909116908a9089908b90600401617f58565b600060405180830381600087803b15801561355857600080fd5b505af115801561356c573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156135be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e29190617efe565b90506135ee8188613924565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561363e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136629190617efe565b905061120f8185613924565b60606015805480602002602001604051908101604052809291908181526020018280548015610a1c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109fe575050505050905090565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561374857600080fd5b505af115801561375c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138479190600401617f91565b600060405180830381600087803b15801561386157600080fd5b505af1158015613875573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b505050505050565b600061390f617a4a565b61391a8484836139a3565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561398f57600080fd5b505afa1580156138fd573d6000803e3d6000fd5b6000806139b08584613a1e565b9050613a136040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016139fe92919061800e565b60405160208183030381529060405285613a2a565b9150505b9392505050565b6000613a178383613a58565b60c08101515160009015613a4e57613a4784848460c00151613a73565b9050613a17565b613a478484613c19565b6000613a648383613d04565b613a1783836020015184613a2a565b600080613a7e613d14565b90506000613a8c8683613de7565b90506000613aa3826060015183602001518561428d565b90506000613ab38383898961449f565b90506000613ac08261531c565b602081015181519192509060030b15613b3357898260400151604051602001613aea929190618030565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b2a91600401617f91565b60405180910390fd5b6000613b766040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016154eb565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613bc9908490600401617f91565b602060405180830381865afa158015613be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0a91906180b1565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613c6e908790600401617f91565b600060405180830381865afa158015613c8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cb391908101906181c2565b90506000613ce18285604051602001613ccd9291906181f7565b6040516020818303038152906040526156eb565b90506001600160a01b03811661391a578484604051602001613aea929190618226565b613d10828260006156fe565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613d9b9084906004016182d1565b600060405180830381865afa158015613db8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613de09190810190618318565b9250505090565b613e196040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613e646040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613e6d85615801565b60208201526000613e7d86615be6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613ebf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ee79190810190618318565b86838560200151604051602001613f019493929190618361565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613f59908590600401617f91565b600060405180830381865afa158015613f76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9e9190810190618318565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613fe6908490600401618465565b602060405180830381865afa158015614003573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402791906184b7565b61403c5781604051602001613aea91906184d9565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061408190849060040161856b565b600060405180830381865afa15801561409e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140c69190810190618318565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061410d9084906004016185bd565b602060405180830381865afa15801561412a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414e91906184b7565b156141e3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906141989084906004016185bd565b600060405180830381865afa1580156141b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141dd9190810190618318565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614208919061860f565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161423492919061867b565b600060405180830381865afa158015614251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142799190810190618318565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816142a95790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614309576143096186a0565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061435d5761435d6186a0565b60200260200101819052508460405160200161437991906186cf565b6040516020818303038152906040528160028151811061439b5761439b6186a0565b6020026020010181905250826040516020016143b7919061873b565b604051602081830303815290604052816003815181106143d9576143d96186a0565b602002602001018190525060006143ef8261531c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506144809060408051808201825260008082526020918201528151808301909252845182528085019082015290615e69565b6144955785604051602001613aea919061877c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156144ef565b511590565b614663578260200151156145ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b2a565b8260c0015115614663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b2a565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161467c57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806146d79061880d565b935060ff16815181106146ec576146ec6186a0565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161473d919061882c565b6040516020818303038152906040528282806147589061880d565b935060ff168151811061476d5761476d6186a0565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806147ba9061880d565b935060ff16815181106147cf576147cf6186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061481c9061880d565b935060ff1681518110614831576148316186a0565b6020026020010181905250876020015182828061484d9061880d565b935060ff1681518110614862576148626186a0565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806148af9061880d565b935060ff16815181106148c4576148c46186a0565b6020908102919091010152875182826148dc8161880d565b935060ff16815181106148f1576148f16186a0565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061493e9061880d565b935060ff1681518110614953576149536186a0565b602002602001018190525061496746615eca565b82826149728161880d565b935060ff1681518110614987576149876186a0565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806149d49061880d565b935060ff16815181106149e9576149e96186a0565b602002602001018190525086828280614a019061880d565b935060ff1681518110614a1657614a166186a0565b6020908102919091010152855115614b3d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614a678161880d565b935060ff1681518110614a7c57614a7c6186a0565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614acc908990600401617f91565b600060405180830381865afa158015614ae9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614b119190810190618318565b8282614b1c8161880d565b935060ff1681518110614b3157614b316186a0565b60200260200101819052505b846020015115614c0d5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614b868161880d565b935060ff1681518110614b9b57614b9b6186a0565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614be89061880d565b935060ff1681518110614bfd57614bfd6186a0565b6020026020010181905250614dd4565b614c456144ea8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614cd85760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c888161880d565b935060ff1681518110614c9d57614c9d6186a0565b60200260200101819052508460a00151604051602001614cbd91906186cf565b604051602081830303815290604052828280614be89061880d565b8460c00151158015614d1b575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614d1990511590565b155b15614dd45760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d5f8161880d565b935060ff1681518110614d7457614d746186a0565b6020026020010181905250614d8888615f6a565b604051602001614d9891906186cf565b604051602081830303815290604052828280614db39061880d565b935060ff1681518110614dc857614dc86186a0565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614e0890511590565b614e9d5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614e4b8161880d565b935060ff1681518110614e6057614e606186a0565b60200260200101819052508460400151828280614e7c9061880d565b935060ff1681518110614e9157614e916186a0565b60200260200101819052505b606085015115614fbe5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614ee68161880d565b935060ff1681518110614efb57614efb6186a0565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614f6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f929190810190618318565b8282614f9d8161880d565b935060ff1681518110614fb257614fb26186a0565b60200260200101819052505b60e085015151156150655760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150088161880d565b935060ff168151811061501d5761501d6186a0565b60200260200101819052506150398560e0015160000151615eca565b82826150448161880d565b935060ff1681518110615059576150596186a0565b60200260200101819052505b60e0850151602001511561510f5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826150b28161880d565b935060ff16815181106150c7576150c76186a0565b60200260200101819052506150e38560e0015160200151615eca565b82826150ee8161880d565b935060ff1681518110615103576151036186a0565b60200260200101819052505b60e085015160400151156151b95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261515c8161880d565b935060ff1681518110615171576151716186a0565b602002602001018190525061518d8560e0015160400151615eca565b82826151988161880d565b935060ff16815181106151ad576151ad6186a0565b60200260200101819052505b60e085015160600151156152635760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152068161880d565b935060ff168151811061521b5761521b6186a0565b60200260200101819052506152378560e0015160600151615eca565b82826152428161880d565b935060ff1681518110615257576152576186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615281576152816180da565b6040519080825280602002602001820160405280156152b457816020015b606081526020019060019003908161529f5790505b50905060005b8260ff168160ff16101561530d57838160ff16815181106152dd576152dd6186a0565b6020026020010151828260ff16815181106152fa576152fa6186a0565b60209081029190910101526001016152ba565b5093505050505b949350505050565b6153436040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916153c991869101618897565b600060405180830381865afa1580156153e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261540e9190810190618318565b9050600061541c8683616a59565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161544c9190617da3565b6000604051808303816000875af115801561546b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261549391908101906188de565b805190915060030b158015906154ac5750602081015151155b80156154bb5750604081015151155b1561449557816000815181106154d3576154d36186a0565b6020026020010151604051602001613aea9190618994565b606060006155208560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155579082905b90616bae565b156156b45760006155d4826155ce846155c861559a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616bd5565b90616c37565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615638908290616bae565b156156a257604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261569f905b8290616cbc565b90505b6156ab81616ce2565b92505050613a17565b82156156cd578484604051602001613aea929190618b80565b5050604080516020810190915260008152613a17565b509392505050565b6000808251602084016000f09392505050565b8160a001511561570d57505050565b600061571a848484616d4b565b905060006157278261531c565b602081015181519192509060030b1580156157c35750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157c390604080518082018252600080825260209182015281518083019092528451825280850190820152615551565b156157d057505050505050565b604082015151156157f0578160400151604051602001613aea9190618c27565b80604051602001613aea9190618c85565b606060006158368360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061589b905b8290615e69565b1561590a57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a17906159059083906172e6565b616ce2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261596c905b8290617370565b600103615a3957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159d290615698565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a1790615905905b8390616cbc565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a9890615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615b0090839061740a565b905060008160018351615b139190618cf0565b81518110615b2357615b236186a0565b60200260200101519050615bc6615905615b996040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906172e6565b95945050505050565b82604051602001613aea9190618d03565b50919050565b60606000615c1b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c7d90615894565b15615c8b57613a1781616ce2565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cea90615965565b600103615d5457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613a179061590590615a32565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615db390615894565b15615bcf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615e1b90839061740a565b9050600181511115615e57578060028251615e369190618cf0565b81518110615e4657615e466186a0565b602002602001015192505050919050565b5082604051602001613aea9190618d03565b805182516000911115615e7e5750600061391e565b81518351602085015160009291615e9491618de1565b615e9e9190618cf0565b905082602001518103615eb557600191505061391e565b82516020840151819020912014905092915050565b60606000615ed7836174af565b600101905060008167ffffffffffffffff811115615ef757615ef76180da565b6040519080825280601f01601f191660200182016040528015615f21576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f2b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615ff6905b8290617591565b1561603657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261609590615fef565b156160d557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261613490615fef565b1561617457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161d390615fef565b806162385750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261623890615fef565b1561627857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162d790615fef565b8061633c5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261633c90615fef565b1561637c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163db90615fef565b806164405750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261644090615fef565b1561648057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164df90615fef565b806165445750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261654490615fef565b1561658457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165e390615fef565b1561662357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261668290615fef565b156166c257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261672190615fef565b1561676157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167c090615fef565b1561680057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685f90615fef565b1561689f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168fe90615fef565b806169635750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696390615fef565b156169a357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a0290615fef565b15616a4257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613aea9290602001618df4565b60608060005b8451811015616ae45781858281518110616a7b57616a7b6186a0565b6020026020010151604051602001616a949291906181f7565b604051602081830303815290604052915060018551616ab39190618cf0565b8114616adc5781604051602001616aca9190618f5d565b60405160208183030381529060405291505b600101616a5f565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616afd5790505090508381600081518110616b2857616b286186a0565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616b7c57616b7c6186a0565b60200260200101819052508181600281518110616b9b57616b9b6186a0565b6020908102919091010152949350505050565b6020808301518351835192840151600093616bcc92918491906175a5565b14159392505050565b60408051808201909152600080825260208201526000616c0784600001518560200151856000015186602001516176b6565b9050836020015181616c199190618cf0565b84518590616c28908390618cf0565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616c5c57508161391e565b6020808301519084015160019114616c835750815160208481015190840151829020919020145b8015616cb457825184518590616c9a908390618cf0565b9052508251602085018051616cb0908390618de1565b9052505b509192915050565b6040805180820190915260008082526020820152616cdb8383836177d6565b5092915050565b60606000826000015167ffffffffffffffff811115616d0357616d036180da565b6040519080825280601f01601f191660200182016040528015616d2d576020820181803683370190505b5090506000602082019050616cdb8185602001518660000151617881565b60606000616d57613d14565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616d7457905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dcf9061880d565b935060ff1681518110616de457616de46186a0565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e359190618f9e565b604051602081830303815290604052828280616e509061880d565b935060ff1681518110616e6557616e656186a0565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616eb29061880d565b935060ff1681518110616ec757616ec76186a0565b602002602001018190525082604051602001616ee3919061873b565b604051602081830303815290604052828280616efe9061880d565b935060ff1681518110616f1357616f136186a0565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616f609061880d565b935060ff1681518110616f7557616f756186a0565b6020026020010181905250616f8a87846178fb565b8282616f958161880d565b935060ff1681518110616faa57616faa6186a0565b6020908102919091010152855151156170565760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616ffc8161880d565b935060ff1681518110617011576170116186a0565b602002602001018190525061702a8660000151846178fb565b82826170358161880d565b935060ff168151811061704a5761704a6186a0565b60200260200101819052505b8560800151156170c45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261709f8161880d565b935060ff16815181106170b4576170b46186a0565b602002602001018190525061712a565b841561712a5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171098161880d565b935060ff168151811061711e5761711e6186a0565b60200260200101819052505b604086015151156171c65760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826171748161880d565b935060ff1681518110617189576171896186a0565b602002602001018190525085604001518282806171a59061880d565b935060ff16815181106171ba576171ba6186a0565b60200260200101819052505b8560600151156172305760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261720f8161880d565b935060ff1681518110617224576172246186a0565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561724e5761724e6180da565b60405190808252806020026020018201604052801561728157816020015b606081526020019060019003908161726c5790505b50905060005b8260ff168160ff1610156172da57838160ff16815181106172aa576172aa6186a0565b6020026020010151828260ff16815181106172c7576172c76186a0565b6020908102919091010152600101617287565b50979650505050505050565b604080518082019091526000808252602082015281518351101561730b57508161391e565b8151835160208501516000929161732191618de1565b61732b9190618cf0565b6020840151909150600190821461734c575082516020840151819020908220145b801561736757835185518690617363908390618cf0565b9052505b50929392505050565b600080826000015161739485600001518660200151866000015187602001516176b6565b61739e9190618de1565b90505b835160208501516173b29190618de1565b8111616cdb57816173c281618fe3565b92505082600001516173f98560200151836173dd9190618cf0565b86516173e99190618cf0565b83866000015187602001516176b6565b6174039190618de1565b90506173a1565b606060006174188484617370565b617423906001618de1565b67ffffffffffffffff81111561743b5761743b6180da565b60405190808252806020026020018201604052801561746e57816020015b60608152602001906001900390816174595790505b50905060005b81518110156156e35761748a6159058686616cbc565b82828151811061749c5761749c6186a0565b6020908102919091010152600101617474565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106174f8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617524576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061754257662386f26fc10000830492506010015b6305f5e100831061755a576305f5e100830492506008015b612710831061756e57612710830492506004015b60648310617580576064830492506002015b600a831061391e5760010192915050565b600061759d838361793b565b159392505050565b6000808584116176ac576020841161765857600084156175f05760016175cc866020618cf0565b6175d7906008618ffd565b6175e29060026190fb565b6175ec9190618cf0565b1990505b83518116856175ff8989618de1565b6176099190618cf0565b805190935082165b8181146176435787841161762b5787945050505050615314565b8361763581619107565b945050828451169050617611565b61764d8785618de1565b945050505050615314565b8383206176658588618cf0565b61766f9087618de1565b91505b8582106176aa578482208082036176975761768d8684618de1565b9350505050615314565b6176a2600184618cf0565b925050617672565b505b5092949350505050565b600083818685116177c1576020851161777057600085156177025760016176de876020618cf0565b6176e9906008618ffd565b6176f49060026190fb565b6176fe9190618cf0565b1990505b845181166000876177138b8b618de1565b61771d9190618cf0565b855190915083165b8281146177625781861061774a5761773d8b8b618de1565b9650505050505050615314565b8561775481618fe3565b965050838651169050617725565b859650505050505050615314565b508383206000905b6177828689618cf0565b82116177bf5785832080820361779e5783945050505050615314565b6177a9600185618de1565b93505081806177b790618fe3565b925050617778565b505b6177cb8787618de1565b979650505050505050565b6040805180820190915260008082526020820152600061780885600001518660200151866000015187602001516176b6565b6020808701805191860191909152519091506178249082618cf0565b8352845160208601516178379190618de1565b81036178465760008552617878565b835183516178549190618de1565b85518690617863908390618cf0565b90525083516178729082618de1565b60208601525b50909392505050565b602081106178b95781518352617898602084618de1565b92506178a5602083618de1565b91506178b2602082618cf0565b9050617881565b60001981156178e85760016178cf836020618cf0565b6178db906101006190fb565b6178e59190618cf0565b90505b9151835183169219169190911790915250565b606060006179098484613de7565b80516020808301516040519394506179239390910161911e565b60405160208183030381529060405291505092915050565b815181516000919081111561794e575081515b6020808501519084015160005b83811015617a0757825182518082146179d75760001960208710156179b657600184617988896020618cf0565b6179929190618de1565b61799d906008618ffd565b6179a89060026190fb565b6179b29190618cf0565b1990505b81811683821681810391146179d457975061391e9650505050505050565b50505b6179e2602086618de1565b94506179ef602085618de1565b93505050602081617a009190618de1565b905061795b565b50845186516144959190619176565b6112a68061919783390190565b61140b8061a43d83390190565b6117f98061b84883390190565b610d5e8061d04183390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617a8d617a92565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617a8d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617b445783516001600160a01b0316835260209384019390920191600101617b1d565b509095945050505050565b60005b83811015617b6a578181015183820152602001617b52565b50506000910152565b60008151808452617b8b816020860160208601617b4f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617c81577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617c6b848651617b73565b6020958601959094509290920191600101617c31565b509197505050602094850194929092019150600101617bc7565b50929695505050505050565b600081518084526020840193506020830160005b82811015617cfb5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617cbb565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617d716040880182617b73565b9050602082015191508681036020880152617d8c8183617ca7565b965050506020938401939190910190600101617d2d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e05858351617b73565b94506020938401939190910190600101617dcb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617e9b6040870182617ca7565b9550506020938401939190910190600101617e42565b600181811c90821680617ec557607f821691505b602082108103615be0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215617f1057600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000615bc66060830184617b73565b8281526040602082015260006153146040830184617b73565b6001600160a01b0385168152836020820152608060408201526000617f806080830185617b73565b905082606083015295945050505050565b602081526000613a176020830184617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082618009577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006153146040830184617b73565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161806881601a850160208801617b4f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516180a581601c840160208801617b4f565b01601c01949350505050565b6000602082840312156180c357600080fd5b81516001600160a01b0381168114613a1757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561812c5761812c6180da565b60405290565b60008067ffffffffffffffff84111561814d5761814d6180da565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561817c5761817c6180da565b60405283815290508082840185101561819457600080fd5b6156e3846020830185617b4f565b600082601f8301126181b357600080fd5b613a1783835160208501618132565b6000602082840312156181d457600080fd5b815167ffffffffffffffff8111156181eb57600080fd5b61391a848285016181a2565b60008351618209818460208801617b4f565b83519083019061821d818360208801617b4f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161825e81601a850160208801617b4f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161829b816033840160208801617b4f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613a176080830184617b73565b60006020828403121561832a57600080fd5b815167ffffffffffffffff81111561834157600080fd5b8201601f8101841361835257600080fd5b61391a84825160208401618132565b60008551618373818460208a01617b4f565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516183ad816001840160208a01617b4f565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516183eb816002840160208901617b4f565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161842d816002840160208801617b4f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006184786040830184617b73565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b6000602082840312156184c957600080fd5b81518015158114613a1757600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161851181601f850160208701617b4f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061857e6040830184617b73565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006185d06040830184617b73565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618647816014850160208701617b4f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061868e6040830185617b73565b8281036020840152613a138185617b73565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618707816001850160208701617b4f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161874d818460208701617b4f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161880081604b850160208701617b4f565b91909101604b0192915050565b600060ff821660ff810361882357618823617fa4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613a176080830184617b73565b6000602082840312156188f057600080fd5b815167ffffffffffffffff81111561890757600080fd5b82016060818503121561891957600080fd5b618921618109565b81518060030b811461893257600080fd5b8152602082015167ffffffffffffffff81111561894e57600080fd5b61895a868285016181a2565b602083015250604082015167ffffffffffffffff81111561897a57600080fd5b618986868285016181a2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516189f2816021850160208701617b4f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618bde816021850160208801617b4f565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618c1b81602e840160208801617b4f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161888a816029850160208701617b4f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618ce3816022850160208701617b4f565b9190910160220192915050565b8181038181111561391e5761391e617fa4565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618d3b81600e850160208701617b4f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561391e5761391e617fa4565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351618e2c816018850160208801617b4f565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351618e6981601c840160208801617b4f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251618f6f818460208701617b4f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251618fd681601c850160208701617b4f565b91909101601c0192915050565b60006000198203618ff657618ff6617fa4565b5060010190565b808202811582820484141761391e5761391e617fa4565b6001815b600184111561904f5780850481111561903357619033617fa4565b600184161561904157908102905b60019390931c928002619018565b935093915050565b6000826190665750600161391e565b816190735750600061391e565b81600181146190895760028114619093576190af565b600191505061391e565b60ff8411156190a4576190a4617fa4565b50506001821b61391e565b5060208310610133831016604e8410600b84101617156190d2575081810a61391e565b6190df6000198484619014565b80600019048211156190f3576190f3617fa4565b029392505050565b6000613a178383619057565b60008161911657619116617fa4565b506000190190565b60008351619130818460208801617b4f565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161916a816001840160208801617b4f565b01600101949350505050565b8181036000831280158383131683831282161715616cdb57616cdb617fa456fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220085f01204b33dc17013c78c74fbca32a3da2c0b384ce7c8878c889551af28c6164736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a003360c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610d3a806100246000396000f3fe6080604052600436106100635760003560e01c8063c513169111610040578063c5131691146100c1578063e04d4f97146100e1578063f05b6abf146100f457005b8063357fc5a21461006c5780636ed701691461008c5780638fcaa0b5146100a157005b3661006a57005b005b34801561007857600080fd5b5061006a6100873660046106c0565b610114565b34801561009857600080fd5b5061006a6101aa565b3480156100ad57600080fd5b5061006a6100bc3660046106fc565b6101df565b3480156100cd57600080fd5b5061006a6100dc3660046106c0565b61021e565b61006a6100ef366004610895565b6102f9565b34801561010057600080fd5b5061006a61010f366004610981565b61033d565b61011c610372565b61013e73ffffffffffffffffffffffffffffffffffffffff83163383866103b5565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101a56001600055565b505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161021293929190610a6b565b60405180910390a15050565b610226610372565b6000610233600285610ad5565b90508060000361026f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61029173ffffffffffffffffffffffffffffffffffffffff84163384846103b5565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101a56001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610330959493929190610b7e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103309493929190610c08565b6002600054036103ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261044a908590610450565b50505050565b600061047273ffffffffffffffffffffffffffffffffffffffff8416836104eb565b905080516000141580156104975750808060200190518101906104959190610ccb565b155b156101a5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b60606104f983836000610500565b9392505050565b60608147101561053e576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016104e2565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105679190610ce8565b60006040518083038185875af1925050503d80600081146105a4576040519150601f19603f3d011682016040523d82523d6000602084013e6105a9565b606091505b50915091506105b98683836105c3565b9695505050505050565b6060826105d8576105d382610652565b6104f9565b81511580156105fc575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561064b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e2565b50806104f9565b8051156106625780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106bb57600080fd5b919050565b6000806000606084860312156106d557600080fd5b833592506106e560208501610697565b91506106f360408501610697565b90509250925092565b6000806020838503121561070f57600080fd5b823567ffffffffffffffff81111561072657600080fd5b8301601f8101851361073757600080fd5b803567ffffffffffffffff81111561074e57600080fd5b85602082840101111561076057600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107e6576107e6610770565b604052919050565b600082601f8301126107ff57600080fd5b813567ffffffffffffffff81111561081957610819610770565b61084a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161079f565b81815284602083860101111561085f57600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461069457600080fd5b80356106bb8161087c565b6000806000606084860312156108aa57600080fd5b833567ffffffffffffffff8111156108c157600080fd5b6108cd868287016107ee565b9350506020840135915060408401356108e58161087c565b809150509250925092565b600067ffffffffffffffff82111561090a5761090a610770565b5060051b60200190565b600082601f83011261092557600080fd5b8135610938610933826108f0565b61079f565b8082825260208201915060208360051b86010192508583111561095a57600080fd5b602085015b8381101561097757803583526020928301920161095f565b5095945050505050565b60008060006060848603121561099657600080fd5b833567ffffffffffffffff8111156109ad57600080fd5b8401601f810186136109be57600080fd5b80356109cc610933826108f0565b8082825260208201915060208360051b8501019250888311156109ee57600080fd5b602084015b83811015610a3057803567ffffffffffffffff811115610a1257600080fd5b610a218b6020838901016107ee565b845250602092830192016109f3565b509550505050602084013567ffffffffffffffff811115610a5057600080fd5b610a5c86828701610914565b9250506106f36040850161088a565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b600082610b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015610b2b578181015183820152602001610b13565b50506000910152565b60008151808452610b4c816020860160208601610b10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610bb360a0830186610b34565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610bfe578151865260209586019590910190600101610be0565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610c9b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610c86858351610b34565b94506020938401939190910190600101610c4c565b505050508281036040840152610cb18186610bcc565b915050610cc2606083018415159052565b95945050505050565b600060208284031215610cdd57600080fd5b81516104f98161087c565b60008251610cfa818460208701610b10565b919091019291505056fea2646970667358221220556072e1abafc3c4063b8cce832228b4f309b93726aaa6a6dfab20cb880c6d1864736f6c634300081a0033a2646970667358221220e80db3877e97661ce0a634825011e5fe1a372a9e5b3bab0542217051c161d99964736f6c634300081a0033", } // ZetaConnectorNonNativeTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zrc20.sol/zrc20.go b/v2/pkg/zrc20.sol/zrc20.go index ff3e31dd..ea35547e 100644 --- a/v2/pkg/zrc20.sol/zrc20.go +++ b/v2/pkg/zrc20.sol/zrc20.go @@ -32,7 +32,7 @@ var ( // ZRC20MetaData contains all meta data concerning the ZRC20 contract. var ZRC20MetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"chainid_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"coinType_\",\"type\":\"uint8\",\"internalType\":\"enumCoinType\"},{\"name\":\"gasLimit_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"systemContractAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gatewayAddress_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CHAIN_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"COIN_TYPE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumCoinType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gatewayAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"protocolFlatFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemContractAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateGasLimit\",\"inputs\":[{\"name\":\"gasLimit_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateGatewayAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateProtocolFlatFee\",\"inputs\":[{\"name\":\"protocolFlatFee_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateSystemContractAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawGasFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"from\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGasLimit\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGateway\",\"inputs\":[{\"name\":\"gateway\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedProtocolFlatFee\",\"inputs\":[{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedSystemContract\",\"inputs\":[{\"name\":\"systemContract\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b50604051611ac2380380611ac283398101604081905261002f916101db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600761006f898261032d565b50600861007c888261032d565b506009805460ff191660ff881617905560808590528360028111156100a3576100a36103eb565b60a08160028111156100b7576100b76103eb565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104019350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261011e57600080fd5b81516001600160401b03811115610137576101376100f7565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610165576101656100f7565b60405281815283820160200185101561017d57600080fd5b60005b8281101561019c57602081860181015183830182015201610180565b506000918101602001919091529392505050565b8051600381106101bf57600080fd5b919050565b80516001600160a01b03811681146101bf57600080fd5b600080600080600080600080610100898b0312156101f857600080fd5b88516001600160401b0381111561020e57600080fd5b61021a8b828c0161010d565b60208b015190995090506001600160401b0381111561023857600080fd5b6102448b828c0161010d565b975050604089015160ff8116811461025b57600080fd5b60608a0151909650945061027160808a016101b0565b60a08a0151909450925061028760c08a016101c4565b915061029560e08a016101c4565b90509295985092959890939650565b600181811c908216806102b857607f821691505b6020821081036102d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561032857806000526020600020601f840160051c810160208510156103055750805b601f840160051c820191505b818110156103255760008155600101610311565b50505b505050565b81516001600160401b03811115610346576103466100f7565b61035a8161035484546102a4565b846102de565b6020601f82116001811461038e57600083156103765750848201515b600019600385901b1c1916600184901b178455610325565b600084815260208120601f198516915b828110156103be578785015182556020948501946001909201910161039e565b50848210156103dc5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05161168e61043460003960006103280152600081816102d901528181610a1d0152610b23015261168e6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b714610432578063f687d12a1461043b578063fa62d57f1461044e57600080fd5b8063d9eeebed146103a5578063dd62ed3e146103d9578063eddeb1231461041f57600080fd5b8063c7012626116100bd578063c70126261461036a578063c835d7cc1461037d578063ccc775991461039257600080fd5b806395d89b411461031b578063a3413d0314610323578063a9059cbb1461035757600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a082311461029e57806385e1f4d0146102d45780638b851b95146102fb57600080fd5b80633ce4a5bc1461025d57806342966c681461027857806347e7ef241461028b57600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610457565b6040516101b2919061126d565b60405180910390f35b6101ce6101c93660046112ac565b6104e9565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe3660046112d8565b610500565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60095460405160ff90911681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce610286366004611319565b610597565b6101ce6102993660046112ac565b6105ab565b6101e26102ac366004611332565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a56106ff565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b2919061134f565b6101ce6103653660046112ac565b61070e565b6101ce6103783660046113bf565b61071b565b61039061038b366004611332565b61086a565b005b6103906103a0366004611332565b610931565b6103ad6109f1565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e26103e73660046114b7565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b61039061042d366004611319565b610c0f565b6101e260025481565b610390610449366004611319565b610c91565b6101e260035481565b606060078054610466906114f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610492906114f0565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b5050505050905090565b60006104f6338484610d13565b5060015b92915050565b600061050d848484610e1c565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610578576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61058c85336105878685611572565b610d13565b506001949350505050565b60006105a33383610fd7565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab148015906105e9575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561060d575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610644576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61064e8383611119565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526106ee918690611585565b60405180910390a250600192915050565b606060088054610466906114f0565b60006104f6338484610e1c565b60008060006107286109f1565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de91906115a7565b610814576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081e3385610fd7565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d95591610857918991899187916115c9565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108b7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461097e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610926565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa891906115f8565b905073ffffffffffffffffffffffffffffffffffffffff8116610af7576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa9190611615565b905080600003610be6576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610bf9919061162e565b610c039190611645565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610c5c576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610926565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cde576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610926565b73ffffffffffffffffffffffffffffffffffffffff8316610d60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610dad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e69576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610eb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610f16576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f208282611572565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681529081208054849290610f63908490611645565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fc991815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611024576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205481811015611084576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61108e8282611572565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040812091909155600680548492906110c9908490611572565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e0f565b73ffffffffffffffffffffffffffffffffffffffff8216611166576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546111789190611645565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906111b2908490611645565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561122f57602081850181015186830182015201611213565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006112806020830184611209565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112a957600080fd5b50565b600080604083850312156112bf57600080fd5b82356112ca81611287565b946020939093013593505050565b6000806000606084860312156112ed57600080fd5b83356112f881611287565b9250602084013561130881611287565b929592945050506040919091013590565b60006020828403121561132b57600080fd5b5035919050565b60006020828403121561134457600080fd5b813561128081611287565b602081016003831061138a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113d257600080fd5b823567ffffffffffffffff8111156113e957600080fd5b8301601f810185136113fa57600080fd5b803567ffffffffffffffff81111561141457611414611390565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561148057611480611390565b60405281815282820160200187101561149857600080fd5b8160208401602083013760006020928201830152969401359450505050565b600080604083850312156114ca57600080fd5b82356114d581611287565b915060208301356114e581611287565b809150509250929050565b600181811c9082168061150457607f821691505b60208210810361153d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104fa576104fa611543565b6040815260006115986040830185611209565b90508260208301529392505050565b6000602082840312156115b957600080fd5b8151801515811461128057600080fd5b6080815260006115dc6080830187611209565b6020830195909552506040810192909252606090910152919050565b60006020828403121561160a57600080fd5b815161128081611287565b60006020828403121561162757600080fd5b5051919050565b80820281158282048414176104fa576104fa611543565b808201808211156104fa576104fa61154356fea2646970667358221220ff62fd4bd87c4bd8cb6b710eb3bc879bf82b272805bab80a5c462f9aee4e937164736f6c634300081a0033", + Bin: "0x60e060405234801561001057600080fd5b50604051611bb5380380611bb583398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60076100aa8982610360565b5060086100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c051611744610471600039600061024f015260006103440152600081816102f501528181610ad30152610bd901526117446000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b71461044e578063f687d12a14610457578063fa62d57f1461046a57600080fd5b8063d9eeebed146103c1578063dd62ed3e146103f5578063eddeb1231461043b57600080fd5b8063c7012626116100bd578063c701262614610386578063c835d7cc14610399578063ccc77599146103ae57600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a08231146102ba57806385e1f4d0146102f05780638b851b951461031757600080fd5b80633ce4a5bc1461027957806342966c681461029457806347e7ef24146102a757600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610473565b6040516101b29190611323565b60405180910390f35b6101ce6101c9366004611362565b610505565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe36600461138e565b61051c565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce6102a23660046113cf565b6105b3565b6101ce6102b5366004611362565b6105c7565b6101e26102c83660046113e8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071b565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611405565b6101ce610381366004611362565b61072a565b6101ce610394366004611475565b610737565b6103ac6103a73660046113e8565b610886565b005b6103ac6103bc3660046113e8565b61099a565b6103c9610aa7565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e261040336600461156d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b6103ac6104493660046113cf565b610cc5565b6101e260025481565b6103ac6104653660046113cf565b610d47565b6101e260035481565b606060078054610482906115a6565b80601f01602080910402602001604051908101604052809291908181526020018280546104ae906115a6565b80156104fb5780601f106104d0576101008083540402835291602001916104fb565b820191906000526020600020905b8154815290600101906020018083116104de57829003601f168201915b5050505050905090565b6000610512338484610dc9565b5060015b92915050565b6000610529848484610ed2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610594576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a885336105a38685611628565b610dc9565b506001949350505050565b60006105bf338361108d565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610605575060005473ffffffffffffffffffffffffffffffffffffffff163314155b8015610629575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610660576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066a83836111cf565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070a91869061163b565b60405180910390a250600192915050565b606060088054610482906115a6565b6000610512338484610ed2565b6000806000610744610aa7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa919061165d565b610830576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083a338561108d565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955916108739189918991879161167f565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610920576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109e7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a34576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a3879060200161098f565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5e91906116ae565b905073ffffffffffffffffffffffffffffffffffffffff8116610bad576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6091906116cb565b905080600003610c9c576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610caf91906116e4565b610cb991906116fb565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d12576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f9060200161098f565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d94576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a9060200161098f565b73ffffffffffffffffffffffffffffffffffffffff8316610e16576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e63576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f1f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f6c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610fcc576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd68282611628565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526004602052604080822093909355908516815290812080548492906110199084906116fb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161107f91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110da576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020548181101561113a576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111448282611628565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120919091556006805484929061117f908490611628565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec5565b73ffffffffffffffffffffffffffffffffffffffff821661121c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806006600082825461122e91906116fb565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906112689084906116fb565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e5576020818501810151868301820152016112c9565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133660208301846112bf565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461135f57600080fd5b50565b6000806040838503121561137557600080fd5b82356113808161133d565b946020939093013593505050565b6000806000606084860312156113a357600080fd5b83356113ae8161133d565b925060208401356113be8161133d565b929592945050506040919091013590565b6000602082840312156113e157600080fd5b5035919050565b6000602082840312156113fa57600080fd5b81356113368161133d565b6020810160038310611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148857600080fd5b823567ffffffffffffffff81111561149f57600080fd5b8301601f810185136114b057600080fd5b803567ffffffffffffffff8111156114ca576114ca611446565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153657611536611446565b60405281815282820160200187101561154e57600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158057600080fd5b823561158b8161133d565b9150602083013561159b8161133d565b809150509250929050565b600181811c908216806115ba57607f821691505b6020821081036115f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610516576105166115f9565b60408152600061164e60408301856112bf565b90508260208301529392505050565b60006020828403121561166f57600080fd5b8151801515811461133657600080fd5b60808152600061169260808301876112bf565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c057600080fd5b81516113368161133d565b6000602082840312156116dd57600080fd5b5051919050565b8082028115828204841417610516576105166115f9565b80820180821115610516576105166115f956fea264697066735822122037649c2055bfb791d5356fcc351c4af595c644cc42f4d0379388cd4eda6b0fd864736f6c634300081a0033", } // ZRC20ABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index 08ca1b0a..5f114e7c 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotFungible\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061cf3a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80638032668011610145578063d509b16c116100bd578063e13aba481161008c578063f1f87f4011610071578063f1f87f40146103a2578063f2413096146103aa578063fa7626d4146103b257600080fd5b8063e13aba4814610392578063e20c9f711461039a57600080fd5b8063d509b16c14610372578063d97136a21461037a578063dcba486a14610382578063dfbdf6001461038a57600080fd5b8063b0464fdc11610114578063b5508aa9116100f9578063b5508aa91461034a578063ba414fa614610352578063d04cda981461036a57600080fd5b8063b0464fdc1461033a578063b549984c1461034257600080fd5b8063803266801461030057806385226c8114610308578063916a17c61461031d578063ae9687dc1461033257600080fd5b80633e5e3c23116101d85780635f01db7e116101a75780636ff458501161018c5780636ff45850146102e857806370557298146102f05780637f924c4e146102f857600080fd5b80635f01db7e146102cb57806366d9a9a0146102d357600080fd5b80633e5e3c23146102ab5780633f7286f4146102b35780634b629509146102bb57806358fdbbe0146102c357600080fd5b80632843882611610214578063284388261461027e5780632ade3880146102865780632f6254fc1461029b5780633be9ec80146102a357600080fd5b80630393998b146102465780630a9254e4146102505780631142744e146102585780631ed7831c14610260575b600080fd5b61024e6103bf565b005b61024e6104da565b61024e610bbc565b610268610cfb565b604051610275919061811a565b60405180910390f35b61024e610d5d565b61028e610fda565b60405161027591906181b6565b61024e61111c565b61024e6112a6565b6102686114c5565b610268611525565b61024e611585565b61024e611671565b61024e61175d565b6102db6118e3565b604051610275919061831c565b61024e611a65565b61024e611ca8565b61024e611f29565b61024e612166565b610310612253565b60405161027591906183ba565b610325612323565b6040516102759190618431565b61024e61241e565b6103256126ab565b61024e6127a6565b610310612891565b61035a612961565b6040519015158152602001610275565b61024e612a35565b61024e612b92565b61024e6132bc565b61024e613499565b61024e61374e565b61024e6138aa565b610268613b86565b61024e613be6565b61024e613d5e565b601f5461035a9060ff1681565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561044457600080fd5b505af1158015610458573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156104c057600080fd5b505af11580156104d4573d6000803e3d6000fd5b50505050565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516105209061803a565b604051809103906000f08015801561053c573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610620919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613e71565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa1580156106b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dd91906184e4565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561077b57600080fd5b505af115801561078f573d6000803e3d6000fd5b5050505060008060006040516107a490618047565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156107e0573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560215460405160129360019384936000939192169061083690618054565b610845969594939291906184ff565b604051809103906000f080158015610861573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b15801561090157600080fd5b505af1158015610915573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561097f57600080fd5b505af1158015610993573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a1357600080fd5b505af1158015610a27573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906185f4565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104c057600080fd5b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610c4157600080fd5b505af1158015610c55573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044015b6020604051808303816000875af1158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf891906185f4565b50565b60606016805480602002602001604051908101604052809291908181526020018280548015610d5357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d35575b5050505050905090565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190618616565b9050610dfc600082613e90565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9891906185f4565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd591906185f4565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561111357600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156110fc57838290600052602060002001805461106f9061862f565b80601f016020809104026020016040519081016040528092919081815260200182805461109b9061862f565b80156110e85780601f106110bd576101008083540402835291602001916110e8565b820191906000526020600020905b8154815290600101906020018083116110cb57829003601f168201915b505050505081526020019060010190611050565b505050508152505081526020019060010190610ffe565b50505050905090565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561118e57600080fd5b505af11580156111a2573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b15801561120a57600080fd5b505af115801561121e573d6000803e3d6000fd5b505050506112a4601f60019054906101000a90046001600160a01b03166001600160a01b031663249f46976040518163ffffffff1660e01b8152600401602060405180830381865afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c91906184e4565b613211613f18565b565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561131857600080fd5b505af115801561132c573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561139657600080fd5b505af11580156113aa573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561143457600080fd5b505af1158015611448573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa1580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d4919061867c565b60606018805480602002602001604051908101604052809291908181526020018280548015610d53576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d35575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610d53576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d35575050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561160a57600080fd5b505af115801561161e573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc7759991506024016104a6565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156116f657600080fd5b505af115801561170a573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024016104a6565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156117cf57600080fd5b505af11580156117e3573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b15801561184a57600080fd5b505af115801561185e573d6000803e3d6000fd5b505050506112a4600a601f60019054906101000a90046001600160a01b03166001600160a01b031663f68016b76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118de9190618616565b613e90565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611113578382906000526020600020906002020160405180604001604052908160008201805461193a9061862f565b80601f01602080910402602001604051908101604052809291908181526020018280546119669061862f565b80156119b35780601f10611988576101008083540402835291602001916119b3565b820191906000526020600020905b81548152906001019060200180831161199657829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611a4d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116119fa5790505b50505050508152505081526020019060010190611907565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015611ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af79190618616565b9050611b04600082613e90565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba091906185f4565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401610f92565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015611d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3a9190618616565b9050611d47600082613e90565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de291906185f4565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064016020604051808303816000875af1158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a91906185f4565b50601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015611ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1d9190618616565b9050610fd58282613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa29190618616565b9050611fb1620186a082613e90565b6022546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561202357600080fd5b505af1158015612037573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156120b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d991906185f4565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121539190618616565b905061216262030d4082613e90565b5050565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121eb57600080fd5b505af11580156121ff573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610cb5565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156111135783829060005260206000200180546122969061862f565b80601f01602080910402602001604051908101604052809291908181526020018280546122c29061862f565b801561230f5780601f106122e45761010080835404028352916020019161230f565b820191906000526020600020905b8154815290600101906020018083116122f257829003601f168201915b505050505081526020019060010190612277565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156111135760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561240657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116123b35790505b50505050508152505081526020019060010190612347565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612473573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261249b9190810190618770565b90506124dc6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082613f79565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612531573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125599190810190618770565b905061259a6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082613f79565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261391906187b9565b905061262360128260ff16613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269c9190618616565b90506104d4620186a082613e90565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156111135760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561278e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161273b5790505b505050505081525050815260200190600101906126cf565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561282b57600080fd5b505af115801561283f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a91506024016104a6565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156111135783829060005260206000200180546128d49061862f565b80601f01602080910402602001604051908101604052809291908181526020018280546129009061862f565b801561294d5780601f106129225761010080835404028352916020019161294d565b820191906000526020600020905b81548152906001019060200180831161293057829003601f168201915b5050505050815260200190600101906128b5565b60085460009060ff1615612979575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190618616565b1415905090565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015612b2257600080fd5b505af1158015612b36573d6000803e3d6000fd5b505050506112a4600a601f60019054906101000a90046001600160a01b03166001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ba573d6000803e3d6000fd5b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015612c8457600080fd5b505af1158015612c98573d6000803e3d6000fd5b50506026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612d0e57600080fd5b505af1158015612d22573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015612d8957600080fd5b505af1158015612d9d573d6000803e3d6000fd5b5050601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015612e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e319190618616565b9050612e40620186a082613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb99190618616565b9050612ec8620186a082613e90565b601f546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5a9190618616565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015612fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff091906185f4565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613088919061c350906038016187dc565b6020604051808303816000875af11580156130a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cb91906185f4565b50601f546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561313a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315e9190618616565b905061317e8561316e888561882d565b613178919061882d565b82613e90565b601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156131eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320f9190618616565b905061322b866132218961c350618840565b6131789190618840565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a49190618616565b90506132b261c35082613e90565b5050505050505050565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015613334573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335891906185f4565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156133de57600080fd5b505af11580156133f2573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015613475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216291906185f4565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350b57600080fd5b505af115801561351f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561358b57600080fd5b505af115801561359f573d6000803e3d6000fd5b50506026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561361557600080fd5b505af1158015613629573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561369057600080fd5b505af11580156136a4573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa1580156136fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613721919061867c565b601f5491935091506137419061010090046001600160a01b031683613f18565b6104d4613178848661882d565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137c057600080fd5b505af11580156137d4573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561383c57600080fd5b505af1158015613850573d6000803e3d6000fd5b505050506112a4601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611278573d6000803e3d6000fd5b601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393b9190618616565b905061394a620186a082613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561399f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c39190618616565b90506139d2620186a082613e90565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015613a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5f91906185f4565b50601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af19190618616565b9050613aff61c35082613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b789190618616565b90506104d461c35082613e90565b60606015805480602002602001604051908101604052809291908181526020018280548015610d53576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d35575050505050905090565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c5857600080fd5b505af1158015613c6c573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015613cd657600080fd5b505af1158015613cea573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161141a565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df09190618616565b9050613dfd600082613e90565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401611c0d565b6000613e7b618061565b613e86848483613fcb565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015613efc57600080fd5b505afa158015613f10573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401613ee4565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390613ee49085908590600401618853565b600080613fd88584614046565b905061403b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614026929190618878565b60405160208183030381529060405285614052565b9150505b9392505050565b600061403f8383614080565b60c081015151600090156140765761406f84848460c0015161409b565b905061403f565b61406f8484614241565b600061408c838361432c565b61403f83836020015184614052565b6000806140a6614338565b905060006140b4868361440b565b905060006140cb82606001518360200151856148b1565b905060006140db83838989614ac3565b905060006140e882615940565b602081015181519192509060030b1561415b5789826040015160405160200161411292919061889a565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526141529160040161891b565b60405180910390fd5b600061419e6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615b0f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906141f190849060040161891b565b602060405180830381865afa15801561420e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423291906184e4565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061429690879060040161891b565b600060405180830381865afa1580156142b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142db919081019061894e565b9050600061430982856040516020016142f5929190618983565b604051602081830303815290604052615d0f565b90506001600160a01b038116613e865784846040516020016141129291906189b2565b61216282826000615d22565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906143bf908490600401618a5d565b600060405180830381865afa1580156143dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144049190810190618770565b9250505090565b61443d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506144886040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61449185615e25565b602082015260006144a18661620a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156144e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261450b9190810190618770565b868385602001516040516020016145259493929190618aa4565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061457d90859060040161891b565b600060405180830381865afa15801561459a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145c29190810190618770565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061460a908490600401618ba8565b602060405180830381865afa158015614627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061464b91906185f4565b61466057816040516020016141129190618bfa565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906146a5908490600401618c8c565b600060405180830381865afa1580156146c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146ea9190810190618770565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614731908490600401618cde565b602060405180830381865afa15801561474e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477291906185f4565b15614807576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147bc908490600401618cde565b600060405180830381865afa1580156147d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148019190810190618770565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161482c9190618d30565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614858929190618853565b600060405180830381865afa158015614875573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261489d9190810190618770565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816148cd5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061492d5761492d618d9c565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061498157614981618d9c565b60200260200101819052508460405160200161499d9190618dcb565b604051602081830303815290604052816002815181106149bf576149bf618d9c565b6020026020010181905250826040516020016149db9190618e37565b604051602081830303815290604052816003815181106149fd576149fd618d9c565b60200260200101819052506000614a1382615940565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614aa4906040805180820182526000808252602091820152815180830190925284518252808501908201529061648d565b614ab957856040516020016141129190618e78565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614b13565b511590565b614c8757826020015115614bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614152565b8260c0015115614c87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614152565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614ca057905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614cfb90618f09565b935060ff1681518110614d1057614d10618d9c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614d619190618f28565b604051602081830303815290604052828280614d7c90618f09565b935060ff1681518110614d9157614d91618d9c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614dde90618f09565b935060ff1681518110614df357614df3618d9c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614e4090618f09565b935060ff1681518110614e5557614e55618d9c565b60200260200101819052508760200151828280614e7190618f09565b935060ff1681518110614e8657614e86618d9c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280614ed390618f09565b935060ff1681518110614ee857614ee8618d9c565b602090810291909101015287518282614f0081618f09565b935060ff1681518110614f1557614f15618d9c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614f6290618f09565b935060ff1681518110614f7757614f77618d9c565b6020026020010181905250614f8b466164ee565b8282614f9681618f09565b935060ff1681518110614fab57614fab618d9c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614ff890618f09565b935060ff168151811061500d5761500d618d9c565b60200260200101819052508682828061502590618f09565b935060ff168151811061503a5761503a618d9c565b60209081029190910101528551156151615760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261508b81618f09565b935060ff16815181106150a0576150a0618d9c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906150f090899060040161891b565b600060405180830381865afa15801561510d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151359190810190618770565b828261514081618f09565b935060ff168151811061515557615155618d9c565b60200260200101819052505b8460200151156152315760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826151aa81618f09565b935060ff16815181106151bf576151bf618d9c565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061520c90618f09565b935060ff168151811061522157615221618d9c565b60200260200101819052506153f8565b615269614b0e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6152fc5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826152ac81618f09565b935060ff16815181106152c1576152c1618d9c565b60200260200101819052508460a001516040516020016152e19190618dcb565b60405160208183030381529060405282828061520c90618f09565b8460c0015115801561533f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261533d90511590565b155b156153f85760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261538381618f09565b935060ff168151811061539857615398618d9c565b60200260200101819052506153ac8861658e565b6040516020016153bc9190618dcb565b6040516020818303038152906040528282806153d790618f09565b935060ff16815181106153ec576153ec618d9c565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261542c90511590565b6154c15760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261546f81618f09565b935060ff168151811061548457615484618d9c565b602002602001018190525084604001518282806154a090618f09565b935060ff16815181106154b5576154b5618d9c565b60200260200101819052505b6060850151156155e25760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261550a81618f09565b935060ff168151811061551f5761551f618d9c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561558e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155b69190810190618770565b82826155c181618f09565b935060ff16815181106155d6576155d6618d9c565b60200260200101819052505b60e085015151156156895760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261562c81618f09565b935060ff168151811061564157615641618d9c565b602002602001018190525061565d8560e00151600001516164ee565b828261566881618f09565b935060ff168151811061567d5761567d618d9c565b60200260200101819052505b60e085015160200151156157335760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826156d681618f09565b935060ff16815181106156eb576156eb618d9c565b60200260200101819052506157078560e00151602001516164ee565b828261571281618f09565b935060ff168151811061572757615727618d9c565b60200260200101819052505b60e085015160400151156157dd5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261578081618f09565b935060ff168151811061579557615795618d9c565b60200260200101819052506157b18560e00151604001516164ee565b82826157bc81618f09565b935060ff16815181106157d1576157d1618d9c565b60200260200101819052505b60e085015160600151156158875760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261582a81618f09565b935060ff168151811061583f5761583f618d9c565b602002602001018190525061585b8560e00151606001516164ee565b828261586681618f09565b935060ff168151811061587b5761587b618d9c565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156158a5576158a56186a8565b6040519080825280602002602001820160405280156158d857816020015b60608152602001906001900390816158c35790505b50905060005b8260ff168160ff16101561593157838160ff168151811061590157615901618d9c565b6020026020010151828260ff168151811061591e5761591e618d9c565b60209081029190910101526001016158de565b5093505050505b949350505050565b6159676040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916159ed91869101618f93565b600060405180830381865afa158015615a0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a329190810190618770565b90506000615a40868361707d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615a7091906183ba565b6000604051808303816000875af1158015615a8f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ab79190810190618fda565b805190915060030b15801590615ad05750602081015151155b8015615adf5750604081015151155b15614ab95781600081518110615af757615af7618d9c565b60200260200101516040516020016141129190619090565b60606000615b448560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615b7b9082905b906171d2565b15615cd8576000615bf882615bf284615bec615bbe8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906171f9565b9061725b565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c5c9082906171d2565b15615cc657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cc3905b82906172e0565b90505b615ccf81617306565b9250505061403f565b8215615cf157848460405160200161411292919061927c565b505060408051602081019091526000815261403f565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615d3157505050565b6000615d3e84848461736f565b90506000615d4b82615940565b602081015181519192509060030b158015615de75750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615de790604080518082018252600080825260209182015281518083019092528451825280850190820152615b75565b15615df457505050505050565b60408201515115615e145781604001516040516020016141129190619323565b806040516020016141129190619381565b60606000615e5a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ebf905b829061648d565b15615f2e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261403f90615f2990839061790a565b617306565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f90905b8290617994565b60010361605d57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ff690615cbc565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261403f90615f29905b83906172e0565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160bc90615eb8565b156161f357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616124908390617a2e565b9050600081600183516161379190618840565b8151811061614757616147618d9c565b602002602001015190506161ea615f296161bd6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061790a565b95945050505050565b8260405160200161411291906193ec565b50919050565b6060600061623f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506162a190615eb8565b156162af5761403f81617306565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261630e90615f89565b60010361637857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261403f90615f2990616056565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163d790615eb8565b156161f357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061643f908390617a2e565b905060018151111561647b57806002825161645a9190618840565b8151811061646a5761646a618d9c565b602002602001015192505050919050565b508260405160200161411291906193ec565b8051825160009111156164a257506000613e8a565b815183516020850151600092916164b89161882d565b6164c29190618840565b9050826020015181036164d9576001915050613e8a565b82516020840151819020912014905092915050565b606060006164fb83617ad3565b600101905060008167ffffffffffffffff81111561651b5761651b6186a8565b6040519080825280601f01601f191660200182016040528015616545576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461654f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161661a905b8290617bb5565b1561665a57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166b990616613565b156166f957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261675890616613565b1561679857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167f790616613565b8061685c5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685c90616613565b1561689c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168fb90616613565b806169605750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696090616613565b156169a057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169ff90616613565b80616a645750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a6490616613565b15616aa457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b0390616613565b80616b685750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b6890616613565b15616ba857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0790616613565b15616c4757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca690616613565b15616ce657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4590616613565b15616d8557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616de490616613565b15616e2457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e8390616613565b15616ec357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2290616613565b80616f875750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f8790616613565b15616fc757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261702690616613565b1561706657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161411292906020016194ca565b60608060005b8451811015617108578185828151811061709f5761709f618d9c565b60200260200101516040516020016170b8929190618983565b6040516020818303038152906040529150600185516170d79190618840565b811461710057816040516020016170ee9190619633565b60405160208183030381529060405291505b600101617083565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617121579050509050838160008151811061714c5761714c618d9c565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106171a0576171a0618d9c565b602002602001018190525081816002815181106171bf576171bf618d9c565b6020908102919091010152949350505050565b60208083015183518351928401516000936171f09291849190617bc9565b14159392505050565b6040805180820190915260008082526020820152600061722b8460000151856020015185600001518660200151617cda565b905083602001518161723d9190618840565b8451859061724c908390618840565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617280575081613e8a565b60208083015190840151600191146172a75750815160208481015190840151829020919020145b80156172d8578251845185906172be908390618840565b90525082516020850180516172d490839061882d565b9052505b509192915050565b60408051808201909152600080825260208201526172ff838383617dfa565b5092915050565b60606000826000015167ffffffffffffffff811115617327576173276186a8565b6040519080825280601f01601f191660200182016040528015617351576020820181803683370190505b50905060006020820190506172ff8185602001518660000151617ea5565b6060600061737b614338565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161739857905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806173f390618f09565b935060ff168151811061740857617408618d9c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016174599190619674565b60405160208183030381529060405282828061747490618f09565b935060ff168151811061748957617489618d9c565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806174d690618f09565b935060ff16815181106174eb576174eb618d9c565b6020026020010181905250826040516020016175079190618e37565b60405160208183030381529060405282828061752290618f09565b935060ff168151811061753757617537618d9c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061758490618f09565b935060ff168151811061759957617599618d9c565b60200260200101819052506175ae8784617f1f565b82826175b981618f09565b935060ff16815181106175ce576175ce618d9c565b60209081029190910101528551511561767a5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261762081618f09565b935060ff168151811061763557617635618d9c565b602002602001018190525061764e866000015184617f1f565b828261765981618f09565b935060ff168151811061766e5761766e618d9c565b60200260200101819052505b8560800151156176e85760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826176c381618f09565b935060ff16815181106176d8576176d8618d9c565b602002602001018190525061774e565b841561774e5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261772d81618f09565b935060ff168151811061774257617742618d9c565b60200260200101819052505b604086015151156177ea5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261779881618f09565b935060ff16815181106177ad576177ad618d9c565b602002602001018190525085604001518282806177c990618f09565b935060ff16815181106177de576177de618d9c565b60200260200101819052505b8560600151156178545760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261783381618f09565b935060ff168151811061784857617848618d9c565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617872576178726186a8565b6040519080825280602002602001820160405280156178a557816020015b60608152602001906001900390816178905790505b50905060005b8260ff168160ff1610156178fe57838160ff16815181106178ce576178ce618d9c565b6020026020010151828260ff16815181106178eb576178eb618d9c565b60209081029190910101526001016178ab565b50979650505050505050565b604080518082019091526000808252602082015281518351101561792f575081613e8a565b815183516020850151600092916179459161882d565b61794f9190618840565b60208401519091506001908214617970575082516020840151819020908220145b801561798b57835185518690617987908390618840565b9052505b50929392505050565b60008082600001516179b88560000151866020015186600001518760200151617cda565b6179c2919061882d565b90505b835160208501516179d6919061882d565b81116172ff57816179e6816196b9565b9250508260000151617a1d856020015183617a019190618840565b8651617a0d9190618840565b8386600001518760200151617cda565b617a27919061882d565b90506179c5565b60606000617a3c8484617994565b617a4790600161882d565b67ffffffffffffffff811115617a5f57617a5f6186a8565b604051908082528060200260200182016040528015617a9257816020015b6060815260200190600190039081617a7d5790505b50905060005b8151811015615d0757617aae615f2986866172e0565b828281518110617ac057617ac0618d9c565b6020908102919091010152600101617a98565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617b1c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617b48576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617b6657662386f26fc10000830492506010015b6305f5e1008310617b7e576305f5e100830492506008015b6127108310617b9257612710830492506004015b60648310617ba4576064830492506002015b600a8310613e8a5760010192915050565b6000617bc18383617f5f565b159392505050565b600080858411617cd05760208411617c7c5760008415617c14576001617bf0866020618840565b617bfb9060086196d3565b617c069060026197d1565b617c109190618840565b1990505b8351811685617c23898961882d565b617c2d9190618840565b805190935082165b818114617c6757878411617c4f5787945050505050615938565b83617c59816197dd565b945050828451169050617c35565b617c71878561882d565b945050505050615938565b838320617c898588618840565b617c93908761882d565b91505b858210617cce57848220808203617cbb57617cb1868461882d565b9350505050615938565b617cc6600184618840565b925050617c96565b505b5092949350505050565b60008381868511617de55760208511617d945760008515617d26576001617d02876020618840565b617d0d9060086196d3565b617d189060026197d1565b617d229190618840565b1990505b84518116600087617d378b8b61882d565b617d419190618840565b855190915083165b828114617d8657818610617d6e57617d618b8b61882d565b9650505050505050615938565b85617d78816196b9565b965050838651169050617d49565b859650505050505050615938565b508383206000905b617da68689618840565b8211617de357858320808203617dc25783945050505050615938565b617dcd60018561882d565b9350508180617ddb906196b9565b925050617d9c565b505b617def878761882d565b979650505050505050565b60408051808201909152600080825260208201526000617e2c8560000151866020015186600001518760200151617cda565b602080870180519186019190915251909150617e489082618840565b835284516020860151617e5b919061882d565b8103617e6a5760008552617e9c565b83518351617e78919061882d565b85518690617e87908390618840565b9052508351617e96908261882d565b60208601525b50909392505050565b60208110617edd5781518352617ebc60208461882d565b9250617ec960208361882d565b9150617ed6602082618840565b9050617ea5565b6000198115617f0c576001617ef3836020618840565b617eff906101006197d1565b617f099190618840565b90505b9151835183169219169190911790915250565b60606000617f2d848461440b565b8051602080830151604051939450617f47939091016197f4565b60405160208183030381529060405291505092915050565b8151815160009190811115617f72575081515b6020808501519084015160005b8381101561802b5782518251808214617ffb576000196020871015617fda57600184617fac896020618840565b617fb6919061882d565b617fc19060086196d3565b617fcc9060026197d1565b617fd69190618840565b1990505b8181168382168181039114617ff8579750613e8a9650505050505050565b50505b61800660208661882d565b945061801360208561882d565b93505050602081618024919061882d565b9050617f7f565b5084518651614ab9919061984c565b610b678061986d83390190565b61106f8061a3d483390190565b611ac28061b44383390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016180a46180a9565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016180a46040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561815b5783516001600160a01b0316835260209384019390920191600101618134565b509095945050505050565b60005b83811015618181578181015183820152602001618169565b50506000910152565b600081518084526181a2816020860160208601618166565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618298577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261828284865161818a565b6020958601959094509290920191600101618248565b5091975050506020948501949290920191506001016181de565b50929695505050505050565b600081518084526020840193506020830160005b828110156183125781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016182d2565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618388604088018261818a565b90506020820151915086810360208801526183a381836182be565b965050506020938401939190910190600101618344565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261841c85835161818a565b945060209384019391909101906001016183e2565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526184b260408701826182be565b9550506020938401939190910190600101618459565b80516001600160a01b03811681146184df57600080fd5b919050565b6000602082840312156184f657600080fd5b61403f826184c8565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff88166040830152866060830152600386106185b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a08301526185da60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561860657600080fd5b8151801515811461403f57600080fd5b60006020828403121561862857600080fd5b5051919050565b600181811c9082168061864357607f821691505b602082108103616204577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000806040838503121561868f57600080fd5b618698836184c8565b6020939093015192949293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156186fa576186fa6186a8565b60405290565b60008067ffffffffffffffff84111561871b5761871b6186a8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561874a5761874a6186a8565b60405283815290508082840185101561876257600080fd5b615d07846020830185618166565b60006020828403121561878257600080fd5b815167ffffffffffffffff81111561879957600080fd5b8201601f810184136187aa57600080fd5b613e8684825160208401618700565b6000602082840312156187cb57600080fd5b815160ff8116811461403f57600080fd5b6040815260006187ef604083018561818a565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115613e8a57613e8a6187fe565b81810381811115613e8a57613e8a6187fe565b604081526000618866604083018561818a565b828103602084015261403b818561818a565b6001600160a01b0383168152604060208201526000615938604083018461818a565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516188d281601a850160208801618166565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161890f81601c840160208801618166565b01601c01949350505050565b60208152600061403f602083018461818a565b600082601f83011261893f57600080fd5b61403f83835160208501618700565b60006020828403121561896057600080fd5b815167ffffffffffffffff81111561897757600080fd5b613e868482850161892e565b60008351618995818460208801618166565b8351908301906189a9818360208801618166565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189ea81601a850160208801618166565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a27816033840160208801618166565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061403f608083018461818a565b60008551618ab6818460208a01618166565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618af0816001840160208a01618166565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b2e816002840160208901618166565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b70816002840160208801618166565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618bbb604083018461818a565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c3281601f850160208701618166565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618c9f604083018461818a565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618cf1604083018461818a565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618d68816014850160208701618166565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e03816001850160208701618166565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618e49818460208701618166565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618efc81604b850160208701618166565b91909101604b0192915050565b600060ff821660ff8103618f1f57618f1f6187fe565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618f86816029850160208701618166565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061403f608083018461818a565b600060208284031215618fec57600080fd5b815167ffffffffffffffff81111561900357600080fd5b82016060818503121561901557600080fd5b61901d6186d7565b81518060030b811461902e57600080fd5b8152602082015167ffffffffffffffff81111561904a57600080fd5b6190568682850161892e565b602083015250604082015167ffffffffffffffff81111561907657600080fd5b6190828682850161892e565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516190ee816021850160208701618166565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516192da816021850160208801618166565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161931781602e840160208801618166565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618f86816029850160208701618166565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516193df816022850160208701618166565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161942481600e850160208701618166565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619502816018850160208801618166565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161953f81601c840160208801618166565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619645818460208701618166565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516196ac81601c850160208701618166565b91909101601c0192915050565b600060001982036196cc576196cc6187fe565b5060010190565b8082028115828204841417613e8a57613e8a6187fe565b6001815b600184111561972557808504811115619709576197096187fe565b600184161561971757908102905b60019390931c9280026196ee565b935093915050565b60008261973c57506001613e8a565b8161974957506000613e8a565b816001811461975f576002811461976957619785565b6001915050613e8a565b60ff84111561977a5761977a6187fe565b50506001821b613e8a565b5060208310610133831016604e8410600b84101617156197a8575081810a613e8a565b6197b560001984846196ea565b80600019048211156197c9576197c96187fe565b029392505050565b600061403f838361972d565b6000816197ec576197ec6187fe565b506000190190565b60008351619806818460208801618166565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619840816001840160208801618166565b01600101949350505050565b81810360008312801583831316838312821617156172ff576172ff6187fe56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220a43967e13d8e35f364f3cdb6ecac268084c561ca3e6d91a1f4a54b41cd42ccbb64736f6c634300081a003360c060405234801561001057600080fd5b50604051611ac2380380611ac283398101604081905261002f916101db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600761006f898261032d565b50600861007c888261032d565b506009805460ff191660ff881617905560808590528360028111156100a3576100a36103eb565b60a08160028111156100b7576100b76103eb565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104019350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261011e57600080fd5b81516001600160401b03811115610137576101376100f7565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610165576101656100f7565b60405281815283820160200185101561017d57600080fd5b60005b8281101561019c57602081860181015183830182015201610180565b506000918101602001919091529392505050565b8051600381106101bf57600080fd5b919050565b80516001600160a01b03811681146101bf57600080fd5b600080600080600080600080610100898b0312156101f857600080fd5b88516001600160401b0381111561020e57600080fd5b61021a8b828c0161010d565b60208b015190995090506001600160401b0381111561023857600080fd5b6102448b828c0161010d565b975050604089015160ff8116811461025b57600080fd5b60608a0151909650945061027160808a016101b0565b60a08a0151909450925061028760c08a016101c4565b915061029560e08a016101c4565b90509295985092959890939650565b600181811c908216806102b857607f821691505b6020821081036102d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561032857806000526020600020601f840160051c810160208510156103055750805b601f840160051c820191505b818110156103255760008155600101610311565b50505b505050565b81516001600160401b03811115610346576103466100f7565b61035a8161035484546102a4565b846102de565b6020601f82116001811461038e57600083156103765750848201515b600019600385901b1c1916600184901b178455610325565b600084815260208120601f198516915b828110156103be578785015182556020948501946001909201910161039e565b50848210156103dc5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05161168e61043460003960006103280152600081816102d901528181610a1d0152610b23015261168e6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b714610432578063f687d12a1461043b578063fa62d57f1461044e57600080fd5b8063d9eeebed146103a5578063dd62ed3e146103d9578063eddeb1231461041f57600080fd5b8063c7012626116100bd578063c70126261461036a578063c835d7cc1461037d578063ccc775991461039257600080fd5b806395d89b411461031b578063a3413d0314610323578063a9059cbb1461035757600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a082311461029e57806385e1f4d0146102d45780638b851b95146102fb57600080fd5b80633ce4a5bc1461025d57806342966c681461027857806347e7ef241461028b57600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610457565b6040516101b2919061126d565b60405180910390f35b6101ce6101c93660046112ac565b6104e9565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe3660046112d8565b610500565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60095460405160ff90911681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce610286366004611319565b610597565b6101ce6102993660046112ac565b6105ab565b6101e26102ac366004611332565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a56106ff565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b2919061134f565b6101ce6103653660046112ac565b61070e565b6101ce6103783660046113bf565b61071b565b61039061038b366004611332565b61086a565b005b6103906103a0366004611332565b610931565b6103ad6109f1565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e26103e73660046114b7565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b61039061042d366004611319565b610c0f565b6101e260025481565b610390610449366004611319565b610c91565b6101e260035481565b606060078054610466906114f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610492906114f0565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b5050505050905090565b60006104f6338484610d13565b5060015b92915050565b600061050d848484610e1c565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610578576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61058c85336105878685611572565b610d13565b506001949350505050565b60006105a33383610fd7565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab148015906105e9575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561060d575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610644576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61064e8383611119565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526106ee918690611585565b60405180910390a250600192915050565b606060088054610466906114f0565b60006104f6338484610e1c565b60008060006107286109f1565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de91906115a7565b610814576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081e3385610fd7565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d95591610857918991899187916115c9565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108b7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461097e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610926565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa891906115f8565b905073ffffffffffffffffffffffffffffffffffffffff8116610af7576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa9190611615565b905080600003610be6576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610bf9919061162e565b610c039190611645565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610c5c576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610926565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cde576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610926565b73ffffffffffffffffffffffffffffffffffffffff8316610d60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610dad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e69576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610eb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610f16576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f208282611572565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681529081208054849290610f63908490611645565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fc991815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611024576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205481811015611084576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61108e8282611572565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040812091909155600680548492906110c9908490611572565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e0f565b73ffffffffffffffffffffffffffffffffffffffff8216611166576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546111789190611645565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906111b2908490611645565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561122f57602081850181015186830182015201611213565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006112806020830184611209565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112a957600080fd5b50565b600080604083850312156112bf57600080fd5b82356112ca81611287565b946020939093013593505050565b6000806000606084860312156112ed57600080fd5b83356112f881611287565b9250602084013561130881611287565b929592945050506040919091013590565b60006020828403121561132b57600080fd5b5035919050565b60006020828403121561134457600080fd5b813561128081611287565b602081016003831061138a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113d257600080fd5b823567ffffffffffffffff8111156113e957600080fd5b8301601f810185136113fa57600080fd5b803567ffffffffffffffff81111561141457611414611390565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561148057611480611390565b60405281815282820160200187101561149857600080fd5b8160208401602083013760006020928201830152969401359450505050565b600080604083850312156114ca57600080fd5b82356114d581611287565b915060208301356114e581611287565b809150509250929050565b600181811c9082168061150457607f821691505b60208210810361153d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104fa576104fa611543565b6040815260006115986040830185611209565b90508260208301529392505050565b6000602082840312156115b957600080fd5b8151801515811461128057600080fd5b6080815260006115dc6080830187611209565b6020830195909552506040810192909252606090910152919050565b60006020828403121561160a57600080fd5b815161128081611287565b60006020828403121561162757600080fd5b5051919050565b80820281158282048414176104fa576104fa611543565b808201808211156104fa576104fa61154356fea2646970667358221220ff62fd4bd87c4bd8cb6b710eb3bc879bf82b272805bab80a5c462f9aee4e937164736f6c634300081a0033a2646970667358221220eef539b0ff825d0f63f40c6c8fd9d7e1adcffe002c085856a808489b922a082464736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d02d8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80638032668011610145578063d509b16c116100bd578063e13aba481161008c578063f1f87f4011610071578063f1f87f40146103a2578063f2413096146103aa578063fa7626d4146103b257600080fd5b8063e13aba4814610392578063e20c9f711461039a57600080fd5b8063d509b16c14610372578063d97136a21461037a578063dcba486a14610382578063dfbdf6001461038a57600080fd5b8063b0464fdc11610114578063b5508aa9116100f9578063b5508aa91461034a578063ba414fa614610352578063d04cda981461036a57600080fd5b8063b0464fdc1461033a578063b549984c1461034257600080fd5b8063803266801461030057806385226c8114610308578063916a17c61461031d578063ae9687dc1461033257600080fd5b80633e5e3c23116101d85780635f01db7e116101a75780636ff458501161018c5780636ff45850146102e857806370557298146102f05780637f924c4e146102f857600080fd5b80635f01db7e146102cb57806366d9a9a0146102d357600080fd5b80633e5e3c23146102ab5780633f7286f4146102b35780634b629509146102bb57806358fdbbe0146102c357600080fd5b80632843882611610214578063284388261461027e5780632ade3880146102865780632f6254fc1461029b5780633be9ec80146102a357600080fd5b80630393998b146102465780630a9254e4146102505780631142744e146102585780631ed7831c14610260575b600080fd5b61024e6103bf565b005b61024e6104da565b61024e610bbc565b610268610cfb565b604051610275919061811a565b60405180910390f35b61024e610d5d565b61028e610fda565b60405161027591906181b6565b61024e61111c565b61024e6112a6565b6102686114c5565b610268611525565b61024e611585565b61024e611671565b61024e61175d565b6102db6118e3565b604051610275919061831c565b61024e611a65565b61024e611ca8565b61024e611f29565b61024e612166565b610310612253565b60405161027591906183ba565b610325612323565b6040516102759190618431565b61024e61241e565b6103256126ab565b61024e6127a6565b610310612891565b61035a612961565b6040519015158152602001610275565b61024e612a35565b61024e612b92565b61024e6132bc565b61024e613499565b61024e61374e565b61024e6138aa565b610268613b86565b61024e613be6565b61024e613d5e565b601f5461035a9060ff1681565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561044457600080fd5b505af1158015610458573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb12391506024015b600060405180830381600087803b1580156104c057600080fd5b505af11580156104d4573d6000803e3d6000fd5b50505050565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516105209061803a565b604051809103906000f08015801561053c573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526024805492519081019390935292166044820152610620919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052613e71565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f3ce4a5bc0000000000000000000000000000000000000000000000000000000081529051633ce4a5bc916004808201926020929091908290030181865afa1580156106b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dd91906184e4565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561077b57600080fd5b505af115801561078f573d6000803e3d6000fd5b5050505060008060006040516107a490618047565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156107e0573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560215460405160129360019384936000939192169061083690618054565b610845969594939291906184ff565b604051809103906000f080158015610861573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b15801561090157600080fd5b505af1158015610915573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561097f57600080fd5b505af1158015610993573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a1357600080fd5b505af1158015610a27573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610aa757600080fd5b505af1158015610abb573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906185f4565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104c057600080fd5b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610c4157600080fd5b505af1158015610c55573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044015b6020604051808303816000875af1158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf891906185f4565b50565b60606016805480602002602001604051908101604052809291908181526020018280548015610d5357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d35575b5050505050905090565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190618616565b9050610dfc600082613e90565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9891906185f4565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af1158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd591906185f4565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561111357600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156110fc57838290600052602060002001805461106f9061862f565b80601f016020809104026020016040519081016040528092919081815260200182805461109b9061862f565b80156110e85780601f106110bd576101008083540402835291602001916110e8565b820191906000526020600020905b8154815290600101906020018083116110cb57829003601f168201915b505050505081526020019060010190611050565b505050508152505081526020019060010190610ffe565b50505050905090565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561118e57600080fd5b505af11580156111a2573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b15801561120a57600080fd5b505af115801561121e573d6000803e3d6000fd5b505050506112a4601f60019054906101000a90046001600160a01b03166001600160a01b031663249f46976040518163ffffffff1660e01b8152600401602060405180830381865afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c91906184e4565b613211613f18565b565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561131857600080fd5b505af115801561132c573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561139657600080fd5b505af11580156113aa573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561143457600080fd5b505af1158015611448573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa1580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d4919061867c565b60606018805480602002602001604051908101604052809291908181526020018280548015610d53576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d35575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610d53576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d35575050505050905090565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561160a57600080fd5b505af115801561161e573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc7759991506024016104a6565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156116f657600080fd5b505af115801561170a573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024016104a6565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156117cf57600080fd5b505af11580156117e3573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b15801561184a57600080fd5b505af115801561185e573d6000803e3d6000fd5b505050506112a4600a601f60019054906101000a90046001600160a01b03166001600160a01b031663f68016b76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118de9190618616565b613e90565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611113578382906000526020600020906002020160405180604001604052908160008201805461193a9061862f565b80601f01602080910402602001604051908101604052809291908181526020018280546119669061862f565b80156119b35780601f10611988576101008083540402835291602001916119b3565b820191906000526020600020905b81548152906001019060200180831161199657829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611a4d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116119fa5790505b50505050508152505081526020019060010190611907565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015611ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af79190618616565b9050611b04600082613e90565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba091906185f4565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd9150606401610f92565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015611d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3a9190618616565b9050611d47600082613e90565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de291906185f4565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064016020604051808303816000875af1158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a91906185f4565b50601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015611ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1d9190618616565b9050610fd58282613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa29190618616565b9050611fb1620186a082613e90565b6022546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561202357600080fd5b505af1158015612037573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af11580156120b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d991906185f4565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121539190618616565b905061216262030d4082613e90565b5050565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121eb57600080fd5b505af11580156121ff573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610cb5565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156111135783829060005260206000200180546122969061862f565b80601f01602080910402602001604051908101604052809291908181526020018280546122c29061862f565b801561230f5780601f106122e45761010080835404028352916020019161230f565b820191906000526020600020905b8154815290600101906020018083116122f257829003601f168201915b505050505081526020019060010190612277565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156111135760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561240657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116123b35790505b50505050508152505081526020019060010190612347565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612473573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261249b9190810190618770565b90506124dc6040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082613f79565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612531573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125599190810190618770565b905061259a6040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082613f79565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261391906187b9565b905061262360128260ff16613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269c9190618616565b90506104d4620186a082613e90565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156111135760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561278e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161273b5790505b505050505081525050815260200190600101906126cf565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561282b57600080fd5b505af115801561283f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a91506024016104a6565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156111135783829060005260206000200180546128d49061862f565b80601f01602080910402602001604051908101604052809291908181526020018280546129009061862f565b801561294d5780601f106129225761010080835404028352916020019161294d565b820191906000526020600020905b81548152906001019060200180831161293057829003601f168201915b5050505050815260200190600101906128b5565b60085460009060ff1615612979575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190618616565b1415905090565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015612b2257600080fd5b505af1158015612b36573d6000803e3d6000fd5b505050506112a4600a601f60019054906101000a90046001600160a01b03166001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ba573d6000803e3d6000fd5b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015612c8457600080fd5b505af1158015612c98573d6000803e3d6000fd5b50506026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612d0e57600080fd5b505af1158015612d22573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015612d8957600080fd5b505af1158015612d9d573d6000803e3d6000fd5b5050601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa158015612e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e319190618616565b9050612e40620186a082613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb99190618616565b9050612ec8620186a082613e90565b601f546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5a9190618616565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af1158015612fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff091906185f4565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c701262691613088919061c350906038016187dc565b6020604051808303816000875af11580156130a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cb91906185f4565b50601f546026546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561313a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315e9190618616565b905061317e8561316e888561882d565b613178919061882d565b82613e90565b601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156131eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320f9190618616565b905061322b866132218961c350618840565b6131789190618840565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a49190618616565b90506132b261c35082613e90565b5050505050505050565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015613334573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335891906185f4565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156133de57600080fd5b505af11580156133f2573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af1158015613475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216291906185f4565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561350b57600080fd5b505af115801561351f573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b15801561358b57600080fd5b505af115801561359f573d6000803e3d6000fd5b50506026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561361557600080fd5b505af1158015613629573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b15801561369057600080fd5b505af11580156136a4573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa1580156136fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613721919061867c565b601f5491935091506137419061010090046001600160a01b031683613f18565b6104d4613178848661882d565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137c057600080fd5b505af11580156137d4573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b15801561383c57600080fd5b505af1158015613850573d6000803e3d6000fd5b505050506112a4601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611278573d6000803e3d6000fd5b601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393b9190618616565b905061394a620186a082613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561399f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c39190618616565b90506139d2620186a082613e90565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015613a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5f91906185f4565b50601f54602480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015613acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af19190618616565b9050613aff61c35082613e90565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b789190618616565b90506104d461c35082613e90565b60606015805480602002602001604051908101604052809291908181526020018280548015610d53576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d35575050505050905090565b6026546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c5857600080fd5b505af1158015613c6c573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b158015613cd657600080fd5b505af1158015613cea573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161141a565b601f546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015613dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df09190618616565b9050613dfd600082613e90565b6040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401611c0d565b6000613e7b618061565b613e86848483613fcb565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b158015613efc57600080fd5b505afa158015613f10573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401613ee4565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d96390613ee49085908590600401618853565b600080613fd88584614046565b905061403b6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614026929190618878565b60405160208183030381529060405285614052565b9150505b9392505050565b600061403f8383614080565b60c081015151600090156140765761406f84848460c0015161409b565b905061403f565b61406f8484614241565b600061408c838361432c565b61403f83836020015184614052565b6000806140a6614338565b905060006140b4868361440b565b905060006140cb82606001518360200151856148b1565b905060006140db83838989614ac3565b905060006140e882615940565b602081015181519192509060030b1561415b5789826040015160405160200161411292919061889a565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526141529160040161891b565b60405180910390fd5b600061419e6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615b0f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906141f190849060040161891b565b602060405180830381865afa15801561420e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423291906184e4565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061429690879060040161891b565b600060405180830381865afa1580156142b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142db919081019061894e565b9050600061430982856040516020016142f5929190618983565b604051602081830303815290604052615d0f565b90506001600160a01b038116613e865784846040516020016141129291906189b2565b61216282826000615d22565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906143bf908490600401618a5d565b600060405180830381865afa1580156143dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144049190810190618770565b9250505090565b61443d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506144886040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61449185615e25565b602082015260006144a18661620a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156144e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261450b9190810190618770565b868385602001516040516020016145259493929190618aa4565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061457d90859060040161891b565b600060405180830381865afa15801561459a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145c29190810190618770565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061460a908490600401618ba8565b602060405180830381865afa158015614627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061464b91906185f4565b61466057816040516020016141129190618bfa565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906146a5908490600401618c8c565b600060405180830381865afa1580156146c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146ea9190810190618770565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614731908490600401618cde565b602060405180830381865afa15801561474e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477291906185f4565b15614807576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906147bc908490600401618cde565b600060405180830381865afa1580156147d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148019190810190618770565b60408501525b846001600160a01b03166349c4fac882866000015160405160200161482c9190618d30565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614858929190618853565b600060405180830381865afa158015614875573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261489d9190810190618770565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816148cd5790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061492d5761492d618d9c565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061498157614981618d9c565b60200260200101819052508460405160200161499d9190618dcb565b604051602081830303815290604052816002815181106149bf576149bf618d9c565b6020026020010181905250826040516020016149db9190618e37565b604051602081830303815290604052816003815181106149fd576149fd618d9c565b60200260200101819052506000614a1382615940565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614aa4906040805180820182526000808252602091820152815180830190925284518252808501908201529061648d565b614ab957856040516020016141129190618e78565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614b13565b511590565b614c8757826020015115614bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614152565b8260c0015115614c87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614152565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614ca057905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614cfb90618f09565b935060ff1681518110614d1057614d10618d9c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614d619190618f28565b604051602081830303815290604052828280614d7c90618f09565b935060ff1681518110614d9157614d91618d9c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614dde90618f09565b935060ff1681518110614df357614df3618d9c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280614e4090618f09565b935060ff1681518110614e5557614e55618d9c565b60200260200101819052508760200151828280614e7190618f09565b935060ff1681518110614e8657614e86618d9c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280614ed390618f09565b935060ff1681518110614ee857614ee8618d9c565b602090810291909101015287518282614f0081618f09565b935060ff1681518110614f1557614f15618d9c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614f6290618f09565b935060ff1681518110614f7757614f77618d9c565b6020026020010181905250614f8b466164ee565b8282614f9681618f09565b935060ff1681518110614fab57614fab618d9c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614ff890618f09565b935060ff168151811061500d5761500d618d9c565b60200260200101819052508682828061502590618f09565b935060ff168151811061503a5761503a618d9c565b60209081029190910101528551156151615760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261508b81618f09565b935060ff16815181106150a0576150a0618d9c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906150f090899060040161891b565b600060405180830381865afa15801561510d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526151359190810190618770565b828261514081618f09565b935060ff168151811061515557615155618d9c565b60200260200101819052505b8460200151156152315760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826151aa81618f09565b935060ff16815181106151bf576151bf618d9c565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061520c90618f09565b935060ff168151811061522157615221618d9c565b60200260200101819052506153f8565b615269614b0e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6152fc5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826152ac81618f09565b935060ff16815181106152c1576152c1618d9c565b60200260200101819052508460a001516040516020016152e19190618dcb565b60405160208183030381529060405282828061520c90618f09565b8460c0015115801561533f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261533d90511590565b155b156153f85760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261538381618f09565b935060ff168151811061539857615398618d9c565b60200260200101819052506153ac8861658e565b6040516020016153bc9190618dcb565b6040516020818303038152906040528282806153d790618f09565b935060ff16815181106153ec576153ec618d9c565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261542c90511590565b6154c15760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261546f81618f09565b935060ff168151811061548457615484618d9c565b602002602001018190525084604001518282806154a090618f09565b935060ff16815181106154b5576154b5618d9c565b60200260200101819052505b6060850151156155e25760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261550a81618f09565b935060ff168151811061551f5761551f618d9c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561558e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155b69190810190618770565b82826155c181618f09565b935060ff16815181106155d6576155d6618d9c565b60200260200101819052505b60e085015151156156895760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261562c81618f09565b935060ff168151811061564157615641618d9c565b602002602001018190525061565d8560e00151600001516164ee565b828261566881618f09565b935060ff168151811061567d5761567d618d9c565b60200260200101819052505b60e085015160200151156157335760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826156d681618f09565b935060ff16815181106156eb576156eb618d9c565b60200260200101819052506157078560e00151602001516164ee565b828261571281618f09565b935060ff168151811061572757615727618d9c565b60200260200101819052505b60e085015160400151156157dd5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261578081618f09565b935060ff168151811061579557615795618d9c565b60200260200101819052506157b18560e00151604001516164ee565b82826157bc81618f09565b935060ff16815181106157d1576157d1618d9c565b60200260200101819052505b60e085015160600151156158875760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261582a81618f09565b935060ff168151811061583f5761583f618d9c565b602002602001018190525061585b8560e00151606001516164ee565b828261586681618f09565b935060ff168151811061587b5761587b618d9c565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156158a5576158a56186a8565b6040519080825280602002602001820160405280156158d857816020015b60608152602001906001900390816158c35790505b50905060005b8260ff168160ff16101561593157838160ff168151811061590157615901618d9c565b6020026020010151828260ff168151811061591e5761591e618d9c565b60209081029190910101526001016158de565b5093505050505b949350505050565b6159676040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916159ed91869101618f93565b600060405180830381865afa158015615a0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a329190810190618770565b90506000615a40868361707d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615a7091906183ba565b6000604051808303816000875af1158015615a8f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ab79190810190618fda565b805190915060030b15801590615ad05750602081015151155b8015615adf5750604081015151155b15614ab95781600081518110615af757615af7618d9c565b60200260200101516040516020016141129190619090565b60606000615b448560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615b7b9082905b906171d2565b15615cd8576000615bf882615bf284615bec615bbe8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906171f9565b9061725b565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c5c9082906171d2565b15615cc657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cc3905b82906172e0565b90505b615ccf81617306565b9250505061403f565b8215615cf157848460405160200161411292919061927c565b505060408051602081019091526000815261403f565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615d3157505050565b6000615d3e84848461736f565b90506000615d4b82615940565b602081015181519192509060030b158015615de75750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615de790604080518082018252600080825260209182015281518083019092528451825280850190820152615b75565b15615df457505050505050565b60408201515115615e145781604001516040516020016141129190619323565b806040516020016141129190619381565b60606000615e5a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ebf905b829061648d565b15615f2e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261403f90615f2990839061790a565b617306565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615f90905b8290617994565b60010361605d57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ff690615cbc565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261403f90615f29905b83906172e0565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526160bc90615eb8565b156161f357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616124908390617a2e565b9050600081600183516161379190618840565b8151811061614757616147618d9c565b602002602001015190506161ea615f296161bd6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061790a565b95945050505050565b8260405160200161411291906193ec565b50919050565b6060600061623f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506162a190615eb8565b156162af5761403f81617306565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261630e90615f89565b60010361637857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261403f90615f2990616056565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163d790615eb8565b156161f357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061643f908390617a2e565b905060018151111561647b57806002825161645a9190618840565b8151811061646a5761646a618d9c565b602002602001015192505050919050565b508260405160200161411291906193ec565b8051825160009111156164a257506000613e8a565b815183516020850151600092916164b89161882d565b6164c29190618840565b9050826020015181036164d9576001915050613e8a565b82516020840151819020912014905092915050565b606060006164fb83617ad3565b600101905060008167ffffffffffffffff81111561651b5761651b6186a8565b6040519080825280601f01601f191660200182016040528015616545576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461654f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161661a905b8290617bb5565b1561665a57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166b990616613565b156166f957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261675890616613565b1561679857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167f790616613565b8061685c5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261685c90616613565b1561689c57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168fb90616613565b806169605750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261696090616613565b156169a057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169ff90616613565b80616a645750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a6490616613565b15616aa457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b0390616613565b80616b685750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b6890616613565b15616ba857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c0790616613565b15616c4757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ca690616613565b15616ce657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d4590616613565b15616d8557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616de490616613565b15616e2457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e8390616613565b15616ec357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f2290616613565b80616f875750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f8790616613565b15616fc757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261702690616613565b1561706657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161411292906020016194ca565b60608060005b8451811015617108578185828151811061709f5761709f618d9c565b60200260200101516040516020016170b8929190618983565b6040516020818303038152906040529150600185516170d79190618840565b811461710057816040516020016170ee9190619633565b60405160208183030381529060405291505b600101617083565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617121579050509050838160008151811061714c5761714c618d9c565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106171a0576171a0618d9c565b602002602001018190525081816002815181106171bf576171bf618d9c565b6020908102919091010152949350505050565b60208083015183518351928401516000936171f09291849190617bc9565b14159392505050565b6040805180820190915260008082526020820152600061722b8460000151856020015185600001518660200151617cda565b905083602001518161723d9190618840565b8451859061724c908390618840565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015617280575081613e8a565b60208083015190840151600191146172a75750815160208481015190840151829020919020145b80156172d8578251845185906172be908390618840565b90525082516020850180516172d490839061882d565b9052505b509192915050565b60408051808201909152600080825260208201526172ff838383617dfa565b5092915050565b60606000826000015167ffffffffffffffff811115617327576173276186a8565b6040519080825280601f01601f191660200182016040528015617351576020820181803683370190505b50905060006020820190506172ff8185602001518660000151617ea5565b6060600061737b614338565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161739857905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806173f390618f09565b935060ff168151811061740857617408618d9c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016174599190619674565b60405160208183030381529060405282828061747490618f09565b935060ff168151811061748957617489618d9c565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806174d690618f09565b935060ff16815181106174eb576174eb618d9c565b6020026020010181905250826040516020016175079190618e37565b60405160208183030381529060405282828061752290618f09565b935060ff168151811061753757617537618d9c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061758490618f09565b935060ff168151811061759957617599618d9c565b60200260200101819052506175ae8784617f1f565b82826175b981618f09565b935060ff16815181106175ce576175ce618d9c565b60209081029190910101528551511561767a5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261762081618f09565b935060ff168151811061763557617635618d9c565b602002602001018190525061764e866000015184617f1f565b828261765981618f09565b935060ff168151811061766e5761766e618d9c565b60200260200101819052505b8560800151156176e85760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826176c381618f09565b935060ff16815181106176d8576176d8618d9c565b602002602001018190525061774e565b841561774e5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261772d81618f09565b935060ff168151811061774257617742618d9c565b60200260200101819052505b604086015151156177ea5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261779881618f09565b935060ff16815181106177ad576177ad618d9c565b602002602001018190525085604001518282806177c990618f09565b935060ff16815181106177de576177de618d9c565b60200260200101819052505b8560600151156178545760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261783381618f09565b935060ff168151811061784857617848618d9c565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617872576178726186a8565b6040519080825280602002602001820160405280156178a557816020015b60608152602001906001900390816178905790505b50905060005b8260ff168160ff1610156178fe57838160ff16815181106178ce576178ce618d9c565b6020026020010151828260ff16815181106178eb576178eb618d9c565b60209081029190910101526001016178ab565b50979650505050505050565b604080518082019091526000808252602082015281518351101561792f575081613e8a565b815183516020850151600092916179459161882d565b61794f9190618840565b60208401519091506001908214617970575082516020840151819020908220145b801561798b57835185518690617987908390618840565b9052505b50929392505050565b60008082600001516179b88560000151866020015186600001518760200151617cda565b6179c2919061882d565b90505b835160208501516179d6919061882d565b81116172ff57816179e6816196b9565b9250508260000151617a1d856020015183617a019190618840565b8651617a0d9190618840565b8386600001518760200151617cda565b617a27919061882d565b90506179c5565b60606000617a3c8484617994565b617a4790600161882d565b67ffffffffffffffff811115617a5f57617a5f6186a8565b604051908082528060200260200182016040528015617a9257816020015b6060815260200190600190039081617a7d5790505b50905060005b8151811015615d0757617aae615f2986866172e0565b828281518110617ac057617ac0618d9c565b6020908102919091010152600101617a98565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617b1c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617b48576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617b6657662386f26fc10000830492506010015b6305f5e1008310617b7e576305f5e100830492506008015b6127108310617b9257612710830492506004015b60648310617ba4576064830492506002015b600a8310613e8a5760010192915050565b6000617bc18383617f5f565b159392505050565b600080858411617cd05760208411617c7c5760008415617c14576001617bf0866020618840565b617bfb9060086196d3565b617c069060026197d1565b617c109190618840565b1990505b8351811685617c23898961882d565b617c2d9190618840565b805190935082165b818114617c6757878411617c4f5787945050505050615938565b83617c59816197dd565b945050828451169050617c35565b617c71878561882d565b945050505050615938565b838320617c898588618840565b617c93908761882d565b91505b858210617cce57848220808203617cbb57617cb1868461882d565b9350505050615938565b617cc6600184618840565b925050617c96565b505b5092949350505050565b60008381868511617de55760208511617d945760008515617d26576001617d02876020618840565b617d0d9060086196d3565b617d189060026197d1565b617d229190618840565b1990505b84518116600087617d378b8b61882d565b617d419190618840565b855190915083165b828114617d8657818610617d6e57617d618b8b61882d565b9650505050505050615938565b85617d78816196b9565b965050838651169050617d49565b859650505050505050615938565b508383206000905b617da68689618840565b8211617de357858320808203617dc25783945050505050615938565b617dcd60018561882d565b9350508180617ddb906196b9565b925050617d9c565b505b617def878761882d565b979650505050505050565b60408051808201909152600080825260208201526000617e2c8560000151866020015186600001518760200151617cda565b602080870180519186019190915251909150617e489082618840565b835284516020860151617e5b919061882d565b8103617e6a5760008552617e9c565b83518351617e78919061882d565b85518690617e87908390618840565b9052508351617e96908261882d565b60208601525b50909392505050565b60208110617edd5781518352617ebc60208461882d565b9250617ec960208361882d565b9150617ed6602082618840565b9050617ea5565b6000198115617f0c576001617ef3836020618840565b617eff906101006197d1565b617f099190618840565b90505b9151835183169219169190911790915250565b60606000617f2d848461440b565b8051602080830151604051939450617f47939091016197f4565b60405160208183030381529060405291505092915050565b8151815160009190811115617f72575081515b6020808501519084015160005b8381101561802b5782518251808214617ffb576000196020871015617fda57600184617fac896020618840565b617fb6919061882d565b617fc19060086196d3565b617fcc9060026197d1565b617fd69190618840565b1990505b8181168382168181039114617ff8579750613e8a9650505050505050565b50505b61800660208661882d565b945061801360208561882d565b93505050602081618024919061882d565b9050617f7f565b5084518651614ab9919061984c565b610b678061986d83390190565b61106f8061a3d483390190565b611bb58061b44383390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016180a46180a9565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016180a46040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561815b5783516001600160a01b0316835260209384019390920191600101618134565b509095945050505050565b60005b83811015618181578181015183820152602001618169565b50506000910152565b600081518084526181a2816020860160208601618166565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618298577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261828284865161818a565b6020958601959094509290920191600101618248565b5091975050506020948501949290920191506001016181de565b50929695505050505050565b600081518084526020840193506020830160005b828110156183125781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016182d2565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752618388604088018261818a565b90506020820151915086810360208801526183a381836182be565b965050506020938401939190910190600101618344565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261841c85835161818a565b945060209384019391909101906001016183e2565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156182b2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526184b260408701826182be565b9550506020938401939190910190600101618459565b80516001600160a01b03811681146184df57600080fd5b919050565b6000602082840312156184f657600080fd5b61403f826184c8565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff88166040830152866060830152600386106185b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a08301526185da60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561860657600080fd5b8151801515811461403f57600080fd5b60006020828403121561862857600080fd5b5051919050565b600181811c9082168061864357607f821691505b602082108103616204577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000806040838503121561868f57600080fd5b618698836184c8565b6020939093015192949293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156186fa576186fa6186a8565b60405290565b60008067ffffffffffffffff84111561871b5761871b6186a8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561874a5761874a6186a8565b60405283815290508082840185101561876257600080fd5b615d07846020830185618166565b60006020828403121561878257600080fd5b815167ffffffffffffffff81111561879957600080fd5b8201601f810184136187aa57600080fd5b613e8684825160208401618700565b6000602082840312156187cb57600080fd5b815160ff8116811461403f57600080fd5b6040815260006187ef604083018561818a565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115613e8a57613e8a6187fe565b81810381811115613e8a57613e8a6187fe565b604081526000618866604083018561818a565b828103602084015261403b818561818a565b6001600160a01b0383168152604060208201526000615938604083018461818a565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516188d281601a850160208801618166565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161890f81601c840160208801618166565b01601c01949350505050565b60208152600061403f602083018461818a565b600082601f83011261893f57600080fd5b61403f83835160208501618700565b60006020828403121561896057600080fd5b815167ffffffffffffffff81111561897757600080fd5b613e868482850161892e565b60008351618995818460208801618166565b8351908301906189a9818360208801618166565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516189ea81601a850160208801618166565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618a27816033840160208801618166565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061403f608083018461818a565b60008551618ab6818460208a01618166565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618af0816001840160208a01618166565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b2e816002840160208901618166565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b70816002840160208801618166565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618bbb604083018461818a565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c3281601f850160208701618166565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618c9f604083018461818a565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618cf1604083018461818a565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618d68816014850160208701618166565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e03816001850160208701618166565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618e49818460208701618166565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618efc81604b850160208701618166565b91909101604b0192915050565b600060ff821660ff8103618f1f57618f1f6187fe565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618f86816029850160208701618166565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061403f608083018461818a565b600060208284031215618fec57600080fd5b815167ffffffffffffffff81111561900357600080fd5b82016060818503121561901557600080fd5b61901d6186d7565b81518060030b811461902e57600080fd5b8152602082015167ffffffffffffffff81111561904a57600080fd5b6190568682850161892e565b602083015250604082015167ffffffffffffffff81111561907657600080fd5b6190828682850161892e565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516190ee816021850160208701618166565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516192da816021850160208801618166565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161931781602e840160208801618166565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618f86816029850160208701618166565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516193df816022850160208701618166565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161942481600e850160208701618166565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619502816018850160208801618166565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161953f81601c840160208801618166565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619645818460208701618166565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516196ac81601c850160208701618166565b91909101601c0192915050565b600060001982036196cc576196cc6187fe565b5060010190565b8082028115828204841417613e8a57613e8a6187fe565b6001815b600184111561972557808504811115619709576197096187fe565b600184161561971757908102905b60019390931c9280026196ee565b935093915050565b60008261973c57506001613e8a565b8161974957506000613e8a565b816001811461975f576002811461976957619785565b6001915050613e8a565b60ff84111561977a5761977a6187fe565b50506001821b613e8a565b5060208310610133831016604e8410600b84101617156197a8575081810a613e8a565b6197b560001984846196ea565b80600019048211156197c9576197c96187fe565b029392505050565b600061403f838361972d565b6000816197ec576197ec6187fe565b506000190190565b60008351619806818460208801618166565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619840816001840160208801618166565b01600101949350505050565b81810360008312801583831316838312821617156172ff576172ff6187fe56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea264697066735822122008d7fc4e09519c5dd9f356b03596f6829a151d0bc7682533f9ceab4e459f5ee264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220a43967e13d8e35f364f3cdb6ecac268084c561ca3e6d91a1f4a54b41cd42ccbb64736f6c634300081a003360e060405234801561001057600080fd5b50604051611bb5380380611bb583398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60076100aa8982610360565b5060086100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c051611744610471600039600061024f015260006103440152600081816102f501528181610ad30152610bd901526117446000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b71461044e578063f687d12a14610457578063fa62d57f1461046a57600080fd5b8063d9eeebed146103c1578063dd62ed3e146103f5578063eddeb1231461043b57600080fd5b8063c7012626116100bd578063c701262614610386578063c835d7cc14610399578063ccc77599146103ae57600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a08231146102ba57806385e1f4d0146102f05780638b851b951461031757600080fd5b80633ce4a5bc1461027957806342966c681461029457806347e7ef24146102a757600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610473565b6040516101b29190611323565b60405180910390f35b6101ce6101c9366004611362565b610505565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe36600461138e565b61051c565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce6102a23660046113cf565b6105b3565b6101ce6102b5366004611362565b6105c7565b6101e26102c83660046113e8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071b565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611405565b6101ce610381366004611362565b61072a565b6101ce610394366004611475565b610737565b6103ac6103a73660046113e8565b610886565b005b6103ac6103bc3660046113e8565b61099a565b6103c9610aa7565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e261040336600461156d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b6103ac6104493660046113cf565b610cc5565b6101e260025481565b6103ac6104653660046113cf565b610d47565b6101e260035481565b606060078054610482906115a6565b80601f01602080910402602001604051908101604052809291908181526020018280546104ae906115a6565b80156104fb5780601f106104d0576101008083540402835291602001916104fb565b820191906000526020600020905b8154815290600101906020018083116104de57829003601f168201915b5050505050905090565b6000610512338484610dc9565b5060015b92915050565b6000610529848484610ed2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610594576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a885336105a38685611628565b610dc9565b506001949350505050565b60006105bf338361108d565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610605575060005473ffffffffffffffffffffffffffffffffffffffff163314155b8015610629575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610660576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066a83836111cf565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070a91869061163b565b60405180910390a250600192915050565b606060088054610482906115a6565b6000610512338484610ed2565b6000806000610744610aa7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa919061165d565b610830576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083a338561108d565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955916108739189918991879161167f565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610920576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109e7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a34576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a3879060200161098f565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5e91906116ae565b905073ffffffffffffffffffffffffffffffffffffffff8116610bad576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6091906116cb565b905080600003610c9c576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610caf91906116e4565b610cb991906116fb565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d12576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f9060200161098f565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d94576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a9060200161098f565b73ffffffffffffffffffffffffffffffffffffffff8316610e16576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e63576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f1f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f6c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610fcc576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd68282611628565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526004602052604080822093909355908516815290812080548492906110199084906116fb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161107f91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110da576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020548181101561113a576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111448282611628565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120919091556006805484929061117f908490611628565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec5565b73ffffffffffffffffffffffffffffffffffffffff821661121c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806006600082825461122e91906116fb565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906112689084906116fb565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e5576020818501810151868301820152016112c9565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133660208301846112bf565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461135f57600080fd5b50565b6000806040838503121561137557600080fd5b82356113808161133d565b946020939093013593505050565b6000806000606084860312156113a357600080fd5b83356113ae8161133d565b925060208401356113be8161133d565b929592945050506040919091013590565b6000602082840312156113e157600080fd5b5035919050565b6000602082840312156113fa57600080fd5b81356113368161133d565b6020810160038310611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148857600080fd5b823567ffffffffffffffff81111561149f57600080fd5b8301601f810185136114b057600080fd5b803567ffffffffffffffff8111156114ca576114ca611446565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153657611536611446565b60405281815282820160200187101561154e57600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158057600080fd5b823561158b8161133d565b9150602083013561159b8161133d565b809150509250929050565b600181811c908216806115ba57607f821691505b6020821081036115f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610516576105166115f9565b60408152600061164e60408301856112bf565b90508260208301529392505050565b60006020828403121561166f57600080fd5b8151801515811461133657600080fd5b60808152600061169260808301876112bf565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c057600080fd5b81516113368161133d565b6000602082840312156116dd57600080fd5b5051919050565b8082028115828204841417610516576105166115f9565b80820180821115610516576105166115f956fea264697066735822122037649c2055bfb791d5356fcc351c4af595c644cc42f4d0379388cd4eda6b0fd864736f6c634300081a0033a264697066735822122005c6b196b4839610e5f6e7daab7293466619b27889bc58fcf55dd5ba67fb11c164736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. diff --git a/v2/src/evm/ERC20Custody.sol b/v2/src/evm/ERC20Custody.sol index b7e948e2..c33df59a 100644 --- a/v2/src/evm/ERC20Custody.sol +++ b/v2/src/evm/ERC20Custody.sol @@ -17,10 +17,7 @@ contract ERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors, ReentrancyGua using SafeERC20 for IERC20; /// @notice Gateway contract. - IGatewayEVM public gateway; - /// @notice TSS address. - address public tssAddress; - + IGatewayEVM public immutable gateway; /// @notice New role identifier for pauser role. bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); /// @notice New role identifier for withdrawer role. @@ -28,15 +25,14 @@ contract ERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors, ReentrancyGua /// @notice Constructor for ERC20Custody. /// @dev Set admin as default admin and pauser, and tssAddress as tss role. - constructor(address _gateway, address _tssAddress, address _admin) { - if (_gateway == address(0) || _tssAddress == address(0)) { + constructor(address gateway_, address tssAddress_, address admin_) { + if (gateway_ == address(0) || tssAddress_ == address(0) || admin_ == address(0)) { revert ZeroAddress(); } - gateway = IGatewayEVM(_gateway); - tssAddress = _tssAddress; - _grantRole(DEFAULT_ADMIN_ROLE, _admin); - _grantRole(PAUSER_ROLE, _admin); - _grantRole(WITHDRAWER_ROLE, _tssAddress); + gateway = IGatewayEVM(gateway_); + _grantRole(DEFAULT_ADMIN_ROLE, admin_); + _grantRole(PAUSER_ROLE, admin_); + _grantRole(WITHDRAWER_ROLE, tssAddress_); } /// @notice Pause contract. diff --git a/v2/src/evm/GatewayEVM.sol b/v2/src/evm/GatewayEVM.sol index 3959fae7..db1a8507 100644 --- a/v2/src/evm/GatewayEVM.sol +++ b/v2/src/evm/GatewayEVM.sol @@ -19,6 +19,7 @@ contract GatewayEVM is Initializable, AccessControlUpgradeable, UUPSUpgradeable, + IGatewayEVM, IGatewayEVMErrors, IGatewayEVMEvents, ReentrancyGuardUpgradeable, @@ -49,8 +50,8 @@ contract GatewayEVM is /// @notice Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE. /// @dev Using admin to authorize upgrades and pause, and tss for tss role. - function initialize(address _tssAddress, address _zetaToken, address _admin) public initializer { - if (_tssAddress == address(0) || _zetaToken == address(0)) { + function initialize(address tssAddress_, address zetaToken_, address admin_) public initializer { + if (tssAddress_ == address(0) || zetaToken_ == address(0)) { revert ZeroAddress(); } __UUPSUpgradeable_init(); @@ -58,12 +59,12 @@ contract GatewayEVM is __AccessControl_init(); __Pausable_init(); - _grantRole(DEFAULT_ADMIN_ROLE, _admin); - _grantRole(PAUSER_ROLE, _admin); - tssAddress = _tssAddress; - _grantRole(TSS_ROLE, _tssAddress); + _grantRole(DEFAULT_ADMIN_ROLE, admin_); + _grantRole(PAUSER_ROLE, admin_); + tssAddress = tssAddress_; + _grantRole(TSS_ROLE, tssAddress_); - zetaToken = _zetaToken; + zetaToken = zetaToken_; } /// @dev Authorizes the upgrade of the contract, sender must be owner. @@ -95,8 +96,18 @@ contract GatewayEVM is /// @dev This function can only be called by the TSS address and it is payable. /// @param destination Address to call. /// @param data Calldata to pass to the call. - function executeRevert(address destination, bytes calldata data) public payable onlyRole(TSS_ROLE) whenNotPaused { - (bool success, bytes memory result) = destination.call{ value: msg.value }(""); + function executeRevert( + address destination, + bytes calldata data + ) + public + payable + onlyRole(TSS_ROLE) + whenNotPaused + nonReentrant + { + if (destination == address(0)) revert ZeroAddress(); + (bool success,) = destination.call{ value: msg.value }(""); if (!success) revert ExecutionFailed(); Revertable(destination).onRevert(data); @@ -116,6 +127,7 @@ contract GatewayEVM is payable onlyRole(TSS_ROLE) whenNotPaused + nonReentrant returns (bytes memory) { bytes memory result = _execute(destination, data); @@ -139,9 +151,9 @@ contract GatewayEVM is bytes calldata data ) public - nonReentrant onlyRole(ASSET_HANDLER_ROLE) whenNotPaused + nonReentrant { if (amount == 0) revert InsufficientERC20Amount(); // Approve the target contract to spend the tokens @@ -175,9 +187,9 @@ contract GatewayEVM is bytes calldata data ) external - nonReentrant onlyRole(ASSET_HANDLER_ROLE) whenNotPaused + nonReentrant { if (amount == 0) revert InsufficientERC20Amount(); @@ -189,11 +201,11 @@ contract GatewayEVM is /// @notice Deposits ETH to the TSS address. /// @param receiver Address of the receiver. - function deposit(address receiver) external payable whenNotPaused { + function deposit(address receiver) external payable whenNotPaused nonReentrant { if (msg.value == 0) revert InsufficientETHAmount(); (bool deposited,) = tssAddress.call{ value: msg.value }(""); - if (deposited == false) revert DepositFailed(); + if (!deposited) revert DepositFailed(); emit Deposit(msg.sender, receiver, msg.value, address(0), ""); } @@ -202,7 +214,7 @@ contract GatewayEVM is /// @param receiver Address of the receiver. /// @param amount Amount of tokens to deposit. /// @param asset Address of the ERC20 token. - function deposit(address receiver, uint256 amount, address asset) external whenNotPaused { + function deposit(address receiver, uint256 amount, address asset) external whenNotPaused nonReentrant { if (amount == 0) revert InsufficientERC20Amount(); transferFromToAssetHandler(msg.sender, asset, amount); @@ -213,11 +225,11 @@ contract GatewayEVM is /// @notice Deposits ETH to the TSS address and calls an omnichain smart contract. /// @param receiver Address of the receiver. /// @param payload Calldata to pass to the call. - function depositAndCall(address receiver, bytes calldata payload) external payable whenNotPaused { + function depositAndCall(address receiver, bytes calldata payload) external payable whenNotPaused nonReentrant { if (msg.value == 0) revert InsufficientETHAmount(); (bool deposited,) = tssAddress.call{ value: msg.value }(""); - if (deposited == false) revert DepositFailed(); + if (!deposited) revert DepositFailed(); emit Deposit(msg.sender, receiver, msg.value, address(0), payload); } @@ -235,6 +247,7 @@ contract GatewayEVM is ) external whenNotPaused + nonReentrant { if (amount == 0) revert InsufficientERC20Amount(); @@ -246,28 +259,28 @@ contract GatewayEVM is /// @notice Calls an omnichain smart contract without asset transfer. /// @param receiver Address of the receiver. /// @param payload Calldata to pass to the call. - function call(address receiver, bytes calldata payload) external whenNotPaused { + function call(address receiver, bytes calldata payload) external whenNotPaused nonReentrant { emit Call(msg.sender, receiver, payload); } /// @notice Sets the custody contract address. - /// @param _custody Address of the custody contract. - function setCustody(address _custody) external onlyRole(DEFAULT_ADMIN_ROLE) { + /// @param custody_ Address of the custody contract. + function setCustody(address custody_) external onlyRole(DEFAULT_ADMIN_ROLE) { if (custody != address(0)) revert CustodyInitialized(); - if (_custody == address(0)) revert ZeroAddress(); + if (custody_ == address(0)) revert ZeroAddress(); - _grantRole(ASSET_HANDLER_ROLE, _custody); - custody = _custody; + _grantRole(ASSET_HANDLER_ROLE, custody_); + custody = custody_; } /// @notice Sets the connector contract address. - /// @param _zetaConnector Address of the connector contract. - function setConnector(address _zetaConnector) external onlyRole(DEFAULT_ADMIN_ROLE) { + /// @param zetaConnector_ Address of the connector contract. + function setConnector(address zetaConnector_) external onlyRole(DEFAULT_ADMIN_ROLE) { if (zetaConnector != address(0)) revert CustodyInitialized(); - if (_zetaConnector == address(0)) revert ZeroAddress(); + if (zetaConnector_ == address(0)) revert ZeroAddress(); - _grantRole(ASSET_HANDLER_ROLE, _zetaConnector); - zetaConnector = _zetaConnector; + _grantRole(ASSET_HANDLER_ROLE, zetaConnector_); + zetaConnector = zetaConnector_; } /// @dev Resets the approval of a token for a specified address. @@ -291,7 +304,7 @@ contract GatewayEVM is // transfer amount to gateway IERC20(token).safeTransferFrom(from, address(this), amount); // approve connector to handle tokens depending on connector version (eg. lock or burn) - IERC20(token).approve(zetaConnector, amount); + if (!IERC20(token).approve(zetaConnector, amount)) revert ApprovalFailed(); // send tokens to connector ZetaConnectorBase(zetaConnector).receiveTokens(amount); } else { @@ -309,7 +322,7 @@ contract GatewayEVM is if (token == zetaToken) { // transfer to connector // approve connector to handle tokens depending on connector version (eg. lock or burn) - IERC20(token).approve(zetaConnector, amount); + if (!IERC20(token).approve(zetaConnector, amount)) revert ApprovalFailed(); // send tokens to connector ZetaConnectorBase(zetaConnector).receiveTokens(amount); } else { diff --git a/v2/src/evm/ZetaConnectorBase.sol b/v2/src/evm/ZetaConnectorBase.sol index 5aa31bf6..32f397bf 100644 --- a/v2/src/evm/ZetaConnectorBase.sol +++ b/v2/src/evm/ZetaConnectorBase.sol @@ -23,8 +23,6 @@ abstract contract ZetaConnectorBase is IZetaConnectorEvents, ReentrancyGuard, Pa IGatewayEVM public immutable gateway; /// @notice The address of the Zeta token. address public immutable zetaToken; - /// @notice The address of the TSS (Threshold Signature Scheme) contract. - address public tssAddress; /// @notice New role identifier for withdrawer role. bytes32 public constant WITHDRAWER_ROLE = keccak256("WITHDRAWER_ROLE"); @@ -33,17 +31,16 @@ abstract contract ZetaConnectorBase is IZetaConnectorEvents, ReentrancyGuard, Pa /// @notice Constructor for ZetaConnectors. /// @dev Set admin as default admin and pauser, and tssAddress as tss role. - constructor(address _gateway, address _zetaToken, address _tssAddress, address _admin) { - if (_gateway == address(0) || _zetaToken == address(0) || _tssAddress == address(0)) { + constructor(address gateway_, address zetaToken_, address tssAddress_, address admin_) { + if (gateway_ == address(0) || zetaToken_ == address(0) || tssAddress_ == address(0) || admin_ == address(0)) { revert ZeroAddress(); } - gateway = IGatewayEVM(_gateway); - zetaToken = _zetaToken; - tssAddress = _tssAddress; + gateway = IGatewayEVM(gateway_); + zetaToken = zetaToken_; - _grantRole(DEFAULT_ADMIN_ROLE, _admin); - _grantRole(WITHDRAWER_ROLE, _tssAddress); - _grantRole(PAUSER_ROLE, _admin); + _grantRole(DEFAULT_ADMIN_ROLE, admin_); + _grantRole(WITHDRAWER_ROLE, tssAddress_); + _grantRole(PAUSER_ROLE, admin_); } /// @notice Pause contract. diff --git a/v2/src/evm/ZetaConnectorNative.sol b/v2/src/evm/ZetaConnectorNative.sol index 40439f84..d842b597 100644 --- a/v2/src/evm/ZetaConnectorNative.sol +++ b/v2/src/evm/ZetaConnectorNative.sol @@ -12,12 +12,12 @@ contract ZetaConnectorNative is ZetaConnectorBase { using SafeERC20 for IERC20; constructor( - address _gateway, - address _zetaToken, - address _tssAddress, - address _admin + address gateway_, + address zetaToken_, + address tssAddress_, + address admin_ ) - ZetaConnectorBase(_gateway, _zetaToken, _tssAddress, _admin) + ZetaConnectorBase(gateway_, zetaToken_, tssAddress_, admin_) { } /// @notice Withdraw tokens to a specified address. diff --git a/v2/src/evm/ZetaConnectorNonNative.sol b/v2/src/evm/ZetaConnectorNonNative.sol index 65605f79..470ef225 100644 --- a/v2/src/evm/ZetaConnectorNonNative.sol +++ b/v2/src/evm/ZetaConnectorNonNative.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.26; import "./ZetaConnectorBase.sol"; import "./interfaces/IZetaNonEthNew.sol"; -import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; /// @title ZetaConnectorNonNative /// @notice Implementation of ZetaConnectorBase for non-native token handling. @@ -19,20 +18,20 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { error ExceedsMaxSupply(); constructor( - address _gateway, - address _zetaToken, - address _tssAddress, - address _admin + address gateway_, + address zetaToken_, + address tssAddress_, + address admin_ ) - ZetaConnectorBase(_gateway, _zetaToken, _tssAddress, _admin) + ZetaConnectorBase(gateway_, zetaToken_, tssAddress_, admin_) { } /// @notice Set max supply for minting. - /// @param _maxSupply New max supply. + /// @param maxSupply_ New max supply. /// @dev This function can only be called by the TSS address. - function setMaxSupply(uint256 _maxSupply) external onlyRole(WITHDRAWER_ROLE) whenNotPaused { - maxSupply = _maxSupply; - emit MaxSupplyUpdated(_maxSupply); + function setMaxSupply(uint256 maxSupply_) external onlyRole(WITHDRAWER_ROLE) whenNotPaused { + maxSupply = maxSupply_; + emit MaxSupplyUpdated(maxSupply_); } /// @notice Withdraw tokens to a specified address. diff --git a/v2/src/evm/interfaces/IGatewayEVM.sol b/v2/src/evm/interfaces/IGatewayEVM.sol index c752d054..6a702b96 100644 --- a/v2/src/evm/interfaces/IGatewayEVM.sol +++ b/v2/src/evm/interfaces/IGatewayEVM.sol @@ -80,6 +80,12 @@ interface IGatewayEVM { /// @param data The calldata to pass to the contract call. function executeWithERC20(address token, address to, uint256 amount, bytes calldata data) external; + /// @notice Transfers msg.value to destination contract and executes it's onRevert function. + /// @dev This function can only be called by the TSS address and it is payable. + /// @param destination Address to call. + /// @param data Calldata to pass to the call. + function executeRevert(address destination, bytes calldata data) external payable; + /// @notice Executes a call to a contract. /// @param destination The address of the contract to call. /// @param data The calldata to pass to the contract call. @@ -92,6 +98,33 @@ interface IGatewayEVM { /// @param amount The amount of tokens to transfer. /// @param data The calldata to pass to the contract call. function revertWithERC20(address token, address to, uint256 amount, bytes calldata data) external; + + /// @notice Deposits ETH to the TSS address. + /// @param receiver Address of the receiver. + function deposit(address receiver) external payable; + + /// @notice Deposits ERC20 tokens to the custody or connector contract. + /// @param receiver Address of the receiver. + /// @param amount Amount of tokens to deposit. + /// @param asset Address of the ERC20 token. + function deposit(address receiver, uint256 amount, address asset) external; + + /// @notice Deposits ETH to the TSS address and calls an omnichain smart contract. + /// @param receiver Address of the receiver. + /// @param payload Calldata to pass to the call. + function depositAndCall(address receiver, bytes calldata payload) external payable; + + /// @notice Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract. + /// @param receiver Address of the receiver. + /// @param amount Amount of tokens to deposit. + /// @param asset Address of the ERC20 token. + /// @param payload Calldata to pass to the call. + function depositAndCall(address receiver, uint256 amount, address asset, bytes calldata payload) external; + + /// @notice Calls an omnichain smart contract without asset transfer. + /// @param receiver Address of the receiver. + /// @param payload Calldata to pass to the call. + function call(address receiver, bytes calldata payload) external; } /// @title Revertable diff --git a/v2/src/zevm/GatewayZEVM.sol b/v2/src/zevm/GatewayZEVM.sol index 61ecec1a..d9fd5eb2 100644 --- a/v2/src/zevm/GatewayZEVM.sol +++ b/v2/src/zevm/GatewayZEVM.sol @@ -16,6 +16,7 @@ import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol /// @notice The GatewayZEVM contract is the endpoint to call smart contracts on omnichain. /// @dev The contract doesn't hold any funds and should never have active allowances. contract GatewayZEVM is + IGatewayZEVM, IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, @@ -50,8 +51,8 @@ contract GatewayZEVM is /// @notice Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE. /// @dev Using admin to authorize upgrades and pause. - function initialize(address _zetaToken, address _admin) public initializer { - if (_zetaToken == address(0)) { + function initialize(address zetaToken_, address admin_) public initializer { + if (zetaToken_ == address(0)) { revert ZeroAddress(); } __UUPSUpgradeable_init(); @@ -59,9 +60,9 @@ contract GatewayZEVM is __Pausable_init(); __ReentrancyGuard_init(); - _grantRole(DEFAULT_ADMIN_ROLE, _admin); - _grantRole(PAUSER_ROLE, _admin); - zetaToken = _zetaToken; + _grantRole(DEFAULT_ADMIN_ROLE, admin_); + _grantRole(PAUSER_ROLE, admin_); + zetaToken = zetaToken_; } /// @dev Authorizes the upgrade of the contract. @@ -182,7 +183,7 @@ contract GatewayZEVM is function deposit(address zrc20, uint256 amount, address target) external onlyFungible whenNotPaused { if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); - IZRC20(zrc20).deposit(target, amount); + if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); } /// @notice Execute a user-specified contract on ZEVM. @@ -224,7 +225,7 @@ contract GatewayZEVM is { if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); - IZRC20(zrc20).deposit(target, amount); + if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); UniversalContract(target).onCrossChainCall(context, zrc20, amount, message); } @@ -288,7 +289,7 @@ contract GatewayZEVM is { if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); - IZRC20(zrc20).deposit(target, amount); + if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); UniversalContract(target).onRevert(context, zrc20, amount, message); } } diff --git a/v2/src/zevm/ZRC20.sol b/v2/src/zevm/ZRC20.sol index bfdd67ca..fa0a0149 100644 --- a/v2/src/zevm/ZRC20.sol +++ b/v2/src/zevm/ZRC20.sol @@ -42,16 +42,12 @@ contract ZRC20 is IZRC20Metadata, ZRC20Errors, ZRC20Events { uint256 private _totalSupply; string private _name; string private _symbol; - uint8 private _decimals; + uint8 private immutable _decimals; function _msgSender() internal view virtual returns (address) { return msg.sender; } - function _msgData() internal view virtual returns (bytes calldata) { - return msg.data; - } - /** * @dev Only fungible module modifier. */ @@ -74,6 +70,7 @@ contract ZRC20 is IZRC20Metadata, ZRC20Errors, ZRC20Events { address gatewayAddress_ ) { if (msg.sender != FUNGIBLE_MODULE_ADDRESS) revert CallerIsNotFungibleModule(); + if (systemContractAddress_ == address(0) || gatewayAddress_ == address(0)) revert ZeroAddress(); _name = name_; _symbol = symbol_; _decimals = decimals_; @@ -279,6 +276,7 @@ contract ZRC20 is IZRC20Metadata, ZRC20Errors, ZRC20Events { * @param addr, new system contract address. */ function updateSystemContractAddress(address addr) external onlyFungible { + if (addr == address(0)) revert ZeroAddress(); systemContractAddress = addr; emit UpdatedSystemContract(addr); } @@ -288,6 +286,7 @@ contract ZRC20 is IZRC20Metadata, ZRC20Errors, ZRC20Events { * @param addr, new gateway contract address. */ function updateGatewayAddress(address addr) external onlyFungible { + if (addr == address(0)) revert ZeroAddress(); gatewayAddress = addr; emit UpdatedGateway(addr); } diff --git a/v2/src/zevm/interfaces/IGatewayZEVM.sol b/v2/src/zevm/interfaces/IGatewayZEVM.sol index 6d7c2a19..aef95977 100644 --- a/v2/src/zevm/interfaces/IGatewayZEVM.sol +++ b/v2/src/zevm/interfaces/IGatewayZEVM.sol @@ -71,6 +71,49 @@ interface IGatewayZEVM { bytes calldata message ) external; + + /// @notice Deposit ZETA and call a user-specified contract on ZEVM. + /// @param context The context of the cross-chain call. + /// @param amount The amount of tokens to transfer. + /// @param target The target contract to call. + /// @param message The calldata to pass to the contract call. + function depositAndCall( + zContext calldata context, + uint256 amount, + address target, + bytes calldata message + ) + external; + + /// @notice Revert a user-specified contract on ZEVM. + /// @param context The context of the revert call. + /// @param zrc20 The address of the ZRC20 token. + /// @param amount The amount of tokens to revert. + /// @param target The target contract to call. + /// @param message The calldata to pass to the contract call. + function executeRevert( + revertContext calldata context, + address zrc20, + uint256 amount, + address target, + bytes calldata message + ) + external; + + /// @notice Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM. + /// @param context The context of the revert call. + /// @param zrc20 The address of the ZRC20 token. + /// @param amount The amount of tokens to revert. + /// @param target The target contract to call. + /// @param message The calldata to pass to the contract call. + function depositAndRevert( + revertContext calldata context, + address zrc20, + uint256 amount, + address target, + bytes calldata message + ) + external; } /// @title IGatewayZEVMEvents @@ -119,6 +162,9 @@ interface IGatewayZEVMErrors { /// @notice Error indicating a failure to transfer ZRC20 tokens. error ZRC20TransferFailed(); + /// @notice Error indicating a failure to deposit ZRC20 tokens. + error ZRC20DepositFailed(); + /// @notice Error indicating a failure to transfer gas fee. error GasFeeTransferFailed(); diff --git a/v2/typechain-types/ERC20Custody.ts b/v2/typechain-types/ERC20Custody.ts index f4bfcc0a..6f4845ed 100644 --- a/v2/typechain-types/ERC20Custody.ts +++ b/v2/typechain-types/ERC20Custody.ts @@ -38,7 +38,6 @@ export interface ERC20CustodyInterface extends Interface { | "renounceRole" | "revokeRole" | "supportsInterface" - | "tssAddress" | "unpause" | "withdraw" | "withdrawAndCall" @@ -96,10 +95,6 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "supportsInterface", values: [BytesLike] ): string; - encodeFunctionData( - functionFragment: "tssAddress", - values?: undefined - ): string; encodeFunctionData(functionFragment: "unpause", values?: undefined): string; encodeFunctionData( functionFragment: "withdraw", @@ -144,7 +139,6 @@ export interface ERC20CustodyInterface extends Interface { functionFragment: "supportsInterface", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( @@ -394,8 +388,6 @@ export interface ERC20Custody extends BaseContract { "view" >; - tssAddress: TypedContractMethod<[], [string], "view">; - unpause: TypedContractMethod<[], [void], "nonpayable">; withdraw: TypedContractMethod< @@ -482,9 +474,6 @@ export interface ERC20Custody extends BaseContract { getFunction( nameOrSignature: "supportsInterface" ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; - getFunction( - nameOrSignature: "tssAddress" - ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "unpause" ): TypedContractMethod<[], [void], "nonpayable">; diff --git a/v2/typechain-types/ERC20CustodyEchidnaTest.ts b/v2/typechain-types/ERC20CustodyEchidnaTest.ts index f9701fff..a0bd66ef 100644 --- a/v2/typechain-types/ERC20CustodyEchidnaTest.ts +++ b/v2/typechain-types/ERC20CustodyEchidnaTest.ts @@ -41,7 +41,6 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { | "supportsInterface" | "testERC20" | "testWithdrawAndCall" - | "tssAddress" | "unpause" | "withdraw" | "withdrawAndCall" @@ -108,10 +107,6 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { functionFragment: "testWithdrawAndCall", values: [AddressLike, BigNumberish, BytesLike] ): string; - encodeFunctionData( - functionFragment: "tssAddress", - values?: undefined - ): string; encodeFunctionData(functionFragment: "unpause", values?: undefined): string; encodeFunctionData( functionFragment: "withdraw", @@ -165,7 +160,6 @@ export interface ERC20CustodyEchidnaTestInterface extends Interface { functionFragment: "testWithdrawAndCall", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( @@ -425,8 +419,6 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { "nonpayable" >; - tssAddress: TypedContractMethod<[], [string], "view">; - unpause: TypedContractMethod<[], [void], "nonpayable">; withdraw: TypedContractMethod< @@ -526,9 +518,6 @@ export interface ERC20CustodyEchidnaTest extends BaseContract { [void], "nonpayable" >; - getFunction( - nameOrSignature: "tssAddress" - ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "unpause" ): TypedContractMethod<[], [void], "nonpayable">; diff --git a/v2/typechain-types/GatewayEVM.ts b/v2/typechain-types/GatewayEVM.ts index 0c74f929..a22537b1 100644 --- a/v2/typechain-types/GatewayEVM.ts +++ b/v2/typechain-types/GatewayEVM.ts @@ -642,7 +642,7 @@ export interface GatewayEVM extends BaseContract { >; initialize: TypedContractMethod< - [_tssAddress: AddressLike, _zetaToken: AddressLike, _admin: AddressLike], + [tssAddress_: AddressLike, zetaToken_: AddressLike, admin_: AddressLike], [void], "nonpayable" >; @@ -677,13 +677,13 @@ export interface GatewayEVM extends BaseContract { >; setConnector: TypedContractMethod< - [_zetaConnector: AddressLike], + [zetaConnector_: AddressLike], [void], "nonpayable" >; setCustody: TypedContractMethod< - [_custody: AddressLike], + [custody_: AddressLike], [void], "nonpayable" >; @@ -812,7 +812,7 @@ export interface GatewayEVM extends BaseContract { getFunction( nameOrSignature: "initialize" ): TypedContractMethod< - [_tssAddress: AddressLike, _zetaToken: AddressLike, _admin: AddressLike], + [tssAddress_: AddressLike, zetaToken_: AddressLike, admin_: AddressLike], [void], "nonpayable" >; @@ -853,10 +853,10 @@ export interface GatewayEVM extends BaseContract { >; getFunction( nameOrSignature: "setConnector" - ): TypedContractMethod<[_zetaConnector: AddressLike], [void], "nonpayable">; + ): TypedContractMethod<[zetaConnector_: AddressLike], [void], "nonpayable">; getFunction( nameOrSignature: "setCustody" - ): TypedContractMethod<[_custody: AddressLike], [void], "nonpayable">; + ): TypedContractMethod<[custody_: AddressLike], [void], "nonpayable">; getFunction( nameOrSignature: "supportsInterface" ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; diff --git a/v2/typechain-types/GatewayEVMEchidnaTest.ts b/v2/typechain-types/GatewayEVMEchidnaTest.ts index 63ae6ddc..9ee32cd7 100644 --- a/v2/typechain-types/GatewayEVMEchidnaTest.ts +++ b/v2/typechain-types/GatewayEVMEchidnaTest.ts @@ -665,7 +665,7 @@ export interface GatewayEVMEchidnaTest extends BaseContract { >; initialize: TypedContractMethod< - [_tssAddress: AddressLike, _zetaToken: AddressLike, _admin: AddressLike], + [tssAddress_: AddressLike, zetaToken_: AddressLike, admin_: AddressLike], [void], "nonpayable" >; @@ -700,13 +700,13 @@ export interface GatewayEVMEchidnaTest extends BaseContract { >; setConnector: TypedContractMethod< - [_zetaConnector: AddressLike], + [zetaConnector_: AddressLike], [void], "nonpayable" >; setCustody: TypedContractMethod< - [_custody: AddressLike], + [custody_: AddressLike], [void], "nonpayable" >; @@ -846,7 +846,7 @@ export interface GatewayEVMEchidnaTest extends BaseContract { getFunction( nameOrSignature: "initialize" ): TypedContractMethod< - [_tssAddress: AddressLike, _zetaToken: AddressLike, _admin: AddressLike], + [tssAddress_: AddressLike, zetaToken_: AddressLike, admin_: AddressLike], [void], "nonpayable" >; @@ -887,10 +887,10 @@ export interface GatewayEVMEchidnaTest extends BaseContract { >; getFunction( nameOrSignature: "setConnector" - ): TypedContractMethod<[_zetaConnector: AddressLike], [void], "nonpayable">; + ): TypedContractMethod<[zetaConnector_: AddressLike], [void], "nonpayable">; getFunction( nameOrSignature: "setCustody" - ): TypedContractMethod<[_custody: AddressLike], [void], "nonpayable">; + ): TypedContractMethod<[custody_: AddressLike], [void], "nonpayable">; getFunction( nameOrSignature: "supportsInterface" ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; diff --git a/v2/typechain-types/GatewayZEVM.ts b/v2/typechain-types/GatewayZEVM.ts index 8a35b172..68d5989d 100644 --- a/v2/typechain-types/GatewayZEVM.ts +++ b/v2/typechain-types/GatewayZEVM.ts @@ -592,7 +592,7 @@ export interface GatewayZEVM extends BaseContract { >; initialize: TypedContractMethod< - [_zetaToken: AddressLike, _admin: AddressLike], + [zetaToken_: AddressLike, admin_: AddressLike], [void], "nonpayable" >; @@ -774,7 +774,7 @@ export interface GatewayZEVM extends BaseContract { getFunction( nameOrSignature: "initialize" ): TypedContractMethod< - [_zetaToken: AddressLike, _admin: AddressLike], + [zetaToken_: AddressLike, admin_: AddressLike], [void], "nonpayable" >; diff --git a/v2/typechain-types/IGatewayEVM.sol/IGatewayEVM.ts b/v2/typechain-types/IGatewayEVM.sol/IGatewayEVM.ts index 6ee17425..7aff294c 100644 --- a/v2/typechain-types/IGatewayEVM.sol/IGatewayEVM.ts +++ b/v2/typechain-types/IGatewayEVM.sol/IGatewayEVM.ts @@ -23,13 +23,46 @@ import type { export interface IGatewayEVMInterface extends Interface { getFunction( - nameOrSignature: "execute" | "executeWithERC20" | "revertWithERC20" + nameOrSignature: + | "call" + | "deposit(address)" + | "deposit(address,uint256,address)" + | "depositAndCall(address,bytes)" + | "depositAndCall(address,uint256,address,bytes)" + | "execute" + | "executeRevert" + | "executeWithERC20" + | "revertWithERC20" ): FunctionFragment; + encodeFunctionData( + functionFragment: "call", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "deposit(address)", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "deposit(address,uint256,address)", + values: [AddressLike, BigNumberish, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "depositAndCall(address,bytes)", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "depositAndCall(address,uint256,address,bytes)", + values: [AddressLike, BigNumberish, AddressLike, BytesLike] + ): string; encodeFunctionData( functionFragment: "execute", values: [AddressLike, BytesLike] ): string; + encodeFunctionData( + functionFragment: "executeRevert", + values: [AddressLike, BytesLike] + ): string; encodeFunctionData( functionFragment: "executeWithERC20", values: [AddressLike, AddressLike, BigNumberish, BytesLike] @@ -39,7 +72,28 @@ export interface IGatewayEVMInterface extends Interface { values: [AddressLike, AddressLike, BigNumberish, BytesLike] ): string; + decodeFunctionResult(functionFragment: "call", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "deposit(address)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "deposit(address,uint256,address)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "depositAndCall(address,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "depositAndCall(address,uint256,address,bytes)", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeRevert", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "executeWithERC20", data: BytesLike @@ -93,12 +147,53 @@ export interface IGatewayEVM extends BaseContract { event?: TCEvent ): Promise; + call: TypedContractMethod< + [receiver: AddressLike, payload: BytesLike], + [void], + "nonpayable" + >; + + "deposit(address)": TypedContractMethod< + [receiver: AddressLike], + [void], + "payable" + >; + + "deposit(address,uint256,address)": TypedContractMethod< + [receiver: AddressLike, amount: BigNumberish, asset: AddressLike], + [void], + "nonpayable" + >; + + "depositAndCall(address,bytes)": TypedContractMethod< + [receiver: AddressLike, payload: BytesLike], + [void], + "payable" + >; + + "depositAndCall(address,uint256,address,bytes)": TypedContractMethod< + [ + receiver: AddressLike, + amount: BigNumberish, + asset: AddressLike, + payload: BytesLike + ], + [void], + "nonpayable" + >; + execute: TypedContractMethod< [destination: AddressLike, data: BytesLike], [string], "payable" >; + executeRevert: TypedContractMethod< + [destination: AddressLike, data: BytesLike], + [void], + "payable" + >; + executeWithERC20: TypedContractMethod< [ token: AddressLike, @@ -125,6 +220,42 @@ export interface IGatewayEVM extends BaseContract { key: string | FunctionFragment ): T; + getFunction( + nameOrSignature: "call" + ): TypedContractMethod< + [receiver: AddressLike, payload: BytesLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "deposit(address)" + ): TypedContractMethod<[receiver: AddressLike], [void], "payable">; + getFunction( + nameOrSignature: "deposit(address,uint256,address)" + ): TypedContractMethod< + [receiver: AddressLike, amount: BigNumberish, asset: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "depositAndCall(address,bytes)" + ): TypedContractMethod< + [receiver: AddressLike, payload: BytesLike], + [void], + "payable" + >; + getFunction( + nameOrSignature: "depositAndCall(address,uint256,address,bytes)" + ): TypedContractMethod< + [ + receiver: AddressLike, + amount: BigNumberish, + asset: AddressLike, + payload: BytesLike + ], + [void], + "nonpayable" + >; getFunction( nameOrSignature: "execute" ): TypedContractMethod< @@ -132,6 +263,13 @@ export interface IGatewayEVM extends BaseContract { [string], "payable" >; + getFunction( + nameOrSignature: "executeRevert" + ): TypedContractMethod< + [destination: AddressLike, data: BytesLike], + [void], + "payable" + >; getFunction( nameOrSignature: "executeWithERC20" ): TypedContractMethod< diff --git a/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts b/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts index 1c7f0d9a..09a96a0e 100644 --- a/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts +++ b/v2/typechain-types/IGatewayZEVM.sol/IGatewayZEVM.ts @@ -33,13 +33,28 @@ export type ZContextStructOutput = [ chainID: bigint ] & { origin: string; sender: string; chainID: bigint }; +export type RevertContextStruct = { + origin: BytesLike; + sender: AddressLike; + chainID: BigNumberish; +}; + +export type RevertContextStructOutput = [ + origin: string, + sender: string, + chainID: bigint +] & { origin: string; sender: string; chainID: bigint }; + export interface IGatewayZEVMInterface extends Interface { getFunction( nameOrSignature: | "call" | "deposit" - | "depositAndCall" + | "depositAndCall((bytes,address,uint256),uint256,address,bytes)" + | "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)" + | "depositAndRevert" | "execute" + | "executeRevert" | "withdraw(bytes,uint256,address)" | "withdraw(uint256,uint256)" | "withdrawAndCall(bytes,uint256,address,bytes)" @@ -55,13 +70,37 @@ export interface IGatewayZEVMInterface extends Interface { values: [AddressLike, BigNumberish, AddressLike] ): string; encodeFunctionData( - functionFragment: "depositAndCall", + functionFragment: "depositAndCall((bytes,address,uint256),uint256,address,bytes)", + values: [ZContextStruct, BigNumberish, AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)", values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] ): string; + encodeFunctionData( + functionFragment: "depositAndRevert", + values: [ + RevertContextStruct, + AddressLike, + BigNumberish, + AddressLike, + BytesLike + ] + ): string; encodeFunctionData( functionFragment: "execute", values: [ZContextStruct, AddressLike, BigNumberish, AddressLike, BytesLike] ): string; + encodeFunctionData( + functionFragment: "executeRevert", + values: [ + RevertContextStruct, + AddressLike, + BigNumberish, + AddressLike, + BytesLike + ] + ): string; encodeFunctionData( functionFragment: "withdraw(bytes,uint256,address)", values: [BytesLike, BigNumberish, AddressLike] @@ -82,10 +121,22 @@ export interface IGatewayZEVMInterface extends Interface { decodeFunctionResult(functionFragment: "call", data: BytesLike): Result; decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "depositAndCall", + functionFragment: "depositAndCall((bytes,address,uint256),uint256,address,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "depositAndRevert", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeRevert", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "withdraw(bytes,uint256,address)", data: BytesLike @@ -159,7 +210,18 @@ export interface IGatewayZEVM extends BaseContract { "nonpayable" >; - depositAndCall: TypedContractMethod< + "depositAndCall((bytes,address,uint256),uint256,address,bytes)": TypedContractMethod< + [ + context: ZContextStruct, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + + "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)": TypedContractMethod< [ context: ZContextStruct, zrc20: AddressLike, @@ -171,6 +233,18 @@ export interface IGatewayZEVM extends BaseContract { "nonpayable" >; + depositAndRevert: TypedContractMethod< + [ + context: RevertContextStruct, + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + execute: TypedContractMethod< [ context: ZContextStruct, @@ -183,6 +257,18 @@ export interface IGatewayZEVM extends BaseContract { "nonpayable" >; + executeRevert: TypedContractMethod< + [ + context: RevertContextStruct, + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + "withdraw(bytes,uint256,address)": TypedContractMethod< [receiver: BytesLike, amount: BigNumberish, zrc20: AddressLike], [void], @@ -231,7 +317,19 @@ export interface IGatewayZEVM extends BaseContract { "nonpayable" >; getFunction( - nameOrSignature: "depositAndCall" + nameOrSignature: "depositAndCall((bytes,address,uint256),uint256,address,bytes)" + ): TypedContractMethod< + [ + context: ZContextStruct, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)" ): TypedContractMethod< [ context: ZContextStruct, @@ -243,6 +341,19 @@ export interface IGatewayZEVM extends BaseContract { [void], "nonpayable" >; + getFunction( + nameOrSignature: "depositAndRevert" + ): TypedContractMethod< + [ + context: RevertContextStruct, + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; getFunction( nameOrSignature: "execute" ): TypedContractMethod< @@ -256,6 +367,19 @@ export interface IGatewayZEVM extends BaseContract { [void], "nonpayable" >; + getFunction( + nameOrSignature: "executeRevert" + ): TypedContractMethod< + [ + context: RevertContextStruct, + zrc20: AddressLike, + amount: BigNumberish, + target: AddressLike, + message: BytesLike + ], + [void], + "nonpayable" + >; getFunction( nameOrSignature: "withdraw(bytes,uint256,address)" ): TypedContractMethod< diff --git a/v2/typechain-types/ZetaConnectorBase.ts b/v2/typechain-types/ZetaConnectorBase.ts index f8abb37a..bd16e57e 100644 --- a/v2/typechain-types/ZetaConnectorBase.ts +++ b/v2/typechain-types/ZetaConnectorBase.ts @@ -39,7 +39,6 @@ export interface ZetaConnectorBaseInterface extends Interface { | "renounceRole" | "revokeRole" | "supportsInterface" - | "tssAddress" | "unpause" | "withdraw" | "withdrawAndCall" @@ -102,10 +101,6 @@ export interface ZetaConnectorBaseInterface extends Interface { functionFragment: "supportsInterface", values: [BytesLike] ): string; - encodeFunctionData( - functionFragment: "tssAddress", - values?: undefined - ): string; encodeFunctionData(functionFragment: "unpause", values?: undefined): string; encodeFunctionData( functionFragment: "withdraw", @@ -155,7 +150,6 @@ export interface ZetaConnectorBaseInterface extends Interface { functionFragment: "supportsInterface", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( @@ -393,8 +387,6 @@ export interface ZetaConnectorBase extends BaseContract { "view" >; - tssAddress: TypedContractMethod<[], [string], "view">; - unpause: TypedContractMethod<[], [void], "nonpayable">; withdraw: TypedContractMethod< @@ -486,9 +478,6 @@ export interface ZetaConnectorBase extends BaseContract { getFunction( nameOrSignature: "supportsInterface" ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; - getFunction( - nameOrSignature: "tssAddress" - ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "unpause" ): TypedContractMethod<[], [void], "nonpayable">; diff --git a/v2/typechain-types/ZetaConnectorNative.ts b/v2/typechain-types/ZetaConnectorNative.ts index 2e795f63..870778e9 100644 --- a/v2/typechain-types/ZetaConnectorNative.ts +++ b/v2/typechain-types/ZetaConnectorNative.ts @@ -39,7 +39,6 @@ export interface ZetaConnectorNativeInterface extends Interface { | "renounceRole" | "revokeRole" | "supportsInterface" - | "tssAddress" | "unpause" | "withdraw" | "withdrawAndCall" @@ -102,10 +101,6 @@ export interface ZetaConnectorNativeInterface extends Interface { functionFragment: "supportsInterface", values: [BytesLike] ): string; - encodeFunctionData( - functionFragment: "tssAddress", - values?: undefined - ): string; encodeFunctionData(functionFragment: "unpause", values?: undefined): string; encodeFunctionData( functionFragment: "withdraw", @@ -155,7 +150,6 @@ export interface ZetaConnectorNativeInterface extends Interface { functionFragment: "supportsInterface", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( @@ -393,8 +387,6 @@ export interface ZetaConnectorNative extends BaseContract { "view" >; - tssAddress: TypedContractMethod<[], [string], "view">; - unpause: TypedContractMethod<[], [void], "nonpayable">; withdraw: TypedContractMethod< @@ -486,9 +478,6 @@ export interface ZetaConnectorNative extends BaseContract { getFunction( nameOrSignature: "supportsInterface" ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; - getFunction( - nameOrSignature: "tssAddress" - ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "unpause" ): TypedContractMethod<[], [void], "nonpayable">; diff --git a/v2/typechain-types/ZetaConnectorNonNative.ts b/v2/typechain-types/ZetaConnectorNonNative.ts index e38595f5..c24d39ac 100644 --- a/v2/typechain-types/ZetaConnectorNonNative.ts +++ b/v2/typechain-types/ZetaConnectorNonNative.ts @@ -41,7 +41,6 @@ export interface ZetaConnectorNonNativeInterface extends Interface { | "revokeRole" | "setMaxSupply" | "supportsInterface" - | "tssAddress" | "unpause" | "withdraw" | "withdrawAndCall" @@ -110,10 +109,6 @@ export interface ZetaConnectorNonNativeInterface extends Interface { functionFragment: "supportsInterface", values: [BytesLike] ): string; - encodeFunctionData( - functionFragment: "tssAddress", - values?: undefined - ): string; encodeFunctionData(functionFragment: "unpause", values?: undefined): string; encodeFunctionData( functionFragment: "withdraw", @@ -168,7 +163,6 @@ export interface ZetaConnectorNonNativeInterface extends Interface { functionFragment: "supportsInterface", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( @@ -415,7 +409,7 @@ export interface ZetaConnectorNonNative extends BaseContract { >; setMaxSupply: TypedContractMethod< - [_maxSupply: BigNumberish], + [maxSupply_: BigNumberish], [void], "nonpayable" >; @@ -426,8 +420,6 @@ export interface ZetaConnectorNonNative extends BaseContract { "view" >; - tssAddress: TypedContractMethod<[], [string], "view">; - unpause: TypedContractMethod<[], [void], "nonpayable">; withdraw: TypedContractMethod< @@ -521,13 +513,10 @@ export interface ZetaConnectorNonNative extends BaseContract { >; getFunction( nameOrSignature: "setMaxSupply" - ): TypedContractMethod<[_maxSupply: BigNumberish], [void], "nonpayable">; + ): TypedContractMethod<[maxSupply_: BigNumberish], [void], "nonpayable">; getFunction( nameOrSignature: "supportsInterface" ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; - getFunction( - nameOrSignature: "tssAddress" - ): TypedContractMethod<[], [string], "view">; getFunction( nameOrSignature: "unpause" ): TypedContractMethod<[], [void], "nonpayable">; diff --git a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts index 48bd1e82..55594799 100644 --- a/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/ERC20CustodyEchidnaTest__factory.ts @@ -257,19 +257,6 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, - { - type: "function", - name: "tssAddress", - inputs: [], - outputs: [ - { - name: "", - type: "address", - internalType: "address", - }, - ], - stateMutability: "view", - }, { type: "function", name: "unpause", @@ -626,7 +613,7 @@ const _abi = [ ] as const; const _bytecode = - "0x600580546001600160a01b03191633908117909155600e60809081526d11d85d195dd85e5155934b9cdbdb60921b60a05260e49190915261012361010481905261012452606460c090815261014460405260e080516001600160e01b0390811663c0c53b8b60e01b1790915261007792919061027f16565b600680546001600160a01b03929092166001600160a01b03199283168117909155600780549092161790553480156100ae57600080fd5b5060075460055460016000556002805460ff191690556001600160a01b039182169116808215806100e657506001600160a01b038216155b156101045760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b03191691841691909117905561014e60008261029e565b506101797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261029e565b506101a47f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361029e565b505050506040516101b49061382a565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610206573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392831617815560075460405163ae7a3a6f60e01b815230928101929092529091169063ae7a3a6f90602401600060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506148ab565b6000610289613837565b610294848483610331565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103295760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610298565b506000610298565b60008061033e85846103ad565b90506103a26040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161038c929190613940565b60408051601f19818403018152919052856103b9565b9150505b9392505050565b60006103a683836103ed565b60c081015151600090156103e3576103dc84848460c0015161040e60201b60201c565b90506103a6565b6103dc8484610587565b60006103f98383610654565b6103a6838360200151846103b960201b60201c565b600080610419610664565b9050600061042786836106fe565b905060006104448260600151836020015185610b2160201b60201c565b9050600061045483838989610cd6565b9050600061046182611952565b602081015181519192509060030b156104ba5789826040015160405160200161048b929190613964565b60408051601f198184030181529082905262461bcd60e51b82526104b1916004016139ca565b60405180910390fd5b60006105036040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611ae960201b60201c565b60405163c6ce059d60e01b8152909150600080516020616ad08339815191529063c6ce059d906105379084906004016139ca565b602060405180830381865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057891906139dd565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616ad083398151915290638d1cc925906105bd9087906004016139ca565b600060405180830381865afa1580156105da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106029190810190613ad2565b90506000610631828560405160200161061c929190613b06565b60408051601f19818403018152919052611c89565b90506001600160a01b03811661029457848460405160200161048b929190613b35565b61066082826000611c9c565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616ad083398151915291829063d145736c906106b2908490600401613bc4565b600060405180830381865afa1580156106cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106f79190810190613bf9565b9250505090565b6107306040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616ad083398151915290506107756040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61077e85611d76565b6020820152600061078e86611fcb565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f89190810190613bf9565b868385602001516040516020016108129493929190613c41565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108519085906004016139ca565b600060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108969190810190613bf9565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108c5908490600401613cd9565b602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613d12565b61091b578160405160200161048b9190613d34565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610947908490600401613dab565b600060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261098c9190810190613bf9565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109ba908490600401613df1565b602060405180830381865afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613d12565b15610a77576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a2c908490600401613df1565b600060405180830381865afa158015610a49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a719190810190613bf9565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a9c9190613e32565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610ac8929190613e8d565b600060405180830381865afa158015610ae5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b0d9190810190613bf9565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b3d579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b8457610b84613eb2565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610bbe57610bbe613eb2565b602002602001018190525084604051602001610bda9190613ec8565b60405160208183030381529060405281600281518110610bfc57610bfc613eb2565b602002602001018190525082604051602001610c189190613efd565b60405160208183030381529060405281600381518110610c3a57610c3a613eb2565b60209081029190910101526000610c5082611952565b9050600081602001519050610cb7610c8a60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061217b565b610ccc578560405160200161048b9190613f2c565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616ad08339815191529015610d20565b511590565b610e3c57826020015115610db05760405162461bcd60e51b81526020600482015260586024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104b1565b8260c0015115610e3c5760405162461bcd60e51b81526020600482015260536024820152600080516020616af083398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104b1565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e555790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e9690613fc1565b935060ff1681518110610eab57610eab613eb2565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610eec9190613fe0565b604051602081830303815290604052828280610f0790613fc1565b935060ff1681518110610f1c57610f1c613eb2565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f5290613fc1565b935060ff1681518110610f6757610f67613eb2565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fa590613fc1565b935060ff1681518110610fba57610fba613eb2565b60200260200101819052508760200151828280610fd690613fc1565b935060ff1681518110610feb57610feb613eb2565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061102990613fc1565b935060ff168151811061103e5761103e613eb2565b60209081029190910101528751828261105681613fc1565b935060ff168151811061106b5761106b613eb2565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110a490613fc1565b935060ff16815181106110b9576110b9613eb2565b60209081029190910101526110cd466121dc565b82826110d881613fc1565b935060ff16815181106110ed576110ed613eb2565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061112c90613fc1565b935060ff168151811061114157611141613eb2565b60200260200101819052508682828061115990613fc1565b935060ff168151811061116e5761116e613eb2565b602090810291909101015285511561127c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111bf81613fc1565b935060ff16815181106111d4576111d4613eb2565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d9061120b9089906004016139ca565b600060405180830381865afa158015611228573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112509190810190613bf9565b828261125b81613fc1565b935060ff168151811061127057611270613eb2565b60200260200101819052505b846020015115611329576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112ba81613fc1565b935060ff16815181106112cf576112cf613eb2565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061130490613fc1565b935060ff168151811061131957611319613eb2565b6020026020010181905250611490565b61133f610d1b8660a0015161214e60201b60201c565b6113c25760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261137281613fc1565b935060ff168151811061138757611387613eb2565b60200260200101819052508460a001516040516020016113a79190613ec8565b60405160208183030381529060405282828061130490613fc1565b8460c001511580156113e757506113e5610d1b896040015161214e60201b60201c565b155b156114905760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261141b81613fc1565b935060ff168151811061143057611430613eb2565b60209081029190910101526114448861226e565b6040516020016114549190613ec8565b60405160208183030381529060405282828061146f90613fc1565b935060ff168151811061148457611484613eb2565b60200260200101819052505b6114a6610d1b866040015161214e60201b60201c565b6115295760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114d781613fc1565b935060ff16815181106114ec576114ec613eb2565b6020026020010181905250846040015182828061150890613fc1565b935060ff168151811061151d5761151d613eb2565b60200260200101819052505b60608501511561161a576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261155b81613fc1565b935060ff168151811061157057611570613eb2565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ee9190810190613bf9565b82826115f981613fc1565b935060ff168151811061160e5761160e613eb2565b60200260200101819052505b60e085015151156116ac5760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261165181613fc1565b935060ff168151811061166657611666613eb2565b602090810291909101015260e085015151611680906121dc565b828261168b81613fc1565b935060ff16815181106116a0576116a0613eb2565b60200260200101819052505b60e085015160200151156117495760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116e681613fc1565b935060ff16815181106116fb576116fb613eb2565b602002602001018190525061171d8560e00151602001516121dc60201b60201c565b828261172881613fc1565b935060ff168151811061173d5761173d613eb2565b60200260200101819052505b60e085015160400151156117ea5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261178781613fc1565b935060ff168151811061179c5761179c613eb2565b60200260200101819052506117be8560e00151604001516121dc60201b60201c565b82826117c981613fc1565b935060ff16815181106117de576117de613eb2565b60200260200101819052505b60e0850151606001511561189a5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261183781613fc1565b935060ff168151811061184c5761184c613eb2565b602002602001018190525061186e8560e00151606001516121dc60201b60201c565b828261187981613fc1565b935060ff168151811061188e5761188e613eb2565b60200260200101819052505b60008160ff166001600160401b038111156118b7576118b7613a06565b6040519080825280602002602001820160405280156118ea57816020015b60608152602001906001900390816118d55790505b50905060005b8260ff168160ff16101561194357838160ff168151811061191357611913613eb2565b6020026020010151828260ff168151811061193057611930613eb2565b60209081029190910101526001016118f0565b5093505050505b949350505050565b6119796040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616ad083398151915292600091849163d145736c916119c791869101614037565b600060405180830381865afa1580156119e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a0c9190810190613bf9565b90506000611a1a8683612924565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a4a919061407e565b6000604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a9191908101906140e3565b805190915060030b15801590611aaa5750602081015151155b8015611ab95750604081015151155b15610ccc5781600081518110611ad157611ad1613eb2565b602002602001015160405160200161048b9190614196565b60606000611b1e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b559082905b90612a5e565b15611c52576000611bd282611bcc81611bc6611b988a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a85565b90612ae2565b9050611c06611bff604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612a5e565b15611c4057611c3d611c36604051806040016040528060018152602001600560f91b81525061214e60201b60201c565b8290612b67565b90505b611c4981612b8d565b925050506103a6565b8215611c6b57848460405160200161048b929190614366565b50506040805160208101909152600081526103a6565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cab57505050565b6000611cb8848484612bf2565b90506000611cc582611952565b602081015181519192509060030b158015611d385750611d38611d0c604051806040016040528060078152602001665355434345535360c81b81525061214e60201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b4f565b15611d4557505050505050565b60408201515115611d6557816040015160405160200161048b91906143e1565b8060405160200161048b919061442b565b60606000611dab8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611de2611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b829061217b565b15611e24576103a6611e1f611e18604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b8390613105565b612b8d565b611e56611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b829061318f565b600103611ebe57611e88611c36604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b506103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b8390612b67565b611eed611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba576000611f2582611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b613224565b905060008160018351611f38919061447b565b81518110611f4857611f48613eb2565b60200260200101519050611fb1611e1f611f8460405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b60408051808201825260008082526020918201528151808301909252855182528086019082015290613105565b95945050505050565b8260405160200161048b919061448e565b606060006120008360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612030611ddb604051806040016040528060048152602001630b9cdbdb60e21b81525061214e60201b60201c565b1561203e576103a681612b8d565b612069611e4f604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b60010361209e576103a6611e1f611eb7604051806040016040528060018152602001601d60f91b81525061214e60201b60201c565b6120cd611ddb60405180604001604052806005815260200164173539b7b760d91b81525061214e60201b60201c565b15611fba57600061210082611f20604051806040016040528060018152602001602f60f81b81525061214e60201b60201c565b905060018151111561213c57806002825161211b919061447b565b8151811061212b5761212b613eb2565b602002602001015192505050919050565b508260405160200161048b919061448e565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b80518251600091111561219057506000610298565b815183516020850151600092916121a691614548565b6121b0919061447b565b9050826020015181036121c7576001915050610298565b82516020840151819020912014905092915050565b606060006121e9836132c8565b60010190506000816001600160401b0381111561220857612208613a06565b6040519080825280601f01601f191660200182016040528015612232576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461223c57509392505050565b60606000612285836040015161214e60201b60201c565b90506122c26122bb6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061214e60201b60201c565b82906133aa565b156122e95750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61231c6122bb60405180604001604052806009815260200168556e6c6963656e736560b81b81525061214e60201b60201c565b15612348575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b6123756122bb6040518060400160405280600381526020016213525560ea1b81525061214e60201b60201c565b1561239b57505060408051808201909152600381526213525560ea1b6020820152919050565b6123d16122bb6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061214e60201b60201c565b8061241157506124116122bb6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061214e60201b60201c565b1561243d57505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b6124736122bb6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061214e60201b60201c565b806124b357506124b36122bb6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061214e60201b60201c565b156124df575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6125166122bb6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061214e60201b60201c565b8061255757506125576122bb604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061214e60201b60201c565b1561258657505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125bd6122bb6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b806125fe57506125fe6122bb604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b1561262b57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b6126616122bb6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061214e60201b60201c565b1561269057505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126c66122bb6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061214e60201b60201c565b156126f557505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b6127266122bb6040518060400160405280600781526020016604d504c2d322e360cc1b81525061214e60201b60201c565b1561275057505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127816122bb6040518060400160405280600781526020016604f534c2d332e360cc1b81525061214e60201b60201c565b156127ab57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127df6122bb6040518060400160405280600a81526020016904170616368652d322e360b41b81525061214e60201b60201c565b1561280c57505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b6128436122bb6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061214e60201b60201c565b8061288457506128846122bb6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061214e60201b60201c565b156128b157505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128e36122bb604051806040016040528060088152602001674255534c2d312e3160c01b81525061214e60201b60201c565b1561290d57505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161048b929060200161455b565b60608060005b84518110156129af578185828151811061294657612946613eb2565b602002602001015160405160200161295f929190613b06565b60405160208183030381529060405291506001855161297e919061447b565b81146129a7578160405160200161299591906146ab565b60405160208183030381529060405291505b60010161292a565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129c857905050905083816000815181106129f3576129f3613eb2565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a2c57612a2c613eb2565b60200260200101819052508181600281518110612a4b57612a4b613eb2565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a7c92918491906133be565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612ab293906134cf565b9050836020015181612ac4919061447b565b84518590612ad390839061447b565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b07575081610298565b6020808301519084015160019114612b2e5750815160208481015190840151829020919020145b8015612b5f57825184518590612b4590839061447b565b9052508251602085018051612b5b908390614548565b9052505b509192915050565b6040805180820190915260008082526020820152612b868383836135ef565b5092915050565b6060600082600001516001600160401b03811115612bad57612bad613a06565b6040519080825280601f01601f191660200182016040528015612bd7576020820181803683370190505b50602084810151855192935090830191612b86918391613695565b60606000612bfe610664565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c1b5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c5c90613fc1565b935060ff1681518110612c7157612c71613eb2565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cac91906146d0565b604051602081830303815290604052828280612cc790613fc1565b935060ff1681518110612cdc57612cdc613eb2565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d1490613fc1565b935060ff1681518110612d2957612d29613eb2565b602002602001018190525082604051602001612d459190613efd565b604051602081830303815290604052828280612d6090613fc1565b935060ff1681518110612d7557612d75613eb2565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612daf90613fc1565b935060ff1681518110612dc457612dc4613eb2565b6020908102919091010152612dd9878461370f565b8282612de481613fc1565b935060ff1681518110612df957612df9613eb2565b602090810291909101015285515115612e915760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e3981613fc1565b935060ff1681518110612e4e57612e4e613eb2565b60209081029190910101528551612e65908461370f565b8282612e7081613fc1565b935060ff1681518110612e8557612e85613eb2565b60200260200101819052505b856080015115612eff5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612eda81613fc1565b935060ff1681518110612eef57612eef613eb2565b6020026020010181905250612f5a565b8415612f5a576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f3981613fc1565b935060ff1681518110612f4e57612f4e613eb2565b60200260200101819052505b60408601515115612fe65760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f9481613fc1565b935060ff1681518110612fa957612fa9613eb2565b60200260200101819052508560400151828280612fc590613fc1565b935060ff1681518110612fda57612fda613eb2565b60200260200101819052505b8560600151156130505760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261302f81613fc1565b935060ff168151811061304457613044613eb2565b60200260200101819052505b60008160ff166001600160401b0381111561306d5761306d613a06565b6040519080825280602002602001820160405280156130a057816020015b606081526020019060019003908161308b5790505b50905060005b8260ff168160ff1610156130f957838160ff16815181106130c9576130c9613eb2565b6020026020010151828260ff16815181106130e6576130e6613eb2565b60209081029190910101526001016130a6565b50979650505050505050565b604080518082019091526000808252602082015281518351101561312a575081610298565b8151835160208501516000929161314091614548565b61314a919061447b565b6020840151909150600190821461316b575082516020840151819020908220145b80156131865783518551869061318290839061447b565b9052505b50929392505050565b8051825160208085015190840151600093849390926131af9284906134cf565b6131b99190614548565b90505b835160208501516131cd9190614548565b8111612b8657816131dd81614715565b92505082600001516132138560200151836131f8919061447b565b8651613204919061447b565b855160208701518591906134cf565b61321d9190614548565b90506131bc565b60606000613232848461318f565b61323d906001614548565b6001600160401b0381111561325457613254613a06565b60405190808252806020026020018201604052801561328757816020015b60608152602001906001900390816132725790505b50905060005b8151811015611c81576132a3611e1f8686612b67565b8282815181106132b5576132b5613eb2565b602090810291909101015260010161328d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613311577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061333d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061335b57662386f26fc10000830492506010015b6305f5e1008310613373576305f5e100830492506008015b612710831061338757612710830492506004015b60648310613399576064830492506002015b600a83106102985760010192915050565b60006133b6838361374f565b159392505050565b6000808584116134c5576020841161347157600084156134095760016133e586602061447b565b6133f090600861472e565b6133fb90600261482c565b613405919061447b565b1990505b83518116856134188989614548565b613422919061447b565b805190935082165b81811461345c57878411613444578794505050505061194a565b8361344e81614838565b94505082845116905061342a565b6134668785614548565b94505050505061194a565b83832061347e858861447b565b6134889087614548565b91505b8582106134c3578482208082036134b0576134a68684614548565b935050505061194a565b6134bb60018461447b565b92505061348b565b505b5092949350505050565b600083818685116135da5760208511613589576000851561351b5760016134f787602061447b565b61350290600861472e565b61350d90600261482c565b613517919061447b565b1990505b8451811660008761352c8b8b614548565b613536919061447b565b855190915083165b82811461357b57818610613563576135568b8b614548565b965050505050505061194a565b8561356d81614715565b96505083865116905061353e565b85965050505050505061194a565b508383206000905b61359b868961447b565b82116135d8578583208082036135b7578394505050505061194a565b6135c2600185614548565b93505081806135d090614715565b925050613591565b505b6135e48787614548565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161361c93906134cf565b602080870180519186019190915251909150613638908261447b565b83528451602086015161364b9190614548565b810361365a576000855261368c565b835183516136689190614548565b8551869061367790839061447b565b90525083516136869082614548565b60208601525b50909392505050565b602081106136cd57815183526136ac602084614548565b92506136b9602083614548565b91506136c660208261447b565b9050613695565b60001981156136fc5760016136e383602061447b565b6136ef9061010061482c565b6136f9919061447b565b90505b9151835183169219169190911790915250565b6060600061371d84846106fe565b80516020808301516040519394506137379390910161484f565b60405160208183030381529060405291505092915050565b8151815160009190811115613762575081515b6020808501519084015160005b8381101561381b57825182518082146137eb5760001960208710156137ca5760018461379c89602061447b565b6137a69190614548565b6137b190600861472e565b6137bc90600261482c565b6137c6919061447b565b1990505b81811683821681810391146137e85797506102989650505050505050565b50505b6137f6602086614548565b9450613803602085614548565b935050506020816138149190614548565b905061376f565b5084518651610ccc919061488b565b610c9f80615e3183390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161387a61387f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161387a6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561390b5781810151838201526020016138f3565b50506000910152565b6000815180845261392c8160208601602086016138f0565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061194a90830184613914565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161399c81601a8501602088016138f0565b6101d160f51b601a9184019182015283516139be81601c8401602088016138f0565b01601c01949350505050565b6020815260006103a66020830184613914565b6000602082840312156139ef57600080fd5b81516001600160a01b03811681146103a657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a3e57613a3e613a06565b60405290565b6000806001600160401b03841115613a5e57613a5e613a06565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a8c57613a8c613a06565b604052838152905080828401851015613aa457600080fd5b611c818460208301856138f0565b600082601f830112613ac357600080fd5b6103a683835160208501613a44565b600060208284031215613ae457600080fd5b81516001600160401b03811115613afa57600080fd5b61029484828501613ab2565b60008351613b188184602088016138f0565b835190830190613b2c8183602088016138f0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b6d81601a8501602088016138f0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613baa8160338401602088016138f0565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103a66080830184613914565b600060208284031215613c0b57600080fd5b81516001600160401b03811115613c2157600080fd5b8201601f81018413613c3257600080fd5b61029484825160208401613a44565b60008551613c53818460208a016138f0565b602f60f81b9083019081528551613c71816001840160208a016138f0565b602f60f81b600192909101918201528451613c938160028401602089016138f0565b600181830101915050602f60f81b60018201528351613cb98160028401602088016138f0565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cec6040830184613914565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d2457600080fd5b815180151581146103a657600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d6c81601f8501602087016138f0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613dbe6040830184613914565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e046040830184613914565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e6a8160148501602087016138f0565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ea06040830185613914565b82810360208401526103a28185613914565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ee58160018501602087016138f0565b601160f91b6001939091019283015250600201919050565b60008251613f0f8184602087016138f0565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f9e81604b8501602087016138f0565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fd757613fd7613fab565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161402a8160298501602087016138f0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103a66080830184613914565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140d757603f198786030184526140c2858351613914565b945060209384019391909101906001016140a6565b50929695505050505050565b6000602082840312156140f557600080fd5b81516001600160401b0381111561410b57600080fd5b82016060818503121561411d57600080fd5b614125613a1c565b81518060030b811461413657600080fd5b815260208201516001600160401b0381111561415157600080fd5b61415d86828501613ab2565b60208301525060408201516001600160401b0381111561417c57600080fd5b61418886828501613ab2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141d88160218501602087016138f0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143a88160218501602088016138f0565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143d581602e8401602088016138f0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161402a8160298501602087016138f0565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b60208201526000825161446e8160228501602087016138f0565b9190910160220192915050565b8181038181111561029857610298613fab565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144b781600e8501602087016138f0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561029857610298613fab565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145938160188501602088016138f0565b6301034b7160e51b60189184019182015283516145b781601c8401602088016138f0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146bd8184602087016138f0565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161470881601c8501602087016138f0565b91909101601c0192915050565b60006001820161472757614727613fab565b5060010190565b808202811582820484141761029857610298613fab565b6001815b60018411156147805780850481111561476457614764613fab565b600184161561477257908102905b60019390931c928002614749565b935093915050565b60008261479757506001610298565b816147a457506000610298565b81600181146147ba57600281146147c4576147e0565b6001915050610298565b60ff8411156147d5576147d5613fab565b50506001821b610298565b5060208310610133831016604e8410600b8410161715614803575081810a610298565b6148106000198484614745565b806000190482111561482457614824613fab565b029392505050565b60006103a68383614788565b60008161484757614847613fab565b506000190190565b600083516148618184602088016138f0565b601d60f91b908301908152835161487f8160018401602088016138f0565b01600101949350505050565b8181036000831280158383131683831282161715612b8657612b86613fab565b611577806148ba6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610366578063d9caed1214610379578063e63ab1e91461038c57600080fd5b8063a217fddf1461034b578063c8a023621461035357600080fd5b80638456cb59116100b25780638456cb59146102d657806385f438c1146102de57806391d148541461030557600080fd5b80636133b4bb146102a357806381100bf0146102b657600080fd5b806336568abe116101245780633f4ba83a116101095780633f4ba83a146102705780635b112591146102785780635c975abb1461029857600080fd5b806336568abe1461023d5780633c2f05a81461025057600080fd5b806321fc65f21161015557806321fc65f2146101e3578063248a9ca3146101f85780632f2ff15d1461022a57600080fd5b806301ffc9a714610171578063116191b614610199575b600080fd5b61018461017f3660046111a6565b6103b3565b60405190151581526020015b60405180910390f35b6002546101be90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f66101f136600461125a565b61044c565b005b61021c6102063660046112c9565b6000908152600160208190526040909120015490565b604051908152602001610190565b6101f66102383660046112e2565b6105c1565b6101f661024b3660046112e2565b6105ed565b6004546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661064b565b6003546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610184565b6101f66102b136600461130e565b610680565b6005546101be9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f661089f565b61021c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103133660046112e2565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61021c600081565b6101f661036136600461125a565b6108d1565b6101f66103743660046112e2565b610a2c565b6101f6610387366004611368565b610a52565b61021c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061044657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610454610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461047e81610b62565b610486610b6c565b6002546104b29073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061051490899089908990899089906004016113ee565b600060405180830381600087803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a79392919061144b565b60405180910390a3506105ba6001600055565b5050505050565b600082815260016020819052604090912001546105dd81610b62565b6105e78383610c38565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461063c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106468282610d03565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61067581610b62565b61067d610dc2565b50565b60045473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106aa86600561146e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071557600080fd5b505af1158015610729573d6000803e3d6000fd5b5050600480546007546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093526005602484015216925063a9059cbb91506044016020604051808303816000875af11580156107aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ce91906114a8565b506004546107f59073ffffffffffffffffffffffffffffffffffffffff168585858561044c565b600480546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff61010090920482169381019390935216906370a0823190602401602060405180830381865afa15801561086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089291906114ca565b156105e7576105e76114e3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108c981610b62565b61067d610e3f565b6108d9610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461090381610b62565b61090b610b6c565b6002546109379073ffffffffffffffffffffffffffffffffffffffff8881169161010090041686610bab565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd49061099990899089908990899089906004016113ee565b600060405180830381600087803b1580156109b357600080fd5b505af11580156109c7573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a79392919061144b565b60008281526001602081905260409091200154610a4881610b62565b6105e78383610d03565b610a5a610b1f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a8481610b62565b610a8c610b6c565b610aad73ffffffffffffffffffffffffffffffffffffffff85168484610bab565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b0c91815260200190565b60405180910390a3506106466001600055565b600260005403610b5b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61067d8133610e9a565b60025460ff1615610ba9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610646908490610f2b565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610cfb57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610446565b506000610446565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610cfb57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610446565b610dca610fc1565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e47610b6c565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e153390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f27576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610f4d73ffffffffffffffffffffffffffffffffffffffff841683610ffd565b90508051600014158015610f72575080806020019051810190610f7091906114a8565b155b15610646576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f1e565b60025460ff16610ba9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061100b83836000611012565b9392505050565b606081471015611050576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f1e565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110799190611512565b60006040518083038185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b50915091506110cb8683836110d5565b9695505050505050565b6060826110ea576110e582611164565b61100b565b815115801561110e575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561115d576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f1e565b508061100b565b8051156111745780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156111b857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461120c57600080fd5b919050565b60008083601f84011261122357600080fd5b50813567ffffffffffffffff81111561123b57600080fd5b60208301915083602082850101111561125357600080fd5b9250929050565b60008060008060006080868803121561127257600080fd5b61127b866111e8565b9450611289602087016111e8565b935060408601359250606086013567ffffffffffffffff8111156112ac57600080fd5b6112b888828901611211565b969995985093965092949392505050565b6000602082840312156112db57600080fd5b5035919050565b600080604083850312156112f557600080fd5b82359150611305602084016111e8565b90509250929050565b6000806000806060858703121561132457600080fd5b61132d856111e8565b935060208501359250604085013567ffffffffffffffff81111561135057600080fd5b61135c87828801611211565b95989497509550505050565b60008060006060848603121561137d57600080fd5b611386846111e8565b9250611394602085016111e8565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114406080830184866113a5565b979650505050505050565b8381526040602082015260006114656040830184866113a5565b95945050505050565b80820180821115610446577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000602082840312156114ba57600080fd5b8151801515811461100b57600080fd5b6000602082840312156114dc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156115335760208186018101518583015201611519565b50600092019182525091905056fea2646970667358221220e3eceeff6045b5584ad5b26814ad7e9728c8428c7219e4a4930ed3899cab596964736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; + "0x600380546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b1790915261007992919061026316565b600480546001600160a01b03929092166001600160a01b03199283168117909155600580549092161790553480156100b057600080fd5b5060055460035460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316608052610130600082610282565b5061015b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610282565b506101867f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610282565b505050506040516101969061380e565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156101e8573d6000803e3d6000fd5b5060028054610100600160a81b0319166101006001600160a01b039384160217905560055460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561024657600080fd5b505af115801561025a573d6000803e3d6000fd5b5050505061488f565b600061026d61381b565b610278848483610315565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661030d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161027c565b50600061027c565b6000806103228584610391565b90506103866040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001610370929190613924565b60408051601f198184030181529190528561039d565b9150505b9392505050565b600061038a83836103d1565b60c081015151600090156103c7576103c084848460c001516103f260201b60201c565b905061038a565b6103c0848461056b565b60006103dd8383610638565b61038a8383602001518461039d60201b60201c565b6000806103fd610648565b9050600061040b86836106e2565b905060006104288260600151836020015185610b0560201b60201c565b9050600061043883838989610cba565b9050600061044582611936565b602081015181519192509060030b1561049e5789826040015160405160200161046f929190613948565b60408051601f198184030181529082905262461bcd60e51b8252610495916004016139ae565b60405180910390fd5b60006104e76040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611acd60201b60201c565b60405163c6ce059d60e01b8152909150600080516020616b378339815191529063c6ce059d9061051b9084906004016139ae565b602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906139c1565b9b9a5050505050505050505050565b604051638d1cc92560e01b81526000908190600080516020616b3783398151915290638d1cc925906105a19087906004016139ae565b600060405180830381865afa1580156105be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105e69190810190613ab6565b905060006106158285604051602001610600929190613aea565b60408051601f19818403018152919052611c6d565b90506001600160a01b03811661027857848460405160200161046f929190613b19565b61064482826000611c80565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b8152606091600080516020616b3783398151915291829063d145736c90610696908490600401613ba8565b600060405180830381865afa1580156106b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106db9190810190613bdd565b9250505090565b6107146040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020616b3783398151915290506107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61076285611d5a565b6020820152600061077286611faf565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107dc9190810190613bdd565b868385602001516040516020016107f69493929190613c25565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb11906108359085906004016139ae565b600060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087a9190810190613bdd565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108a9908490600401613cbd565b602060405180830381865afa1580156108c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ea9190613cf6565b6108ff578160405160200161046f9190613d18565b6040516309389f5960e31b81526001600160a01b038616906349c4fac89061092b908490600401613d8f565b600060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109709190810190613bdd565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f69061099e908490600401613dd5565b602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df9190613cf6565b15610a5b576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a10908490600401613dd5565b600060405180830381865afa158015610a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a559190810190613bdd565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610a809190613e16565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610aac929190613e71565b600060405180830381865afa158015610ac9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610af19190810190613bdd565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b21579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610b6857610b68613e96565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610ba257610ba2613e96565b602002602001018190525084604051602001610bbe9190613eac565b60405160208183030381529060405281600281518110610be057610be0613e96565b602002602001018190525082604051602001610bfc9190613ee1565b60405160208183030381529060405281600381518110610c1e57610c1e613e96565b60209081029190910101526000610c3482611936565b9050600081602001519050610c9b610c6e60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b6040805180820182526000808252602091820152815180830190925284518252808501908201529061215f565b610cb0578560405160200161046f9190613f10565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090600080516020616b378339815191529015610d04565b511590565b610e2057826020015115610d945760405162461bcd60e51b81526020600482015260586024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401610495565b8260c0015115610e205760405162461bcd60e51b81526020600482015260536024820152600080516020616b5783398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401610495565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e395790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610e7a90613fa5565b935060ff1681518110610e8f57610e8f613e96565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610ed09190613fc4565b604051602081830303815290604052828280610eeb90613fa5565b935060ff1681518110610f0057610f00613e96565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f3690613fa5565b935060ff1681518110610f4b57610f4b613e96565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610f8990613fa5565b935060ff1681518110610f9e57610f9e613e96565b60200260200101819052508760200151828280610fba90613fa5565b935060ff1681518110610fcf57610fcf613e96565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061100d90613fa5565b935060ff168151811061102257611022613e96565b60209081029190910101528751828261103a81613fa5565b935060ff168151811061104f5761104f613e96565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b81525082828061108890613fa5565b935060ff168151811061109d5761109d613e96565b60209081029190910101526110b1466121c0565b82826110bc81613fa5565b935060ff16815181106110d1576110d1613e96565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061111090613fa5565b935060ff168151811061112557611125613e96565b60200260200101819052508682828061113d90613fa5565b935060ff168151811061115257611152613e96565b60209081029190910101528551156112605760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111a381613fa5565b935060ff16815181106111b8576111b8613e96565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906111ef9089906004016139ae565b600060405180830381865afa15801561120c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112349190810190613bdd565b828261123f81613fa5565b935060ff168151811061125457611254613e96565b60200260200101819052505b84602001511561130d576040805180820190915260128152712d2d766572696679536f75726365436f646560701b6020820152828261129e81613fa5565b935060ff16815181106112b3576112b3613e96565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b8152508282806112e890613fa5565b935060ff16815181106112fd576112fd613e96565b6020026020010181905250611474565b611323610cff8660a0015161213260201b60201c565b6113a65760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261135681613fa5565b935060ff168151811061136b5761136b613e96565b60200260200101819052508460a0015160405160200161138b9190613eac565b6040516020818303038152906040528282806112e890613fa5565b8460c001511580156113cb57506113c9610cff896040015161213260201b60201c565b155b156114745760408051808201909152600d81526c2d2d6c6963656e73655479706560981b602082015282826113ff81613fa5565b935060ff168151811061141457611414613e96565b602090810291909101015261142888612252565b6040516020016114389190613eac565b60405160208183030381529060405282828061145390613fa5565b935060ff168151811061146857611468613e96565b60200260200101819052505b61148a610cff866040015161213260201b60201c565b61150d5760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b602082015282826114bb81613fa5565b935060ff16815181106114d0576114d0613e96565b602002602001018190525084604001518282806114ec90613fa5565b935060ff168151811061150157611501613e96565b60200260200101819052505b6060850151156115fe576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261153f81613fa5565b935060ff168151811061155457611554613e96565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d29190810190613bdd565b82826115dd81613fa5565b935060ff16815181106115f2576115f2613e96565b60200260200101819052505b60e085015151156116905760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261163581613fa5565b935060ff168151811061164a5761164a613e96565b602090810291909101015260e085015151611664906121c0565b828261166f81613fa5565b935060ff168151811061168457611684613e96565b60200260200101819052505b60e0850151602001511561172d5760408051808201909152600a8152692d2d676173507269636560b01b602082015282826116ca81613fa5565b935060ff16815181106116df576116df613e96565b60200260200101819052506117018560e00151602001516121c060201b60201c565b828261170c81613fa5565b935060ff168151811061172157611721613e96565b60200260200101819052505b60e085015160400151156117ce5760408051808201909152600e81526d2d2d6d617846656550657247617360901b6020820152828261176b81613fa5565b935060ff168151811061178057611780613e96565b60200260200101819052506117a28560e00151604001516121c060201b60201c565b82826117ad81613fa5565b935060ff16815181106117c2576117c2613e96565b60200260200101819052505b60e0850151606001511561187e5760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261181b81613fa5565b935060ff168151811061183057611830613e96565b60200260200101819052506118528560e00151606001516121c060201b60201c565b828261185d81613fa5565b935060ff168151811061187257611872613e96565b60200260200101819052505b60008160ff166001600160401b0381111561189b5761189b6139ea565b6040519080825280602002602001820160405280156118ce57816020015b60608152602001906001900390816118b95790505b50905060005b8260ff168160ff16101561192757838160ff16815181106118f7576118f7613e96565b6020026020010151828260ff168151811061191457611914613e96565b60209081029190910101526001016118d4565b5093505050505b949350505050565b61195d6040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b8152600080516020616b3783398151915292600091849163d145736c916119ab9186910161401b565b600060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f09190810190613bdd565b905060006119fe8683612908565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a2e9190614062565b6000604051808303816000875af1158015611a4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7591908101906140c7565b805190915060030b15801590611a8e5750602081015151155b8015611a9d5750604081015151155b15610cb05781600081518110611ab557611ab5613e96565b602002602001015160405160200161046f919061417a565b60606000611b028560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b399082905b90612a42565b15611c36576000611bb682611bb081611baa611b7c8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612a69565b90612ac6565b9050611bea611be3604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612a42565b15611c2457611c21611c1a604051806040016040528060018152602001600560f91b81525061213260201b60201c565b8290612b4b565b90505b611c2d81612b71565b9250505061038a565b8215611c4f57848460405160200161046f92919061434a565b505060408051602081019091526000815261038a565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611c8f57505050565b6000611c9c848484612bd6565b90506000611ca982611936565b602081015181519192509060030b158015611d1c5750611d1c611cf0604051806040016040528060078152602001665355434345535360c81b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b33565b15611d2957505050505050565b60408201515115611d4957816040015160405160200161046f91906143c5565b8060405160200161046f919061440f565b60606000611d8f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611dc6611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b829061215f565b15611e085761038a611e03611dfc604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b83906130e9565b612b71565b611e3a611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8290613173565b600103611ea257611e6c611c1a604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b5061038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b8390612b4b565b611ed1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e576000611f0982611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b613208565b905060008160018351611f1c919061445f565b81518110611f2c57611f2c613e96565b60200260200101519050611f95611e03611f6860405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b604080518082018252600080825260209182015281518083019092528551825280860190820152906130e9565b95945050505050565b8260405160200161046f9190614472565b60606000611fe48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612014611dbf604051806040016040528060048152602001630b9cdbdb60e21b81525061213260201b60201c565b156120225761038a81612b71565b61204d611e33604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6001036120825761038a611e03611e9b604051806040016040528060018152602001601d60f91b81525061213260201b60201c565b6120b1611dbf60405180604001604052806005815260200164173539b7b760d91b81525061213260201b60201c565b15611f9e5760006120e482611f04604051806040016040528060018152602001602f60f81b81525061213260201b60201c565b90506001815111156121205780600282516120ff919061445f565b8151811061210f5761210f613e96565b602002602001015192505050919050565b508260405160200161046f9190614472565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121745750600061027c565b8151835160208501516000929161218a9161452c565b612194919061445f565b9050826020015181036121ab57600191505061027c565b82516020840151819020912014905092915050565b606060006121cd836132ac565b60010190506000816001600160401b038111156121ec576121ec6139ea565b6040519080825280601f01601f191660200182016040528015612216576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461222057509392505050565b60606000612269836040015161213260201b60201c565b90506122a661229f6040518060400160405280600a8152602001691553931250d15394d15160b21b81525061213260201b60201c565b829061338e565b156122cd5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b61230061229f60405180604001604052806009815260200168556e6c6963656e736560b81b81525061213260201b60201c565b1561232c575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61235961229f6040518060400160405280600381526020016213525560ea1b81525061213260201b60201c565b1561237f57505060408051808201909152600381526213525560ea1b6020820152919050565b6123b561229f6040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061213260201b60201c565b806123f557506123f561229f6040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061213260201b60201c565b1561242157505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61245761229f6040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061213260201b60201c565b80612497575061249761229f6040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061213260201b60201c565b156124c3575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b6124fa61229f6040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061213260201b60201c565b8061253b575061253b61229f604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061213260201b60201c565b1561256a57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125a161229f6040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b806125e257506125e261229f604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561260f57505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61264561229f6040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061213260201b60201c565b1561267457505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126aa61229f6040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061213260201b60201c565b156126d957505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61270a61229f6040518060400160405280600781526020016604d504c2d322e360cc1b81525061213260201b60201c565b1561273457505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b61276561229f6040518060400160405280600781526020016604f534c2d332e360cc1b81525061213260201b60201c565b1561278f57505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6127c361229f6040518060400160405280600a81526020016904170616368652d322e360b41b81525061213260201b60201c565b156127f057505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61282761229f6040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061213260201b60201c565b80612868575061286861229f6040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061213260201b60201c565b1561289557505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b6128c761229f604051806040016040528060088152602001674255534c2d312e3160c01b81525061213260201b60201c565b156128f157505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b6040808401518451915161046f929060200161453f565b60608060005b8451811015612993578185828151811061292a5761292a613e96565b6020026020010151604051602001612943929190613aea565b604051602081830303815290604052915060018551612962919061445f565b811461298b5781604051602001612979919061468f565b60405160208183030381529060405291505b60010161290e565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129ac57905050905083816000815181106129d7576129d7613e96565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a1057612a10613e96565b60200260200101819052508181600281518110612a2f57612a2f613e96565b6020908102919091010152949350505050565b6020808301518351835192840151600093612a6092918491906133a2565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612a9693906134b3565b9050836020015181612aa8919061445f565b84518590612ab790839061445f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612aeb57508161027c565b6020808301519084015160019114612b125750815160208481015190840151829020919020145b8015612b4357825184518590612b2990839061445f565b9052508251602085018051612b3f90839061452c565b9052505b509192915050565b6040805180820190915260008082526020820152612b6a8383836135d3565b5092915050565b6060600082600001516001600160401b03811115612b9157612b916139ea565b6040519080825280601f01601f191660200182016040528015612bbb576020820181803683370190505b50602084810151855192935090830191612b6a918391613679565b60606000612be2610648565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612bff5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c4090613fa5565b935060ff1681518110612c5557612c55613e96565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612c9091906146b4565b604051602081830303815290604052828280612cab90613fa5565b935060ff1681518110612cc057612cc0613e96565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612cf890613fa5565b935060ff1681518110612d0d57612d0d613e96565b602002602001018190525082604051602001612d299190613ee1565b604051602081830303815290604052828280612d4490613fa5565b935060ff1681518110612d5957612d59613e96565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612d9390613fa5565b935060ff1681518110612da857612da8613e96565b6020908102919091010152612dbd87846136f3565b8282612dc881613fa5565b935060ff1681518110612ddd57612ddd613e96565b602090810291909101015285515115612e755760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e1d81613fa5565b935060ff1681518110612e3257612e32613e96565b60209081029190910101528551612e4990846136f3565b8282612e5481613fa5565b935060ff1681518110612e6957612e69613e96565b60200260200101819052505b856080015115612ee35760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612ebe81613fa5565b935060ff1681518110612ed357612ed3613e96565b6020026020010181905250612f3e565b8415612f3e576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f1d81613fa5565b935060ff1681518110612f3257612f32613e96565b60200260200101819052505b60408601515115612fca5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612f7881613fa5565b935060ff1681518110612f8d57612f8d613e96565b60200260200101819052508560400151828280612fa990613fa5565b935060ff1681518110612fbe57612fbe613e96565b60200260200101819052505b8560600151156130345760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261301381613fa5565b935060ff168151811061302857613028613e96565b60200260200101819052505b60008160ff166001600160401b03811115613051576130516139ea565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b50905060005b8260ff168160ff1610156130dd57838160ff16815181106130ad576130ad613e96565b6020026020010151828260ff16815181106130ca576130ca613e96565b602090810291909101015260010161308a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561310e57508161027c565b815183516020850151600092916131249161452c565b61312e919061445f565b6020840151909150600190821461314f575082516020840151819020908220145b801561316a5783518551869061316690839061445f565b9052505b50929392505050565b8051825160208085015190840151600093849390926131939284906134b3565b61319d919061452c565b90505b835160208501516131b1919061452c565b8111612b6a57816131c1816146f9565b92505082600001516131f78560200151836131dc919061445f565b86516131e8919061445f565b855160208701518591906134b3565b613201919061452c565b90506131a0565b606060006132168484613173565b61322190600161452c565b6001600160401b03811115613238576132386139ea565b60405190808252806020026020018201604052801561326b57816020015b60608152602001906001900390816132565790505b50905060005b8151811015611c6557613287611e038686612b4b565b82828151811061329957613299613e96565b6020908102919091010152600101613271565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106132f5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613321576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061333f57662386f26fc10000830492506010015b6305f5e1008310613357576305f5e100830492506008015b612710831061336b57612710830492506004015b6064831061337d576064830492506002015b600a831061027c5760010192915050565b600061339a8383613733565b159392505050565b6000808584116134a9576020841161345557600084156133ed5760016133c986602061445f565b6133d4906008614712565b6133df906002614810565b6133e9919061445f565b1990505b83518116856133fc898961452c565b613406919061445f565b805190935082165b81811461344057878411613428578794505050505061192e565b836134328161481c565b94505082845116905061340e565b61344a878561452c565b94505050505061192e565b838320613462858861445f565b61346c908761452c565b91505b8582106134a7578482208082036134945761348a868461452c565b935050505061192e565b61349f60018461445f565b92505061346f565b505b5092949350505050565b600083818685116135be576020851161356d57600085156134ff5760016134db87602061445f565b6134e6906008614712565b6134f1906002614810565b6134fb919061445f565b1990505b845181166000876135108b8b61452c565b61351a919061445f565b855190915083165b82811461355f578186106135475761353a8b8b61452c565b965050505050505061192e565b85613551816146f9565b965050838651169050613522565b85965050505050505061192e565b508383206000905b61357f868961445f565b82116135bc5785832080820361359b578394505050505061192e565b6135a660018561452c565b93505081806135b4906146f9565b925050613575565b505b6135c8878761452c565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161360093906134b3565b60208087018051918601919091525190915061361c908261445f565b83528451602086015161362f919061452c565b810361363e5760008552613670565b8351835161364c919061452c565b8551869061365b90839061445f565b905250835161366a908261452c565b60208601525b50909392505050565b602081106136b1578151835261369060208461452c565b925061369d60208361452c565b91506136aa60208261445f565b9050613679565b60001981156136e05760016136c783602061445f565b6136d390610100614810565b6136dd919061445f565b90505b9151835183169219169190911790915250565b6060600061370184846106e2565b805160208083015160405193945061371b93909101614833565b60405160208183030381529060405291505092915050565b8151815160009190811115613746575081515b6020808501519084015160005b838110156137ff57825182518082146137cf5760001960208710156137ae5760018461378089602061445f565b61378a919061452c565b613795906008614712565b6137a0906002614810565b6137aa919061445f565b1990505b81811683821681810391146137cc57975061027c9650505050505050565b50505b6137da60208661452c565b94506137e760208561452c565b935050506020816137f8919061452c565b9050613753565b5084518651610cb0919061486f565b610c9f80615e9883390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161385e613863565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161385e6040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b838110156138ef5781810151838201526020016138d7565b50506000910152565b600081518084526139108160208601602086016138d4565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009061192e908301846138f8565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161398081601a8501602088016138d4565b6101d160f51b601a9184019182015283516139a281601c8401602088016138d4565b01601c01949350505050565b60208152600061038a60208301846138f8565b6000602082840312156139d357600080fd5b81516001600160a01b038116811461038a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a2257613a226139ea565b60405290565b6000806001600160401b03841115613a4257613a426139ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613a7057613a706139ea565b604052838152905080828401851015613a8857600080fd5b611c658460208301856138d4565b600082601f830112613aa757600080fd5b61038a83835160208501613a28565b600060208284031215613ac857600080fd5b81516001600160401b03811115613ade57600080fd5b61027884828501613a96565b60008351613afc8184602088016138d4565b835190830190613b108183602088016138d4565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b5181601a8501602088016138d4565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613b8e8160338401602088016138d4565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b606082015260806020820152600061038a60808301846138f8565b600060208284031215613bef57600080fd5b81516001600160401b03811115613c0557600080fd5b8201601f81018413613c1657600080fd5b61027884825160208401613a28565b60008551613c37818460208a016138d4565b602f60f81b9083019081528551613c55816001840160208a016138d4565b602f60f81b600192909101918201528451613c778160028401602089016138d4565b600181830101915050602f60f81b60018201528351613c9d8160028401602088016138d4565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613cd060408301846138f8565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d0857600080fd5b8151801515811461038a57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d5081601f8501602087016138d4565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613da260408301846138f8565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613de860408301846138f8565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e4e8160148501602087016138d4565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613e8460408301856138f8565b828103602084015261038681856138f8565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613ec98160018501602087016138d4565b601160f91b6001939091019283015250600201919050565b60008251613ef38184602087016138d4565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613f8281604b8501602087016138d4565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613fbb57613fbb613f8f565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b60208201526000825161400e8160298501602087016138d4565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061038a60808301846138f8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156140bb57603f198786030184526140a68583516138f8565b9450602093840193919091019060010161408a565b50929695505050505050565b6000602082840312156140d957600080fd5b81516001600160401b038111156140ef57600080fd5b82016060818503121561410157600080fd5b614109613a00565b81518060030b811461411a57600080fd5b815260208201516001600160401b0381111561413557600080fd5b61414186828501613a96565b60208301525060408201516001600160401b0381111561416057600080fd5b61416c86828501613a96565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b6020820152600082516141bc8160218501602087016138d4565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b60208201526000835161438c8160218501602088016138d4565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143b981602e8401602088016138d4565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b60208201526000825161400e8160298501602087016138d4565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b6020820152600082516144528160228501602087016138d4565b9190910160220192915050565b8181038181111561027c5761027c613f8f565b6d021b7b73a3930b1ba103730b6b2960951b81526000825161449b81600e8501602087016138d4565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b8082018082111561027c5761027c613f8f565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145778160188501602088016138d4565b6301034b7160e51b601891840191820152835161459b81601c8401602088016138d4565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146a18184602087016138d4565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516146ec81601c8501602087016138d4565b91909101601c0192915050565b60006001820161470b5761470b613f8f565b5060010190565b808202811582820484141761027c5761027c613f8f565b6001815b60018411156147645780850481111561474857614748613f8f565b600184161561475657908102905b60019390931c92800261472d565b935093915050565b60008261477b5750600161027c565b816147885750600061027c565b816001811461479e57600281146147a8576147c4565b600191505061027c565b60ff8411156147b9576147b9613f8f565b50506001821b61027c565b5060208310610133831016604e8410600b84101617156147e7575081810a61027c565b6147f46000198484614729565b806000190482111561480857614808613f8f565b029392505050565b600061038a838361476c565b60008161482b5761482b613f8f565b506000190190565b600083516148458184602088016138d4565b601d60f91b90830190815283516148638160018401602088016138d4565b01600101949350505050565b8181036000831280158383131683831282161715612b6a57612b6a613f8f565b6080516115cb6148cd600039600081816101830152818161046e015281816104d00152818161083f0152818161094e01526109b001526115cb6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636133b4bb116100cd578063a217fddf11610081578063d547741f11610066578063d547741f14610332578063d9caed1214610345578063e63ab1e91461035857600080fd5b8063a217fddf14610317578063c8a023621461031f57600080fd5b80638456cb59116100b25780638456cb59146102a257806385f438c1146102aa57806391d14854146102d157600080fd5b80636133b4bb1461026f57806381100bf01461028257600080fd5b80632f2ff15d116101245780633c2f05a8116101095780633c2f05a8146102375780633f4ba83a1461025c5780635c975abb1461026457600080fd5b80632f2ff15d1461021157806336568abe1461022457600080fd5b806301ffc9a714610156578063116191b61461017e57806321fc65f2146101ca578063248a9ca3146101df575b600080fd5b6101696101643660046111fa565b61037f565b60405190151581526020015b60405180910390f35b6101a57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101dd6101d83660046112ae565b610418565b005b6102036101ed36600461131d565b6000908152600160208190526040909120015490565b604051908152602001610175565b6101dd61021f366004611336565b6105ba565b6101dd610232366004611336565b6105e6565b6002546101a590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101dd610644565b60025460ff16610169565b6101dd61027d366004611362565b610679565b6003546101a59073ffffffffffffffffffffffffffffffffffffffff1681565b6101dd6108c6565b6102037f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102df366004611336565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610203600081565b6101dd61032d3660046112ae565b6108f8565b6101dd610340366004611336565b610a80565b6101dd6103533660046113bc565b610aa6565b6102037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610420610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044a81610bb6565b610452610bc0565b61049373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061050d9089908990899089908990600401611442565b600060405180830381600087803b15801561052757600080fd5b505af115801561053b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516105a09392919061149f565b60405180910390a3506105b36001600055565b5050505050565b600082815260016020819052604090912001546105d681610bb6565b6105e08383610c8c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610635576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063f8282610d57565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61066e81610bb6565b610676610e16565b50565b600254610100900473ffffffffffffffffffffffffffffffffffffffff166340c10f19306106a88660056114c2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561071357600080fd5b505af1158015610727573d6000803e3d6000fd5b5050600254600580546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810192909252610100909204909116925063a9059cbb91506044016020604051808303816000875af11580156107af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d391906114fc565b506002546107ff90610100900473ffffffffffffffffffffffffffffffffffffffff1685858585610418565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152610100909204909116906370a0823190602401602060405180830381865afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b9919061151e565b156105e0576105e0611537565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108f081610bb6565b610676610e93565b610900610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461092a81610bb6565b610932610bc0565b61097373ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610bff565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906109ed9089908990899089908990600401611442565b600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516105a09392919061149f565b60008281526001602081905260409091200154610a9c81610bb6565b6105e08383610d57565b610aae610b73565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ad881610bb6565b610ae0610bc0565b610b0173ffffffffffffffffffffffffffffffffffffffff85168484610bff565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb84604051610b6091815260200190565b60405180910390a35061063f6001600055565b600260005403610baf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6106768133610eee565b60025460ff1615610bfd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063f908490610f7f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4f57600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610412565b506000610412565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4f57600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610412565b610e1e611015565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e9b610bc0565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e693390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f7b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610fa173ffffffffffffffffffffffffffffffffffffffff841683611051565b90508051600014158015610fc6575080806020019051810190610fc491906114fc565b155b1561063f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610f72565b60025460ff16610bfd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061105f83836000611066565b9392505050565b6060814710156110a4576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f72565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516110cd9190611566565b60006040518083038185875af1925050503d806000811461110a576040519150601f19603f3d011682016040523d82523d6000602084013e61110f565b606091505b509150915061111f868383611129565b9695505050505050565b60608261113e57611139826111b8565b61105f565b8151158015611162575073ffffffffffffffffffffffffffffffffffffffff84163b155b156111b1576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610f72565b508061105f565b8051156111c85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561120c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461105f57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b919050565b60008083601f84011261127757600080fd5b50813567ffffffffffffffff81111561128f57600080fd5b6020830191508360208285010111156112a757600080fd5b9250929050565b6000806000806000608086880312156112c657600080fd5b6112cf8661123c565b94506112dd6020870161123c565b935060408601359250606086013567ffffffffffffffff81111561130057600080fd5b61130c88828901611265565b969995985093965092949392505050565b60006020828403121561132f57600080fd5b5035919050565b6000806040838503121561134957600080fd5b823591506113596020840161123c565b90509250929050565b6000806000806060858703121561137857600080fd5b6113818561123c565b935060208501359250604085013567ffffffffffffffff8111156113a457600080fd5b6113b087828801611265565b95989497509550505050565b6000806000606084860312156113d157600080fd5b6113da8461123c565b92506113e86020850161123c565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114946080830184866113f9565b979650505050505050565b8381526040602082015260006114b96040830184866113f9565b95945050505050565b80820180821115610412577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006020828403121561150e57600080fd5b8151801515811461105f57600080fd5b60006020828403121561153057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015611587576020818601810151858301520161156d565b50600092019182525091905056fea2646970667358221220c22f4256b34c7ceff39a5acf8d5ae318549565a6265a9a23b2d9459a9845ff3f64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; type ERC20CustodyEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ERC20Custody__factory.ts b/v2/typechain-types/factories/ERC20Custody__factory.ts index d2602a55..2d25c497 100644 --- a/v2/typechain-types/factories/ERC20Custody__factory.ts +++ b/v2/typechain-types/factories/ERC20Custody__factory.ts @@ -21,17 +21,17 @@ const _abi = [ type: "constructor", inputs: [ { - name: "_gateway", + name: "gateway_", type: "address", internalType: "address", }, { - name: "_tssAddress", + name: "tssAddress_", type: "address", internalType: "address", }, { - name: "_admin", + name: "admin_", type: "address", internalType: "address", }, @@ -226,19 +226,6 @@ const _abi = [ ], stateMutability: "view", }, - { - type: "function", - name: "tssAddress", - inputs: [], - outputs: [ - { - name: "", - type: "address", - internalType: "address", - }, - ], - stateMutability: "view", - }, { type: "function", name: "unpause", @@ -595,7 +582,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a0033"; + "0x60a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a0033"; type ERC20CustodyConstructorParams = | [signer?: Signer] @@ -615,28 +602,28 @@ export class ERC20Custody__factory extends ContractFactory { } override getDeployTransaction( - _gateway: AddressLike, - _tssAddress: AddressLike, - _admin: AddressLike, + gateway_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike, overrides?: NonPayableOverrides & { from?: string } ): Promise { return super.getDeployTransaction( - _gateway, - _tssAddress, - _admin, + gateway_, + tssAddress_, + admin_, overrides || {} ); } override deploy( - _gateway: AddressLike, - _tssAddress: AddressLike, - _admin: AddressLike, + gateway_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike, overrides?: NonPayableOverrides & { from?: string } ) { return super.deploy( - _gateway, - _tssAddress, - _admin, + gateway_, + tssAddress_, + admin_, overrides || {} ) as Promise< ERC20Custody & { diff --git a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts index 8825fb05..b0cc5263 100644 --- a/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMEchidnaTest__factory.ts @@ -347,17 +347,17 @@ const _abi = [ name: "initialize", inputs: [ { - name: "_tssAddress", + name: "tssAddress_", type: "address", internalType: "address", }, { - name: "_zetaToken", + name: "zetaToken_", type: "address", internalType: "address", }, { - name: "_admin", + name: "admin_", type: "address", internalType: "address", }, @@ -467,7 +467,7 @@ const _abi = [ name: "setConnector", inputs: [ { - name: "_zetaConnector", + name: "zetaConnector_", type: "address", internalType: "address", }, @@ -480,7 +480,7 @@ const _abi = [ name: "setCustody", inputs: [ { - name: "_custody", + name: "custody_", type: "address", internalType: "address", }, @@ -1062,7 +1062,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f8061324883390190565b6113e280613ee783390190565b608051612fff61024960003960008181611d3301528181611d5c01526121a50152612fff6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b506102596102543660046129e9565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612a47565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612aab565b6108f3565b6102c36102be366004612aab565b61094d565b6040516102659190612b6c565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612b7f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612aab565b6109de565b34801561038457600080fd5b5061028e610393366004612b98565b610b0b565b61028e6103a6366004612aab565b610b55565b3480156103b757600080fd5b5061028e6103c6366004612b98565b610cdc565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610d2d565b61028e61040e366004612bf3565b610d62565b34801561041f57600080fd5b5061028e61042e366004612cfa565b610d81565b34801561043f57600080fd5b5061035761105e565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612d69565b61108d565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6111b8565b34801561055457600080fd5b5061028e610563366004612dc3565b6111ea565b34801561057457600080fd5b50610259610583366004612b98565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612a47565b61128f565b34801561068b57600080fd5b5061028e61069a366004612cfa565b611383565b3480156106ab57600080fd5b5061028e6106ba366004612e15565b6114fd565b3480156106cb57600080fd5b5061028e6106da366004612b98565b6117b2565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612a47565b6117f6565b34801561075257600080fd5b5061028e610761366004612e58565b611923565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a816119d6565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611acd565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610940929190612ed4565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610979816119d6565b610981611acd565b600061098e868686611b2b565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3487876040516109cd93929190612ef0565b60405180910390a295945050505050565b6109e6611acd565b34600003610a20576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a6d576040519150601f19603f3d011682016040523d82523d6000602084013e610a72565b606091505b5090915050801515600003610ab3576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610afd9493929190612f0a565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b45816119d6565b610b4f83836119e0565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b7f816119d6565b610b87611acd565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bd5576040519150601f19603f3d011682016040523d82523d6000602084013e610bda565b606091505b509150915081610c16576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610c5d9088908890600401612ed4565b600060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610ccc93929190612ef0565b60405180910390a2505050505050565b6001600160a01b0381163314610d1e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d288282611bd4565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d57816119d6565b610d5f611c98565b50565b610d6a611d28565b610d7382611df8565b610d7d8282611e03565b5050565b610d89611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610db3816119d6565b610dbb611acd565b83600003610df5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dff8686611fa8565b610e35576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec19190612f33565b610ef7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f04868585611b2b565b9050610f108787611fa8565b610f46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190612f55565b90508015610fdc57610fdc8882612038565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161102393929190612ef0565b60405180910390a350505061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b600061106861219a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156110f357600080fd5b505af1158015611107573d6000803e3d6000fd5b505060045461112592506001600160a01b0316905085858585610d81565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190612f55565b15610b4f57610b4f612f6e565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111e2816119d6565b610d5f6121fc565b6111f2611acd565b8360000361122c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611237338486612275565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516112809493929190612f0a565b60405180910390a35050505050565b600061129a816119d6565b6000546001600160a01b0316156112dd576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661131d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113477f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836119e0565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61138b611f27565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96113b5816119d6565b6113bd611acd565b836000036113f7576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140b6001600160a01b03871686866123c9565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906114529086908690600401612ed4565b600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516114cb93929190612ef0565b60405180910390a35061105760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115485750825b905060008267ffffffffffffffff1660011480156115655750303b155b905081158015611573575080155b156115aa576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561160b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061162857506001600160a01b038716155b1561165f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61166761243d565b61166f612445565b61167761243d565b61167f612455565b61168a6000876119e0565b506116b57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876119e0565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117137f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896119e0565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117a85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546117ec816119d6565b610b4f8383611bd4565b6117fe611acd565b34600003611838576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611885576040519150601f19603f3d011682016040523d82523d6000602084013e61188a565b606091505b50909150508015156000036118cb576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61192b611acd565b81600003611965576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611970338284612275565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109409291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d5f8133612465565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ac3576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a793390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b29576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b0316348686604051611b4b929190612f9d565b60006040518083038185875af1925050503d8060008114611b88576040519150601f19603f3d011682016040523d82523d6000602084013e611b8d565b606091505b509150915081611bc9576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ac3576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611ca06124f2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dc157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611db57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d7d816119d6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e7b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e7891810190612f55565b60015b611ec1576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f1d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611eb8565b610d28838361254d565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611fa2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190612f33565b6003546001600160a01b039081169083160361215a576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de9190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b505050505050565b600054610d7d906001600160a01b038481169116836123c9565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b29576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612204611acd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d0a565b6003546001600160a01b03908116908316036123ad576122a06001600160a01b0383168430846125a3565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190612f33565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b50505050505050565b600054610d28906001600160a01b0384811691869116846125a3565b6040516001600160a01b03838116602483015260448201839052610d2891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125dc565b611b29612658565b61244d612658565b611b296126bf565b61245d612658565b611b296126c7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d7d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611eb8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b29576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61255682612718565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561259b57610d2882826127c0565b610d7d612836565b6040516001600160a01b038481166024830152838116604483015260648201839052610b4f9186918216906323b872dd906084016123f6565b60006125f16001600160a01b0384168361286e565b905080516000141580156126165750808060200190518101906126149190612f33565b155b15610d28576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611eb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b29576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612174612658565b6126cf612658565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612767576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611eb8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127dd9190612fad565b600060405180830381855af49150503d8060008114612818576040519150601f19603f3d011682016040523d82523d6000602084013e61281d565b606091505b509150915061282d85838361287c565b95945050505050565b3415611b29576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611bcd838360006128f1565b6060826128915761288c826129a7565b611bcd565b81511580156128a857506001600160a01b0384163b155b156128ea576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611eb8565b5080611bcd565b60608147101561292f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611eb8565b600080856001600160a01b0316848660405161294b9190612fad565b60006040518083038185875af1925050503d8060008114612988576040519150601f19603f3d011682016040523d82523d6000602084013e61298d565b606091505b509150915061299d86838361287c565b9695505050505050565b8051156129b75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129fb57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611bcd57600080fd5b80356001600160a01b0381168114612a4257600080fd5b919050565b600060208284031215612a5957600080fd5b611bcd82612a2b565b60008083601f840112612a7457600080fd5b50813567ffffffffffffffff811115612a8c57600080fd5b602083019150836020828501011115612aa457600080fd5b9250929050565b600080600060408486031215612ac057600080fd5b612ac984612a2b565b9250602084013567ffffffffffffffff811115612ae557600080fd5b612af186828701612a62565b9497909650939450505050565b60005b83811015612b19578181015183820152602001612b01565b50506000910152565b60008151808452612b3a816020860160208601612afe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611bcd6020830184612b22565b600060208284031215612b9157600080fd5b5035919050565b60008060408385031215612bab57600080fd5b82359150612bbb60208401612a2b565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612c0657600080fd5b612c0f83612a2b565b9150602083013567ffffffffffffffff811115612c2b57600080fd5b8301601f81018513612c3c57600080fd5b803567ffffffffffffffff811115612c5657612c56612bc4565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612cc257612cc2612bc4565b604052818152828201602001871015612cda57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612d1257600080fd5b612d1b86612a2b565b9450612d2960208701612a2b565b935060408601359250606086013567ffffffffffffffff811115612d4c57600080fd5b612d5888828901612a62565b969995985093965092949392505050565b60008060008060608587031215612d7f57600080fd5b612d8885612a2b565b935060208501359250604085013567ffffffffffffffff811115612dab57600080fd5b612db787828801612a62565b95989497509550505050565b600080600080600060808688031215612ddb57600080fd5b612de486612a2b565b945060208601359350612df960408701612a2b565b9250606086013567ffffffffffffffff811115612d4c57600080fd5b600080600060608486031215612e2a57600080fd5b612e3384612a2b565b9250612e4160208501612a2b565b9150612e4f60408501612a2b565b90509250925092565b600080600060608486031215612e6d57600080fd5b612e7684612a2b565b925060208401359150612e4f60408501612a2b565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612ee8602083018486612e8b565b949350505050565b83815260406020820152600061282d604083018486612e8b565b8481526001600160a01b038416602082015260606040820152600061299d606083018486612e8b565b600060208284031215612f4557600080fd5b81518015158114611bcd57600080fd5b600060208284031215612f6757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b60008251612fbf818460208701612afe565b919091019291505056fea2646970667358221220e575ea5a18b9462f7a8e597ab970f6a09ecc09fd51c56fa3c6c1397f89f20af164736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a0033608060405234801561001057600080fd5b506040516113e23803806113e283398101604081905261002f916101d3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b156100795760405163d92e233d60e01b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b038681169190910291909117909155600380546001600160a01b0319169184169190911790556100c3600082610122565b506100ee7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610122565b506101197f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610122565b50505050610216565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101ad5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101b1565b5060005b92915050565b80516001600160a01b03811681146101ce57600080fd5b919050565b6000806000606084860312156101e857600080fd5b6101f1846101b7565b92506101ff602085016101b7565b915061020d604085016101b7565b90509250925092565b6111bd806102256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b2578063a217fddf11610081578063d547741f11610066578063d547741f146102c2578063d9caed12146102d5578063e63ab1e9146102e857600080fd5b8063a217fddf146102a7578063c8a02362146102af57600080fd5b80635c975abb146102275780638456cb591461023257806385f438c11461023a57806391d148541461026157600080fd5b80632f2ff15d116100ee5780632f2ff15d146101d957806336568abe146101ec5780633f4ba83a146101ff5780635b1125911461020757600080fd5b806301ffc9a714610120578063116191b61461014857806321fc65f214610192578063248a9ca3146101a7575b600080fd5b61013361012e366004610ee3565b61030f565b60405190151581526020015b60405180910390f35b60025461016d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6101a56101a0366004610f4e565b6103a8565b005b6101cb6101b5366004610feb565b6000908152600160208190526040909120015490565b60405190815260200161013f565b6101a56101e7366004611004565b61051d565b6101a56101fa366004611004565b610549565b6101a56105a7565b60035461016d9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff16610133565b6101a56105dc565b6101cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61013361026f366004611004565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101cb600081565b6101a56102bd366004610f4e565b61060e565b6101a56102d0366004611004565b610769565b6101a56102e3366004611030565b61078f565b6101cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103b061085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103da8161089f565b6103e26108a9565b60025461040e9073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517f5131ab5900000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690635131ab599061047090899089908990899089906004016110b6565b600060405180830381600087803b15801561048a57600080fd5b505af115801561049e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e86868660405161050393929190611113565b60405180910390a3506105166001600055565b5050505050565b600082815260016020819052604090912001546105398161089f565b6105438383610975565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610598576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a28282610a40565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105d18161089f565b6105d9610aff565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6106068161089f565b6105d9610b7c565b61061661085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106408161089f565b6106486108a9565b6002546106749073ffffffffffffffffffffffffffffffffffffffff88811691610100900416866108e8565b6002546040517fb8969bd400000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063b8969bd4906106d690899089908990899089906004016110b6565b600060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c886868660405161050393929190611113565b600082815260016020819052604090912001546107858161089f565b6105438383610a40565b61079761085c565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107c18161089f565b6107c96108a9565b6107ea73ffffffffffffffffffffffffffffffffffffffff851684846108e8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161084991815260200190565b60405180910390a3506105a26001600055565b600260005403610898576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105d98133610bd7565b60025460ff16156108e6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526105a2908490610c68565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a3857600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016103a2565b5060006103a2565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a3857600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103a2565b610b07610cfe565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610b846108a9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b523390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c64576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610c8a73ffffffffffffffffffffffffffffffffffffffff841683610d3a565b90508051600014158015610caf575080806020019051810190610cad9190611136565b155b156105a2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c5b565b60025460ff166108e6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d4883836000610d4f565b9392505050565b606081471015610d8d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c5b565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610db69190611158565b60006040518083038185875af1925050503d8060008114610df3576040519150601f19603f3d011682016040523d82523d6000602084013e610df8565b606091505b5091509150610e08868383610e12565b9695505050505050565b606082610e2757610e2282610ea1565b610d48565b8151158015610e4b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610e9a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c5b565b5080610d48565b805115610eb15780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610ef557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d4857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4957600080fd5b919050565b600080600080600060808688031215610f6657600080fd5b610f6f86610f25565b9450610f7d60208701610f25565b935060408601359250606086013567ffffffffffffffff811115610fa057600080fd5b8601601f81018813610fb157600080fd5b803567ffffffffffffffff811115610fc857600080fd5b886020828401011115610fda57600080fd5b959894975092955050506020019190565b600060208284031215610ffd57600080fd5b5035919050565b6000806040838503121561101757600080fd5b8235915061102760208401610f25565b90509250929050565b60008060006060848603121561104557600080fd5b61104e84610f25565b925061105c60208501610f25565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061110860808301848661106d565b979650505050505050565b83815260406020820152600061112d60408301848661106d565b95945050505050565b60006020828403121561114857600080fd5b81518015158114610d4857600080fd5b6000825160005b81811015611179576020818601810151858301520161115f565b50600092019182525091905056fea2646970667358221220f228501fb7798406cf58c84b1f7af446926eecd69943c0a6760dfd0c5550e2ff64736f6c634300081a0033"; + "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f806133f683390190565b61140b8061409583390190565b6080516131ad61024960003960008181611f2601528181611f4f015261231e01526131ad6000f3fe6080604052600436106102345760003560e01c80635c975abb11610138578063ad3cb1cc116100b0578063d547741f1161007f578063e63ab1e911610064578063e63ab1e9146106ff578063f340fa0114610733578063f45346dc1461074657600080fd5b8063d547741f146106bf578063dda79b75146106df57600080fd5b8063ad3cb1cc14610616578063ae7a3a6f1461065f578063b8969bd41461067f578063c0c53b8b1461069f57600080fd5b80638456cb591161010757806391d14854116100ec57806391d1485414610568578063a217fddf146105cd578063a783c789146105e257600080fd5b80638456cb59146105335780638c6f037f1461054857600080fd5b80635c975abb146104885780635d62c860146104bf5780636ab90f9b146104f357806381100bf01461051357600080fd5b806335c018db116101cb5780634f1ef2861161019a57806352d1902d1161017f57806352d1902d1461043357806357bec62f146104485780635b1125911461046857600080fd5b80634f1ef286146104005780635131ab591461041357600080fd5b806335c018db1461039857806336568abe146103ab5780633c2f05a8146103cb5780633f4ba83a146103eb57600080fd5b806321e093b11161020757806321e093b1146102d0578063248a9ca31461030857806329c59b5d146103655780632f2ff15d1461037857600080fd5b806301ffc9a71461023957806310188aef1461026e5780631b8b921d146102905780631cff79cd146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004612b97565b610766565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e610289366004612bf5565b6107ff565b005b34801561029c57600080fd5b5061028e6102ab366004612c59565b6108f3565b6102c36102be366004612c59565b61097e565b6040516102659190612d1a565b3480156102dc57600080fd5b506003546102f0906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561031457600080fd5b50610357610323366004612d2d565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b61028e610373366004612c59565b610a41565b34801561038457600080fd5b5061028e610393366004612d46565b610b94565b61028e6103a6366004612c59565b610bde565b3480156103b757600080fd5b5061028e6103c6366004612d46565b610dcd565b3480156103d757600080fd5b506004546102f0906001600160a01b031681565b3480156103f757600080fd5b5061028e610e19565b61028e61040e366004612da1565b610e4e565b34801561041f57600080fd5b5061028e61042e366004612ea8565b610e6d565b34801561043f57600080fd5b5061035761114a565b34801561045457600080fd5b506002546102f0906001600160a01b031681565b34801561047457600080fd5b506001546102f0906001600160a01b031681565b34801561049457600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104cb57600080fd5b506103577f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b3480156104ff57600080fd5b5061028e61050e366004612f17565b611179565b34801561051f57600080fd5b506005546102f0906001600160a01b031681565b34801561053f57600080fd5b5061028e6112a4565b34801561055457600080fd5b5061028e610563366004612f71565b6112d6565b34801561057457600080fd5b50610259610583366004612d46565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105d957600080fd5b50610357600081565b3480156105ee57600080fd5b506103577f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561062257600080fd5b506102c36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561066b57600080fd5b5061028e61067a366004612bf5565b6113ac565b34801561068b57600080fd5b5061028e61069a366004612ea8565b6114a0565b3480156106ab57600080fd5b5061028e6106ba366004612fc3565b611619565b3480156106cb57600080fd5b5061028e6106da366004612d46565b6118ce565b3480156106eb57600080fd5b506000546102f0906001600160a01b031681565b34801561070b57600080fd5b506103577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61028e610741366004612bf5565b611912565b34801561075257600080fd5b5061028e610761366004613006565b611a67565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061080a81611b22565b6002546001600160a01b03161561084d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661088d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108b77f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2c565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108fb611c19565b610903611c77565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610948929190613082565b60405180910390a361097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109aa81611b22565b6109b2611c19565b6109ba611c77565b60006109c7868686611d1e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a069392919061309e565b60405180910390a29150610a3960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610a49611c19565b610a51611c77565b34600003610a8b576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ad8576040519150601f19603f3d011682016040523d82523d6000602084013e610add565b606091505b5050905080610b18576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610b6294939291906130b8565b60405180910390a35061097960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bce81611b22565b610bd88383611b2c565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c0881611b22565b610c10611c19565b610c18611c77565b6001600160a01b038416610c58576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610ca5576040519150601f19603f3d011682016040523d82523d6000602084013e610caa565b606091505b5050905080610ce5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610d2c9087908790600401613082565b600060405180830381600087803b158015610d4657600080fd5b505af1158015610d5a573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610d9b9392919061309e565b60405180910390a250610bd860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610e0f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109798282611dc7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4381611b22565b610e4b611e8b565b50565b610e56611f1b565b610e5f82611feb565b610e698282611ff6565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610e9781611b22565b610e9f611c19565b610ea7611c77565b83600003610ee1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eeb868661211a565b610f21576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad91906130e1565b610fe3576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ff0868585611d1e565b9050610ffc878761211a565b611032576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190613103565b905080156110c8576110c888826121aa565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161110f9392919061309e565b60405180910390a3505061114260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000611154612313565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156111df57600080fd5b505af11580156111f3573d6000803e3d6000fd5b505060045461121192506001600160a01b0316905085858585610e6d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112979190613103565b15610bd857610bd861311c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112ce81611b22565b610e4b612375565b6112de611c19565b6112e6611c77565b83600003611320576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132b3384866123ee565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161137494939291906130b8565b60405180910390a36113a560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006113b781611b22565b6000546001600160a01b0316156113fa576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661143a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114647f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2c565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96114ca81611b22565b6114d2611c19565b6114da611c77565b83600003611514576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115286001600160a01b0387168686612577565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061156f9086908690600401613082565b600060405180830381600087803b15801561158957600080fd5b505af115801561159d573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516115e89392919061309e565b60405180910390a361114260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116645750825b905060008267ffffffffffffffff1660011480156116815750303b155b90508115801561168f575080155b156116c6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117275784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061174457506001600160a01b038716155b1561177b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117836125eb565b61178b6125f3565b6117936125eb565b61179b612603565b6117a6600087611b2c565b506117d17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b2c565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561182f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b2c565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156118c45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461190881611b22565b610bd88383611dc7565b61191a611c19565b611922611c77565b3460000361195c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146119a9576040519150601f19603f3d011682016040523d82523d6000602084013e6119ae565b606091505b50509050806119e9576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610e4b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611a6f611c19565b611a77611c77565b81600003611ab1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611abc3382846123ee565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516109489291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610e4b8133612613565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c0f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bc53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107f9565b60009150506107f9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cf2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611d3e92919061314b565b60006040518083038185875af1925050503d8060008114611d7b576040519150601f19603f3d011682016040523d82523d6000602084013e611d80565b606091505b509150915081611dbc576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c0f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107f9565b611e936126a0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611fb457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611fa87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e6981611b22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561206e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261206b91810190613103565b60015b6120b4576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612110576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016120ab565b61097983836126fb565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc091906130e1565b6003546001600160a01b03908116908316036122f9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906130e1565b612286576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156122e557600080fd5b505af1158015611142573d6000803e3d6000fd5b600054610e69906001600160a01b03848116911683612577565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237d611c19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611efd565b6003546001600160a01b039081169083160361255b576124196001600160a01b038316843084612751565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a991906130e1565b6124df576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253e57600080fd5b505af1158015612552573d6000803e3d6000fd5b50505050505050565b600054610979906001600160a01b038481169186911684612751565b6040516001600160a01b0383811660248301526044820183905261097991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061278a565b611c75612806565b6125fb612806565b611c7561286d565b61260b612806565b611c75612875565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e69576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016120ab565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612704826128c6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561274957610979828261296e565b610e696129e4565b6040516001600160a01b038481166024830152838116604483015260648201839052610bd89186918216906323b872dd906084016125a4565b600061279f6001600160a01b03841683612a1c565b905080516000141580156127c45750808060200190518101906127c291906130e1565b155b15610979576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016120ab565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cf8612806565b61287d612806565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612915576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016120ab565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161298b919061315b565b600060405180830381855af49150503d80600081146129c6576040519150601f19603f3d011682016040523d82523d6000602084013e6129cb565b606091505b50915091506129db858383612a2a565b95945050505050565b3415611c75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611dc083836000612a9f565b606082612a3f57612a3a82612b55565b611dc0565b8151158015612a5657506001600160a01b0384163b155b15612a98576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016120ab565b5080611dc0565b606081471015612add576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016120ab565b600080856001600160a01b03168486604051612af9919061315b565b60006040518083038185875af1925050503d8060008114612b36576040519150601f19603f3d011682016040523d82523d6000602084013e612b3b565b606091505b5091509150612b4b868383612a2a565b9695505050505050565b805115612b655780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612ba957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dc057600080fd5b80356001600160a01b0381168114612bf057600080fd5b919050565b600060208284031215612c0757600080fd5b611dc082612bd9565b60008083601f840112612c2257600080fd5b50813567ffffffffffffffff811115612c3a57600080fd5b602083019150836020828501011115612c5257600080fd5b9250929050565b600080600060408486031215612c6e57600080fd5b612c7784612bd9565b9250602084013567ffffffffffffffff811115612c9357600080fd5b612c9f86828701612c10565b9497909650939450505050565b60005b83811015612cc7578181015183820152602001612caf565b50506000910152565b60008151808452612ce8816020860160208601612cac565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611dc06020830184612cd0565b600060208284031215612d3f57600080fd5b5035919050565b60008060408385031215612d5957600080fd5b82359150612d6960208401612bd9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612db457600080fd5b612dbd83612bd9565b9150602083013567ffffffffffffffff811115612dd957600080fd5b8301601f81018513612dea57600080fd5b803567ffffffffffffffff811115612e0457612e04612d72565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612e7057612e70612d72565b604052818152828201602001871015612e8857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ec057600080fd5b612ec986612bd9565b9450612ed760208701612bd9565b935060408601359250606086013567ffffffffffffffff811115612efa57600080fd5b612f0688828901612c10565b969995985093965092949392505050565b60008060008060608587031215612f2d57600080fd5b612f3685612bd9565b935060208501359250604085013567ffffffffffffffff811115612f5957600080fd5b612f6587828801612c10565b95989497509550505050565b600080600080600060808688031215612f8957600080fd5b612f9286612bd9565b945060208601359350612fa760408701612bd9565b9250606086013567ffffffffffffffff811115612efa57600080fd5b600080600060608486031215612fd857600080fd5b612fe184612bd9565b9250612fef60208501612bd9565b9150612ffd60408501612bd9565b90509250925092565b60008060006060848603121561301b57600080fd5b61302484612bd9565b925060208401359150612ffd60408501612bd9565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000613096602083018486613039565b949350505050565b8381526040602082015260006129db604083018486613039565b8481526001600160a01b0384166020820152606060408201526000612b4b606083018486613039565b6000602082840312156130f357600080fd5b81518015158114611dc057600080fd5b60006020828403121561311557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8183823760009101908152919050565b6000825161316d818460208701612cac565b919091019291505056fea2646970667358221220af74e0039ccd316ad209c39ddb2d59569d0e7332f3cba90d28e03811e710d7ca64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212207e804ca539d49155d2b6bc19268ce22f9f857027c75247d69fb0d56a089c93d464736f6c634300081a003360a060405234801561001057600080fd5b5060405161140b38038061140b83398101604081905261002f916101b3565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526100a3600082610102565b506100ce7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610102565b506100f97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610102565b505050506101f6565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661018d5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610191565b5060005b92915050565b80516001600160a01b03811681146101ae57600080fd5b919050565b6000806000606084860312156101c857600080fd5b6101d184610197565b92506101df60208501610197565b91506101ed60408501610197565b90509250925092565b6080516111de61022d60003960008181610132015281816103c5015281816104270152818161065801526106ba01526111de6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638456cb5911610097578063c8a0236211610066578063c8a0236214610276578063d547741f14610289578063d9caed121461029c578063e63ab1e9146102af57600080fd5b80638456cb59146101f957806385f438c11461020157806391d1485414610228578063a217fddf1461026e57600080fd5b80632f2ff15d116100d35780632f2ff15d146101c057806336568abe146101d35780633f4ba83a146101e65780635c975abb146101ee57600080fd5b806301ffc9a714610105578063116191b61461012d57806321fc65f214610179578063248a9ca31461018e575b600080fd5b610118610113366004610f04565b6102d6565b60405190151581526020015b60405180910390f35b6101547f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b61018c610187366004610f6f565b61036f565b005b6101b261019c36600461100c565b6000908152600160208190526040909120015490565b604051908152602001610124565b61018c6101ce366004611025565b610511565b61018c6101e1366004611025565b61053d565b61018c61059b565b60025460ff16610118565b61018c6105d0565b6101b27f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610118610236366004611025565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101b2600081565b61018c610284366004610f6f565b610602565b61018c610297366004611025565b61078a565b61018c6102aa366004611051565b6107b0565b6101b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61037761087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46103a1816108c0565b6103a96108ca565b6103ea73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab599061046490899089908990899089906004016110d7565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8686866040516104f793929190611134565b60405180910390a35061050a6001600055565b5050505050565b6000828152600160208190526040909120015461052d816108c0565b6105378383610996565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461058c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105968282610a61565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105c5816108c0565b6105cd610b20565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6105fa816108c0565b6105cd610b9d565b61060a61087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610634816108c0565b61063c6108ca565b61067d73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000086610909565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd4906106f790899089908990899089906004016110d7565b600060405180830381600087803b15801561071157600080fd5b505af1158015610725573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88686866040516104f793929190611134565b600082815260016020819052604090912001546107a6816108c0565b6105378383610a61565b6107b861087d565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107e2816108c0565b6107ea6108ca565b61080b73ffffffffffffffffffffffffffffffffffffffff85168484610909565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8460405161086a91815260200190565b60405180910390a3506105966001600055565b6002600054036108b9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6105cd8133610bf8565b60025460ff1615610907576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610596908490610c89565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610a5957600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8716808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610369565b506000610369565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610a5957600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610369565b610b28610d1f565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610ba56108ca565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b733390565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c85576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610cab73ffffffffffffffffffffffffffffffffffffffff841683610d5b565b90508051600014158015610cd0575080806020019051810190610cce9190611157565b155b15610596576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610c7c565b60025460ff16610907576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6983836000610d70565b9392505050565b606081471015610dae576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610c7c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610dd79190611179565b60006040518083038185875af1925050503d8060008114610e14576040519150601f19603f3d011682016040523d82523d6000602084013e610e19565b606091505b5091509150610e29868383610e33565b9695505050505050565b606082610e4857610e4382610ec2565b610d69565b8151158015610e6c575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610ebb576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c7c565b5080610d69565b805115610ed25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610f1657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d6957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f6a57600080fd5b919050565b600080600080600060808688031215610f8757600080fd5b610f9086610f46565b9450610f9e60208701610f46565b935060408601359250606086013567ffffffffffffffff811115610fc157600080fd5b8601601f81018813610fd257600080fd5b803567ffffffffffffffff811115610fe957600080fd5b886020828401011115610ffb57600080fd5b959894975092955050506020019190565b60006020828403121561101e57600080fd5b5035919050565b6000806040838503121561103857600080fd5b8235915061104860208401610f46565b90509250929050565b60008060006060848603121561106657600080fd5b61106f84610f46565b925061107d60208501610f46565b929592945050506040919091013590565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061112960808301848661108e565b979650505050505050565b83815260406020820152600061114e60408301848661108e565b95945050505050565b60006020828403121561116957600080fd5b81518015158114610d6957600080fd5b6000825160005b8181101561119a5760208186018101518583015201611180565b50600092019182525091905056fea264697066735822122035ca457bdc8b45adde9844ff8416a0abd723c23055fd6933ddc05523b5f5b6de64736f6c634300081a0033"; type GatewayEVMEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts b/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts index b6699ea5..9dde90ab 100644 --- a/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts +++ b/v2/typechain-types/factories/GatewayEVMUpgradeTest__factory.ts @@ -1038,7 +1038,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220e0d221e2700a741409740f6a05e6ac8e799e50b3e2a6e75b5173b33a31fa502464736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d526100fd60003960008181611ab101528181611ada0152611f250152612d526000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046127c5565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612823565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612887565b610842565b61027261026d366004612887565b610894565b6040516102149190612948565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d236600461295b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612887565b61091d565b34801561033357600080fd5b5061023d610342366004612974565b610a42565b61023d610355366004612887565b610a8c565b34801561036657600080fd5b5061023d610375366004612974565b610c0b565b34801561038657600080fd5b5061023d610c5c565b61023d61039d3660046129cf565b610c91565b3480156103ae57600080fd5b5061023d6103bd366004612ad6565b610cb0565b3480156103ce57600080fd5b50610306610f85565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fb4565b3480156104a357600080fd5b5061023d6104b2366004612b45565b610fe6565b3480156104c357600080fd5b506102086104d2366004612974565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612823565b611083565b3480156105da57600080fd5b5061023d6105e9366004612ad6565b611177565b3480156105fa57600080fd5b5061023d610609366004612b97565b6112e9565b34801561061a57600080fd5b5061023d610629366004612974565b61159e565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612823565b6115e2565b3480156106a157600080fd5b5061023d6106b0366004612bda565b611707565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117b2565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610887929190612c56565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c0816117b2565b60006108cd8686866118a9565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634878760405161090c93929190612c72565b60405180910390a295945050505050565b34600003610957576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109a4576040519150601f19603f3d011682016040523d82523d6000602084013e6109a9565b606091505b50909150508015156000036109ea576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a349493929190612c8c565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7c816117b2565b610a8683836117bc565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ab6816117b2565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b509150915081610b45576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610b8c9088908890600401612c56565b600060405180830381600087803b158015610ba657600080fd5b505af1158015610bba573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610bfb93929190612c72565b60405180910390a2505050505050565b6001600160a01b0381163314610c4d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c578282611952565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c86816117b2565b610c8e611a16565b50565b610c99611aa6565b610ca282611b78565b610cac8282611b83565b5050565b610cb8611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ce2816117b2565b83600003610d1c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d268686611d28565b610d5c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de89190612cb5565b610e1e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e2b8685856118a9565b9050610e378787611d28565b610e6d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190612cd7565b90508015610f0357610f038882611db8565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f4a93929190612c72565b60405180910390a3505050610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610f8f611f1a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fde816117b2565b610c8e611f7c565b83600003611020576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61102b338486611ff5565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110749493929190612c8c565b60405180910390a35050505050565b600061108e816117b2565b6000546001600160a01b0316156110d1576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611111576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9836117bc565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61117f611ca7565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111a9816117b2565b836000036111e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f76001600160a01b0387168686612149565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b59061123e9086908690600401612c56565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112b793929190612c72565b60405180910390a350610f7e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113345750825b905060008267ffffffffffffffff1660011480156113515750303b155b90508115801561135f575080155b15611396576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113f75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061141457506001600160a01b038716155b1561144b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114536121bd565b61145b6121c5565b6114636121bd565b61146b6121d5565b6114766000876117bc565b506114a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876117bc565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556114ff7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb896117bc565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115945784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546115d8816117b2565b610a868383611952565b3460000361161c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611669576040519150601f19603f3d011682016040523d82523d6000602084013e61166e565b606091505b50909150508015156000036116af576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b81600003611741576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174c338284611ff5565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108879291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610c8e81336121e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661189f576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118553390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b6060600080856001600160a01b03163486866040516118c9929190612cf0565b60006040518083038185875af1925050503d8060008114611906576040519150601f19603f3d011682016040523d82523d6000602084013e61190b565b606091505b509150915081611947576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561189f576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611a1e612272565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610cac816117b2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bfb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bf891810190612cd7565b60015b611c41576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611c9d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611c38565b610c5783836122cd565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d22576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b9190612cb5565b6003546001600160a01b0390811690831603611eda576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e9190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ebe57600080fd5b505af1158015611ed2573d6000803e3d6000fd5b505050505050565b600054610cac906001600160a01b03848116911683612149565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b76576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f84612323565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a88565b6003546001600160a01b039081169083160361212d576120206001600160a01b03831684308461237f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190612cb5565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561211057600080fd5b505af1158015612124573d6000803e3d6000fd5b50505050505050565b600054610c57906001600160a01b03848116918691168461237f565b6040516001600160a01b03838116602483015260448201839052610c5791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123b8565b611b76612434565b6121cd612434565b611b7661249b565b6121dd612434565b611b766124a3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cac576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611c38565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611b76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122d6826124f4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231b57610c57828261259c565b610cac612612565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611b76576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038481166024830152838116604483015260648201839052610a869186918216906323b872dd90608401612176565b60006123cd6001600160a01b0384168361264a565b905080516000141580156123f25750808060200190518101906123f09190612cb5565b155b15610c57576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611c38565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b76576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ef4612434565b6124ab612434565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612543576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611c38565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125b99190612d00565b600060405180830381855af49150503d80600081146125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b5091509150612609858383612658565b95945050505050565b3415611b76576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061194b838360006126cd565b60608261266d5761266882612783565b61194b565b815115801561268457506001600160a01b0384163b155b156126c6576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611c38565b508061194b565b60608147101561270b576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611c38565b600080856001600160a01b031684866040516127279190612d00565b60006040518083038185875af1925050503d8060008114612764576040519150601f19603f3d011682016040523d82523d6000602084013e612769565b606091505b5091509150612779868383612658565b9695505050505050565b8051156127935780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156127d757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461194b57600080fd5b80356001600160a01b038116811461281e57600080fd5b919050565b60006020828403121561283557600080fd5b61194b82612807565b60008083601f84011261285057600080fd5b50813567ffffffffffffffff81111561286857600080fd5b60208301915083602082850101111561288057600080fd5b9250929050565b60008060006040848603121561289c57600080fd5b6128a584612807565b9250602084013567ffffffffffffffff8111156128c157600080fd5b6128cd8682870161283e565b9497909650939450505050565b60005b838110156128f55781810151838201526020016128dd565b50506000910152565b600081518084526129168160208601602086016128da565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061194b60208301846128fe565b60006020828403121561296d57600080fd5b5035919050565b6000806040838503121561298757600080fd5b8235915061299760208401612807565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156129e257600080fd5b6129eb83612807565b9150602083013567ffffffffffffffff811115612a0757600080fd5b8301601f81018513612a1857600080fd5b803567ffffffffffffffff811115612a3257612a326129a0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612a9e57612a9e6129a0565b604052818152828201602001871015612ab657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612aee57600080fd5b612af786612807565b9450612b0560208701612807565b935060408601359250606086013567ffffffffffffffff811115612b2857600080fd5b612b348882890161283e565b969995985093965092949392505050565b600080600080600060808688031215612b5d57600080fd5b612b6686612807565b945060208601359350612b7b60408701612807565b9250606086013567ffffffffffffffff811115612b2857600080fd5b600080600060608486031215612bac57600080fd5b612bb584612807565b9250612bc360208501612807565b9150612bd160408501612807565b90509250925092565b600080600060608486031215612bef57600080fd5b612bf884612807565b925060208401359150612bd160408501612807565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c6a602083018486612c0d565b949350505050565b838152604060208201526000612609604083018486612c0d565b8481526001600160a01b0384166020820152606060408201526000612779606083018486612c0d565b600060208284031215612cc757600080fd5b8151801515811461194b57600080fd5b600060208284031215612ce957600080fd5b5051919050565b8183823760009101908152919050565b60008251612d128184602087016128da565b919091019291505056fea2646970667358221220f5f94badcd1bd52ad12da244f7c4f330f2fb5d16305f04303cf08087abeff75664736f6c634300081a0033"; type GatewayEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayEVM__factory.ts b/v2/typechain-types/factories/GatewayEVM__factory.ts index c47fde35..126f8c5e 100644 --- a/v2/typechain-types/factories/GatewayEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayEVM__factory.ts @@ -331,17 +331,17 @@ const _abi = [ name: "initialize", inputs: [ { - name: "_tssAddress", + name: "tssAddress_", type: "address", internalType: "address", }, { - name: "_zetaToken", + name: "zetaToken_", type: "address", internalType: "address", }, { - name: "_admin", + name: "admin_", type: "address", internalType: "address", }, @@ -451,7 +451,7 @@ const _abi = [ name: "setConnector", inputs: [ { - name: "_zetaConnector", + name: "zetaConnector_", type: "address", internalType: "address", }, @@ -464,7 +464,7 @@ const _abi = [ name: "setCustody", inputs: [ { - name: "_custody", + name: "custody_", type: "address", internalType: "address", }, @@ -1010,7 +1010,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d9a6100fd60003960008181611b5701528181611b800152611fc90152612d9a6000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b5061020861020336600461280d565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d61023836600461286b565b61074e565b005b34801561024b57600080fd5b5061023d61025a3660046128cf565b610842565b61027261026d3660046128cf565b61089c565b6040516102149190612990565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d23660046129a3565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d6103223660046128cf565b61092d565b34801561033357600080fd5b5061023d6103423660046129bc565b610a5a565b61023d6103553660046128cf565b610aa4565b34801561036657600080fd5b5061023d6103753660046129bc565b610c2b565b34801561038657600080fd5b5061023d610c7c565b61023d61039d366004612a17565b610cb1565b3480156103ae57600080fd5b5061023d6103bd366004612b1e565b610cd0565b3480156103ce57600080fd5b50610306610fad565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d610fdc565b3480156104a357600080fd5b5061023d6104b2366004612b8d565b61100e565b3480156104c357600080fd5b506102086104d23660046129bc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c936600461286b565b6110b3565b3480156105da57600080fd5b5061023d6105e9366004612b1e565b6111a7565b3480156105fa57600080fd5b5061023d610609366004612bdf565b611321565b34801561061a57600080fd5b5061023d6106293660046129bc565b6115d6565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d61069036600461286b565b61161a565b3480156106a157600080fd5b5061023d6106b0366004612c22565b611747565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000610759816117fa565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a6118f1565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161088f929190612c9e565b60405180910390a3505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108c8816117fa565b6108d06118f1565b60006108dd86868661194f565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161091c93929190612cba565b60405180910390a295945050505050565b6109356118f1565b3460000361096f576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146109bc576040519150601f19603f3d011682016040523d82523d6000602084013e6109c1565b606091505b5090915050801515600003610a02576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610a4c9493929190612cd4565b60405180910390a350505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a94816117fa565b610a9e8383611804565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ace816117fa565b610ad66118f1565b600080856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b24576040519150601f19603f3d011682016040523d82523d6000602084013e610b29565b606091505b509150915081610b65576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03871690638fcaa0b590610bac9088908890600401612c9e565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050856001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348787604051610c1b93929190612cba565b60405180910390a2505050505050565b6001600160a01b0381163314610c6d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c7782826119f8565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ca6816117fa565b610cae611abc565b50565b610cb9611b4c565b610cc282611c1c565b610ccc8282611c27565b5050565b610cd8611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d02816117fa565b610d0a6118f1565b83600003610d44576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4e8686611dcc565b610d84576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e109190612cfd565b610e46576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e5386858561194f565b9050610e5f8787611dcc565b610e95576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f199190612d1f565b90508015610f2b57610f2b8882611e5c565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610f7293929190612cba565b60405180910390a3505050610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6000610fb7611fbe565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611006816117fa565b610cae612020565b6110166118f1565b83600003611050576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105b338486612099565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516110a49493929190612cd4565b60405180910390a35050505050565b60006110be816117fa565b6000546001600160a01b031615611101576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611141576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611804565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6111af611d4b565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96111d9816117fa565b6111e16118f1565b8360000361121b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61122f6001600160a01b03871686866121ed565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906112769086908690600401612c9e565b600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78686866040516112ef93929190612cba565b60405180910390a350610fa660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561136c5750825b905060008267ffffffffffffffff1660011480156113895750303b155b905081158015611397575080155b156113ce576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561142f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061144c57506001600160a01b038716155b15611483576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61148b612261565b611493612269565b61149b612261565b6114a3612279565b6114ae600087611804565b506114d97f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611804565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115377f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611804565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156115cc5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611610816117fa565b610a9e83836119f8565b6116226118f1565b3460000361165c576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146116a9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ae565b606091505b50909150508015156000036116ef576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a35050565b61174f6118f1565b81600003611789576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611794338284612099565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4848460405161088f9291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610cae8133612289565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118e7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561189d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561194d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080856001600160a01b031634868660405161196f929190612d38565b60006040518083038185875af1925050503d80600081146119ac576040519150601f19603f3d011682016040523d82523d6000602084013e6119b1565b606091505b5091509150816119ed576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118e7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611ac4612316565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611be557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611bd97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ccc816117fa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c9f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9c91810190612d1f565b60015b611ce5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611d41576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611cdc565b610c778383612371565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611dc6576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611e38573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190612cfd565b6003546001600160a01b0390811690831603611f7e576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f029190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611f6257600080fd5b505af1158015611f76573d6000803e3d6000fd5b505050505050565b600054610ccc906001600160a01b038481169116836121ed565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461194d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120286118f1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611b2e565b6003546001600160a01b03908116908316036121d1576120c46001600160a01b0383168430846123c7565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190612cfd565b506002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156121b457600080fd5b505af11580156121c8573d6000803e3d6000fd5b50505050505050565b600054610c77906001600160a01b0384811691869116846123c7565b6040516001600160a01b03838116602483015260448201839052610c7791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612400565b61194d61247c565b61227161247c565b61194d6124e3565b61228161247c565b61194d6124eb565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ccc576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611cdc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661194d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237a8261253c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156123bf57610c7782826125e4565b610ccc61265a565b6040516001600160a01b038481166024830152838116604483015260648201839052610a9e9186918216906323b872dd9060840161221a565b60006124156001600160a01b03841683612692565b9050805160001415801561243a5750808060200190518101906124389190612cfd565b155b15610c77576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611cdc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661194d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9861247c565b6124f361247c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b60000361258b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611cdc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516126019190612d48565b600060405180830381855af49150503d806000811461263c576040519150601f19603f3d011682016040523d82523d6000602084013e612641565b606091505b50915091506126518583836126a0565b95945050505050565b341561194d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606119f183836000612715565b6060826126b5576126b0826127cb565b6119f1565b81511580156126cc57506001600160a01b0384163b155b1561270e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611cdc565b50806119f1565b606081471015612753576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611cdc565b600080856001600160a01b0316848660405161276f9190612d48565b60006040518083038185875af1925050503d80600081146127ac576040519150601f19603f3d011682016040523d82523d6000602084013e6127b1565b606091505b50915091506127c18683836126a0565b9695505050505050565b8051156127db5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561281f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119f157600080fd5b80356001600160a01b038116811461286657600080fd5b919050565b60006020828403121561287d57600080fd5b6119f18261284f565b60008083601f84011261289857600080fd5b50813567ffffffffffffffff8111156128b057600080fd5b6020830191508360208285010111156128c857600080fd5b9250929050565b6000806000604084860312156128e457600080fd5b6128ed8461284f565b9250602084013567ffffffffffffffff81111561290957600080fd5b61291586828701612886565b9497909650939450505050565b60005b8381101561293d578181015183820152602001612925565b50506000910152565b6000815180845261295e816020860160208601612922565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119f16020830184612946565b6000602082840312156129b557600080fd5b5035919050565b600080604083850312156129cf57600080fd5b823591506129df6020840161284f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612a2a57600080fd5b612a338361284f565b9150602083013567ffffffffffffffff811115612a4f57600080fd5b8301601f81018513612a6057600080fd5b803567ffffffffffffffff811115612a7a57612a7a6129e8565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ae657612ae66129e8565b604052818152828201602001871015612afe57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612b3657600080fd5b612b3f8661284f565b9450612b4d6020870161284f565b935060408601359250606086013567ffffffffffffffff811115612b7057600080fd5b612b7c88828901612886565b969995985093965092949392505050565b600080600080600060808688031215612ba557600080fd5b612bae8661284f565b945060208601359350612bc36040870161284f565b9250606086013567ffffffffffffffff811115612b7057600080fd5b600080600060608486031215612bf457600080fd5b612bfd8461284f565b9250612c0b6020850161284f565b9150612c196040850161284f565b90509250925092565b600080600060608486031215612c3757600080fd5b612c408461284f565b925060208401359150612c196040850161284f565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612cb2602083018486612c55565b949350505050565b838152604060208201526000612651604083018486612c55565b8481526001600160a01b03841660208201526060604082015260006127c1606083018486612c55565b600060208284031215612d0f57600080fd5b815180151581146119f157600080fd5b600060208284031215612d3157600080fd5b5051919050565b8183823760009101908152919050565b60008251612d5a818460208701612922565b919091019291505056fea26469706673582212201821442f44389baeb888640e13de33662eed4aff4f3c0ea195d55f55d8f2920864736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612f486100fd60003960008181611d4a01528181611d7301526121420152612f486000f3fe6080604052600436106101e35760003560e01c80635c975abb11610102578063ae7a3a6f11610095578063dda79b7511610064578063dda79b751461062e578063e63ab1e91461064e578063f340fa0114610682578063f45346dc1461069557600080fd5b8063ae7a3a6f146105ae578063b8969bd4146105ce578063c0c53b8b146105ee578063d547741f1461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635c975abb146104175780635d62c8601461044e5780638456cb59146104825780638c6f037f1461049757600080fd5b806335c018db1161017a5780635131ab59116101495780635131ab59146103a257806352d1902d146103c257806357bec62f146103d75780635b112591146103f757600080fd5b806335c018db1461034757806336568abe1461035a5780633f4ba83a1461037a5780634f1ef2861461038f57600080fd5b806321e093b1116101b657806321e093b11461027f578063248a9ca3146102b757806329c59b5d146103145780632f2ff15d1461032757600080fd5b806301ffc9a7146101e857806310188aef1461021d5780631b8b921d1461023f5780631cff79cd1461025f575b600080fd5b3480156101f457600080fd5b506102086102033660046129bb565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612a19565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612a7d565b610842565b61027261026d366004612a7d565b6108cd565b6040516102149190612b3e565b34801561028b57600080fd5b5060035461029f906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102c357600080fd5b506103066102d2366004612b51565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b61023d610322366004612a7d565b610990565b34801561033357600080fd5b5061023d610342366004612b6a565b610ae3565b61023d610355366004612a7d565b610b2d565b34801561036657600080fd5b5061023d610375366004612b6a565b610d1c565b34801561038657600080fd5b5061023d610d68565b61023d61039d366004612bc5565b610d9d565b3480156103ae57600080fd5b5061023d6103bd366004612ccc565b610dbc565b3480156103ce57600080fd5b50610306611099565b3480156103e357600080fd5b5060025461029f906001600160a01b031681565b34801561040357600080fd5b5060015461029f906001600160a01b031681565b34801561042357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045a57600080fd5b506103067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561048e57600080fd5b5061023d6110c8565b3480156104a357600080fd5b5061023d6104b2366004612d3b565b6110fa565b3480156104c357600080fd5b506102086104d2366004612b6a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610306600081565b34801561053d57600080fd5b506103067f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612a19565b6111d0565b3480156105da57600080fd5b5061023d6105e9366004612ccc565b6112c4565b3480156105fa57600080fd5b5061023d610609366004612d8d565b61143d565b34801561061a57600080fd5b5061023d610629366004612b6a565b6116f2565b34801561063a57600080fd5b5060005461029f906001600160a01b031681565b34801561065a57600080fd5b506103067f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d610690366004612a19565b611736565b3480156106a157600080fd5b5061023d6106b0366004612dd0565b61188b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611946565b6002546001600160a01b03161561079c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611950565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611a3d565b610852611a9b565b826001600160a01b0316336001600160a01b03167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610897929190612e4c565b60405180910390a36108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6108f981611946565b610901611a3d565b610909611a9b565b6000610916868686611b42565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161095593929190612e68565b60405180910390a2915061098860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b610998611a3d565b6109a0611a9b565b346000036109da576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a27576040519150601f19603f3d011682016040523d82523d6000602084013e610a2c565b606091505b5050905080610a67576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a43460008787604051610ab19493929190612e82565b60405180910390a3506108c860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b1d81611946565b610b278383611950565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b5781611946565b610b5f611a3d565b610b67611a9b565b6001600160a01b038416610ba7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001600160a01b03163460405160006040518083038185875af1925050503d8060008114610bf4576040519150601f19603f3d011682016040523d82523d6000602084013e610bf9565b606091505b5050905080610c34576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b590610c7b9087908790600401612e4c565b600060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b50505050846001600160a01b03167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610cea93929190612e68565b60405180910390a250610b2760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381163314610d5e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c88282611beb565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d9281611946565b610d9a611caf565b50565b610da5611d3f565b610dae82611e0f565b610db88282611e1a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610de681611946565b610dee611a3d565b610df6611a9b565b83600003610e30576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e3a8686611f3e565b610e70576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190612eab565b610f32576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f3f868585611b42565b9050610f4b8787611f3e565b610f81576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038916906370a0823190602401602060405180830381865afa158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110059190612ecd565b90508015611017576110178882611fce565b866001600160a01b0316886001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738288888860405161105e93929190612e68565b60405180910390a3505061109160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006110a3612137565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6110f281611946565b610d9a612199565b611102611a3d565b61110a611a9b565b83600003611144576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114f338486612212565b846001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516111989493929190612e82565b60405180910390a36111c960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60006111db81611946565b6000546001600160a01b03161561121e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661125e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112887f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611950565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96112ee81611946565b6112f6611a3d565b6112fe611a9b565b83600003611338576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61134c6001600160a01b038716868661239b565b6040517f8fcaa0b50000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638fcaa0b5906113939086908690600401612e4c565b600060405180830381600087803b1580156113ad57600080fd5b505af11580156113c1573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda786868660405161140c93929190612e68565b60405180910390a361109160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156114885750825b905060008267ffffffffffffffff1660011480156114a55750303b155b9050811580156114b3575080155b156114ea576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561154b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061156857506001600160a01b038716155b1561159f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115a761240f565b6115af612417565b6115b761240f565b6115bf612427565b6115ca600087611950565b506115f57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611950565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556116537f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611950565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116e85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461172c81611946565b610b278383611beb565b61173e611a3d565b611746611a9b565b34600003611780576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146117cd576040519150601f19603f3d011682016040523d82523d6000602084013e6117d2565b606091505b505090508061180d576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051348152600060208201819052606082840181905282015290516001600160a01b0384169133917f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a49181900360800190a350610d9a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611893611a3d565b61189b611a9b565b816000036118d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e0338284612212565b826001600160a01b0316336001600160a01b03167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516108979291909182526001600160a01b0316602082015260606040820181905260009082015260800190565b610d9a8133612437565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611a33576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556119e93390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611a99576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611b16576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611b62929190612ee6565b60006040518083038185875af1925050503d8060008114611b9f576040519150601f19603f3d011682016040523d82523d6000602084013e611ba4565b606091505b509150915081611be0576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611a33576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b611cb76124c4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dd857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dcc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611a99576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610db881611946565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e92575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611e8f91810190612ecd565b60015b611ed8576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611f34576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611ecf565b6108c8838361251f565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be49190612eab565b6003546001600160a01b039081169083160361211d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190612eab565b6120aa576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561210957600080fd5b505af1158015611091573d6000803e3d6000fd5b600054610db8906001600160a01b0384811691168361239b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a99576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121a1611a3d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611d21565b6003546001600160a01b039081169083160361237f5761223d6001600160a01b038316843084612575565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156122a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cd9190612eab565b612303576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561236257600080fd5b505af1158015612376573d6000803e3d6000fd5b50505050505050565b6000546108c8906001600160a01b038481169186911684612575565b6040516001600160a01b038381166024830152604482018390526108c891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125ae565b611a9961262a565b61241f61262a565b611a99612691565b61242f61262a565b611a99612699565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610db8576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611ecf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611a99576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612528826126ea565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561256d576108c88282612792565b610db8612808565b6040516001600160a01b038481166024830152838116604483015260648201839052610b279186918216906323b872dd906084016123c8565b60006125c36001600160a01b03841683612840565b905080516000141580156125e85750808060200190518101906125e69190612eab565b155b156108c8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611ecf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611a99576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c61262a565b6126a161262a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612739576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611ecf565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127af9190612ef6565b600060405180830381855af49150503d80600081146127ea576040519150601f19603f3d011682016040523d82523d6000602084013e6127ef565b606091505b50915091506127ff85838361284e565b95945050505050565b3415611a99576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611be4838360006128c3565b6060826128635761285e82612979565b611be4565b815115801561287a57506001600160a01b0384163b155b156128bc576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611ecf565b5080611be4565b606081471015612901576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611ecf565b600080856001600160a01b0316848660405161291d9190612ef6565b60006040518083038185875af1925050503d806000811461295a576040519150601f19603f3d011682016040523d82523d6000602084013e61295f565b606091505b509150915061296f86838361284e565b9695505050505050565b8051156129895780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156129cd57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611be457600080fd5b80356001600160a01b0381168114612a1457600080fd5b919050565b600060208284031215612a2b57600080fd5b611be4826129fd565b60008083601f840112612a4657600080fd5b50813567ffffffffffffffff811115612a5e57600080fd5b602083019150836020828501011115612a7657600080fd5b9250929050565b600080600060408486031215612a9257600080fd5b612a9b846129fd565b9250602084013567ffffffffffffffff811115612ab757600080fd5b612ac386828701612a34565b9497909650939450505050565b60005b83811015612aeb578181015183820152602001612ad3565b50506000910152565b60008151808452612b0c816020860160208601612ad0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611be46020830184612af4565b600060208284031215612b6357600080fd5b5035919050565b60008060408385031215612b7d57600080fd5b82359150612b8d602084016129fd565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215612bd857600080fd5b612be1836129fd565b9150602083013567ffffffffffffffff811115612bfd57600080fd5b8301601f81018513612c0e57600080fd5b803567ffffffffffffffff811115612c2857612c28612b96565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612c9457612c94612b96565b604052818152828201602001871015612cac57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080600060808688031215612ce457600080fd5b612ced866129fd565b9450612cfb602087016129fd565b935060408601359250606086013567ffffffffffffffff811115612d1e57600080fd5b612d2a88828901612a34565b969995985093965092949392505050565b600080600080600060808688031215612d5357600080fd5b612d5c866129fd565b945060208601359350612d71604087016129fd565b9250606086013567ffffffffffffffff811115612d1e57600080fd5b600080600060608486031215612da257600080fd5b612dab846129fd565b9250612db9602085016129fd565b9150612dc7604085016129fd565b90509250925092565b600080600060608486031215612de557600080fd5b612dee846129fd565b925060208401359150612dc7604085016129fd565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612e60602083018486612e03565b949350505050565b8381526040602082015260006127ff604083018486612e03565b8481526001600160a01b038416602082015260606040820152600061296f606083018486612e03565b600060208284031215612ebd57600080fd5b81518015158114611be457600080fd5b600060208284031215612edf57600080fd5b5051919050565b8183823760009101908152919050565b60008251612f08818460208701612ad0565b919091019291505056fea26469706673582212208889b449de125bcd9995c2452115e4c4e941948f5ff17d068f0677c925a7730064736f6c634300081a0033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/GatewayZEVM__factory.ts b/v2/typechain-types/factories/GatewayZEVM__factory.ts index 20b23379..029f2900 100644 --- a/v2/typechain-types/factories/GatewayZEVM__factory.ts +++ b/v2/typechain-types/factories/GatewayZEVM__factory.ts @@ -430,12 +430,12 @@ const _abi = [ name: "initialize", inputs: [ { - name: "_zetaToken", + name: "zetaToken_", type: "address", internalType: "address", }, { - name: "_admin", + name: "admin_", type: "address", internalType: "address", }, @@ -1008,6 +1008,11 @@ const _abi = [ name: "ZRC20BurnFailed", inputs: [], }, + { + type: "error", + name: "ZRC20DepositFailed", + inputs: [], + }, { type: "error", name: "ZRC20TransferFailed", @@ -1021,7 +1026,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d416100fd60003960008181611e7201528181611e9b01526120530152612d416000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612531565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612647565b61078b565b34801561029657600080fd5b5061022e6102a5366004612703565b610884565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd36600461278f565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a3660046127a8565b6109d7565b34801561036b57600080fd5b5061022e61037a3660046127d8565b610a21565b34801561038b57600080fd5b5061022e61039a3660046127a8565b610afd565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610b49565b3480156103e857600080fd5b5061022e6103f7366004612876565b610b7e565b34801561040857600080fd5b5061022e610417366004612898565b610c61565b61022e61042a3660046128c6565b610ea3565b34801561043b57600080fd5b50610331610ebe565b34801561045057600080fd5b5061022e61045f3660046127d8565b610eed565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b6366004612916565b611086565b3480156104c757600080fd5b5061022e6104d636600461298b565b611105565b3480156104e757600080fd5b5061022e6104f63660046129c6565b611204565b34801561050757600080fd5b5061022e6112b6565b34801561051c57600080fd5b5061025561052b3660046127a8565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612a51565b3480156105ec57600080fd5b5061022e6105fb3660046127d8565b6112e8565b34801561060c57600080fd5b5061022e61061b3660046127d8565b61138a565b34801561062c57600080fd5b5061022e61063b3660046127a8565b611523565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612a64565b611567565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6107936116b2565b61079b610694565b60006107a78383611733565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190612a9b565b60405161084d959493929190612ab4565b60405180910390a35061087f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d9610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061090c57506001600160a01b03831630145b15610943576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094d8484611a26565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261099e928a921690899088908890600401612bd3565b600060405180830381600087803b1580156109b857600080fd5b505af11580156109cc573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a1181611bf4565b610a1b8383611bfe565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a6e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76610694565b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610ac39089908990899088908890600401612bd3565b600060405180830381600087803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610b3f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087f8282611ceb565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b7381611bf4565b610b7b611daf565b50565b610b866116b2565b610b8e610694565b610bac8273735b14bb79463307aacbed86daf3322b1e6226ab611a26565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610c2c936001600160a01b039091169189918190612ab4565b60405180910390a3610c5d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610cac5750825b905060008267ffffffffffffffff166001148015610cc95750303b155b905081158015610cd7575080155b15610d0e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610d6f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716610daf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db7611e3f565b610dbf611e3f565b610dc7611e47565b610dcf611e57565b610dda600087611bfe565b50610e057f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611bfe565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610e9a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610eab611e67565b610eb482611f37565b610c5d8282611f42565b6000610ec8612048565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f3a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f42610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f7557506001600160a01b03831630145b15610fac576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110389190612c1a565b506040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610ac39089908990899088908890600401612bd3565b61108e6116b2565b611096610694565b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516110d493929190612c3c565b60405180910390a3610a1b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61110d6116b2565b611115610694565b60006111218585611733565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b69190612a9b565b8a8a6040516111cb9796959493929190612c6c565b60405180910390a3506111fd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b61120c6116b2565b611214610694565b6112328473735b14bb79463307aacbed86daf3322b1e6226ab611a26565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052600080546110d4936001600160a01b03909116918b9181908b908b90612c6c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112e081611bf4565b610b7b6120aa565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611335576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61133d610694565b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610ac39089908990899088908890600401612bd3565b3373735b14bb79463307aacbed86daf3322b1e6226ab146113d7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113df610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061141257506001600160a01b03831630145b15611449576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af11580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190612c1a565b506040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610ac39089908990899088908890600401612bd3565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461155d81611bf4565b610a1b8383611ceb565b3373735b14bb79463307aacbed86daf3322b1e6226ab146115b4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115bc610694565b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab14806115ef57506001600160a01b03811630145b15611626576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af115801561168e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190612c1a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161172d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190612cc1565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af115801561181e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118429190612c1a565b611878576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af11580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190612c1a565b61193e576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af115801561199e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c29190612c1a565b6119f8576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba9190612c1a565b611af0576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114611bb4576040519150601f19603f3d011682016040523d82523d6000602084013e611bb9565b606091505b505090508061087f576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7b8133612123565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ce1576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611c973390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ce1576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b611db76121b0565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f061220b565b611e4f61220b565b6106f0612272565b611e5f61220b565b6106f06122c3565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f0057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ef47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5d81611bf4565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f9c575060408051601f3d908101601f19168201909252611f9991810190612a9b565b60015b611fe2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461203e576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611fd9565b61087f83836122cb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120b2610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611e21565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c5d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611fd9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61227a61220b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611a0061220b565b6122d482612321565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156123195761087f82826123c9565b610c5d61243f565b806001600160a01b03163b600003612370576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611fd9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516123e69190612cef565b600060405180830381855af49150503d8060008114612421576040519150601f19603f3d011682016040523d82523d6000602084013e612426565b606091505b5091509150612436858383612477565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261248c57612487826124ef565b6124e8565b81511580156124a357506001600160a01b0384163b155b156124e5576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611fd9565b50805b9392505050565b8051156124ff5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561254357600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146124e857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126125b357600080fd5b813567ffffffffffffffff8111156125cd576125cd612573565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff821117156125fd576125fd612573565b60405281815283820160200185101561261557600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610b7b57600080fd5b60008060006060848603121561265c57600080fd5b833567ffffffffffffffff81111561267357600080fd5b61267f868287016125a2565b93505060208401359150604084013561269781612632565b809150509250925092565b6000606082840312156126b457600080fd5b50919050565b60008083601f8401126126cc57600080fd5b50813567ffffffffffffffff8111156126e457600080fd5b6020830191508360208285010111156126fc57600080fd5b9250929050565b60008060008060006080868803121561271b57600080fd5b853567ffffffffffffffff81111561273257600080fd5b61273e888289016126a2565b95505060208601359350604086013561275681612632565b9250606086013567ffffffffffffffff81111561277257600080fd5b61277e888289016126ba565b969995985093965092949392505050565b6000602082840312156127a157600080fd5b5035919050565b600080604083850312156127bb57600080fd5b8235915060208301356127cd81612632565b809150509250929050565b60008060008060008060a087890312156127f157600080fd5b863567ffffffffffffffff81111561280857600080fd5b61281489828a016126a2565b965050602087013561282581612632565b945060408701359350606087013561283c81612632565b9250608087013567ffffffffffffffff81111561285857600080fd5b61286489828a016126ba565b979a9699509497509295939492505050565b6000806040838503121561288957600080fd5b50508035926020909101359150565b600080604083850312156128ab57600080fd5b82356128b681612632565b915060208301356127cd81612632565b600080604083850312156128d957600080fd5b82356128e481612632565b9150602083013567ffffffffffffffff81111561290057600080fd5b61290c858286016125a2565b9150509250929050565b6000806000806060858703121561292c57600080fd5b843567ffffffffffffffff81111561294357600080fd5b61294f878288016125a2565b94505060208501359250604085013567ffffffffffffffff81111561297357600080fd5b61297f878288016126ba565b95989497509550505050565b6000806000806000608086880312156129a357600080fd5b853567ffffffffffffffff8111156129ba57600080fd5b61273e888289016125a2565b600080600080606085870312156129dc57600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561297357600080fd5b60005b83811015612a1c578181015183820152602001612a04565b50506000910152565b60008151808452612a3d816020860160208601612a01565b601f01601f19169290920160200192915050565b6020815260006124e86020830184612a25565b600080600060608486031215612a7957600080fd5b8335612a8481612632565b925060208401359150604084013561269781612632565b600060208284031215612aad57600080fd5b5051919050565b60c081526000612ac760c0830188612a25565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112612b6457600080fd5b820160208101903567ffffffffffffffff811115612b8157600080fd5b803603821315612b9057600080fd5b60608552612ba2606086018284612b05565b9150506020830135612bb381612632565b6001600160a01b0316602085015260409283013592909301919091525090565b608081526000612be66080830188612b30565b6001600160a01b03871660208401528560408401528281036060840152612c0e818587612b05565b98975050505050505050565b600060208284031215612c2c57600080fd5b815180151581146124e857600080fd5b604081526000612c4f6040830186612a25565b8281036020840152612c62818587612b05565b9695505050505050565b60c081526000612c7f60c083018a612a25565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a0840152612cb3818587612b05565b9a9950505050505050505050565b60008060408385031215612cd457600080fd5b8251612cdf81612632565b6020939093015192949293505050565b60008251612d01818460208701612a01565b919091019291505056fea2646970667358221220a674352ad8eda2675de3e0d97b91ed3fa3da4cd5c58000ddb3dbd7fc65105db464736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d476100fd60003960008181611e7801528181611ea101526120590152612d476000f3fe6080604052600436106101bb5760003560e01c80635af65967116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637993c1e0116100c65780637993c1e0146104bb57806380bd3d03146104db5780638456cb59146104fb57806391d148541461051057600080fd5b80635af65967146104445780635c975abb146104645780635d40e1781461049b57600080fd5b806336568abe11610159578063441a3e7011610133578063441a3e70146103dc578063485cc955146103fc5780634f1ef2861461041c57806352d1902d1461042f57600080fd5b806336568abe1461037f5780633ce4a5bc1461039f5780633f4ba83a146103c757600080fd5b806321e093b11161019557806321e093b1146102aa578063248a9ca3146102e25780632f2ff15d1461033f578063309f50041461035f57600080fd5b806301ffc9a714610235578063135390f91461026a57806321501a951461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612537565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e61028536600461264d565b61078b565b34801561029657600080fd5b5061022e6102a5366004612709565b610884565b3480156102b657600080fd5b506000546102ca906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102ee57600080fd5b506103316102fd366004612795565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561034b57600080fd5b5061022e61035a3660046127ae565b6109d7565b34801561036b57600080fd5b5061022e61037a3660046127de565b610a21565b34801561038b57600080fd5b5061022e61039a3660046127ae565b610afd565b3480156103ab57600080fd5b506102ca73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d357600080fd5b5061022e610b49565b3480156103e857600080fd5b5061022e6103f736600461287c565b610b7e565b34801561040857600080fd5b5061022e61041736600461289e565b610c61565b61022e61042a3660046128cc565b610ea3565b34801561043b57600080fd5b50610331610ebe565b34801561045057600080fd5b5061022e61045f3660046127de565b610eed565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b636600461291c565b61106e565b3480156104c757600080fd5b5061022e6104d6366004612991565b6110ed565b3480156104e757600080fd5b5061022e6104f63660046129cc565b6111ec565b34801561050757600080fd5b5061022e61129e565b34801561051c57600080fd5b5061025561052b3660046127ae565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058157600080fd5b50610331600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190612a57565b3480156105ec57600080fd5b5061022e6105fb3660046127de565b6112d0565b34801561060c57600080fd5b5061022e61061b3660046127de565b611372565b34801561062c57600080fd5b5061022e61063b3660046127ae565b6114f3565b34801561064c57600080fd5b506103317f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004612a6a565b611537565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6107936116b8565b61079b610694565b60006107a78383611739565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b586858786886001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190612aa1565b60405161084d959493929190612aba565b60405180910390a35061087f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d9610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab148061090c57506001600160a01b03831630145b15610943576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094d8484611a2c565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e9261099e928a921690899088908890600401612bd9565b600060405180830381600087803b1580156109b857600080fd5b505af11580156109cc573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a1181611bfa565b610a1b8383611c04565b50505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a6e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a76610694565b6040517f69582bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906369582bee90610ac39089908990899088908890600401612bd9565b600060405180830381600087803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b0381163314610b3f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087f8282611cf1565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b7381611bfa565b610b7b611db5565b50565b610b866116b8565b610b8e610694565b610bac8273735b14bb79463307aacbed86daf3322b1e6226ab611a2c565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152819033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f198184030181529082905260008054610c2c936001600160a01b039091169189918190612aba565b60405180910390a3610c5d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610cac5750825b905060008267ffffffffffffffff166001148015610cc95750303b155b905081158015610cd7575080155b15610d0e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610d6f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716610daf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db7611e45565b610dbf611e45565b610dc7611e4d565b610dcf611e5d565b610dda600087611c04565b50610e057f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611c04565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610e9a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610eab611e6d565b610eb482611f3d565b610c5d8282611f48565b6000610ec861204e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610f3a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f42610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f7557506001600160a01b03831630145b15610fac576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110389190612c20565b610a76576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110766116b8565b61107e610694565b82336001600160a01b03167f5322ffbbf9261ff1f8138247942d2b03b28717141ef0a0dd080fc4be9c4e78d38685856040516110bc93929190612c42565b60405180910390a3610a1b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110f56116b8565b6110fd610694565b60006111098585611739565b90506000336001600160a01b03167fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b5888789868a6001600160a01b031663fa62d57f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190612aa1565b8a8a6040516111b39796959493929190612c72565b60405180910390a3506111e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6111f46116b8565b6111fc610694565b61121a8473735b14bb79463307aacbed86daf3322b1e6226ab611a2c565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab0000000000000000000000006020820152839033907fde19dbe881cc0aeeb6e73ce19ac7b5ca695e6be8a076e3eb42292005a7fec1b59060340160408051601f1981840301815290829052600080546110bc936001600160a01b03909116918b9181908b908b90612c72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112c881611bfa565b610b7b6120b0565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461131d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611325610694565b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90610ac39089908990899088908890600401612bd9565b3373735b14bb79463307aacbed86daf3322b1e6226ab146113bf576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113c7610694565b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806113fa57506001600160a01b03831630145b15611431576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190612c20565b611325576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461152d81611bfa565b610a1b8383611cf1565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611584576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158c610694565b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab14806115bf57506001600160a01b03811630145b156115f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af115801561165e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116829190612c20565b61087f576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611733576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000836001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa15801561177b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179f9190612cc7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190612c20565b61187e576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af11580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e9190612c20565b611944576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b038516906342966c68906024016020604051808303816000875af11580156119a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c89190612c20565b6119fe576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac09190612c20565b611af6576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114611bba576040519150601f19603f3d011682016040523d82523d6000602084013e611bbf565b606091505b505090508061087f576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7b8133612129565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611ce7576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611c9d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611ce7576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b611dbd6121b6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612211565b611e55612211565b6106f0612278565b611e65612211565b6106f06122c9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f0657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611efa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5d81611bfa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611fa2575060408051601f3d908101601f19168201909252611f9f91810190612aa1565b60015b611fe8576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612044576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611fdf565b61087f83836122d1565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120b8610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611e27565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c5d576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611fdf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612280612211565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b611a06612211565b6122da82612327565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561231f5761087f82826123cf565b610c5d612445565b806001600160a01b03163b600003612376576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611fdf565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516123ec9190612cf5565b600060405180830381855af49150503d8060008114612427576040519150601f19603f3d011682016040523d82523d6000602084013e61242c565b606091505b509150915061243c85838361247d565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826124925761248d826124f5565b6124ee565b81511580156124a957506001600160a01b0384163b155b156124eb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611fdf565b50805b9392505050565b8051156125055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561254957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146124ee57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126125b957600080fd5b813567ffffffffffffffff8111156125d3576125d3612579565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff8211171561260357612603612579565b60405281815283820160200185101561261b57600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610b7b57600080fd5b60008060006060848603121561266257600080fd5b833567ffffffffffffffff81111561267957600080fd5b612685868287016125a8565b93505060208401359150604084013561269d81612638565b809150509250925092565b6000606082840312156126ba57600080fd5b50919050565b60008083601f8401126126d257600080fd5b50813567ffffffffffffffff8111156126ea57600080fd5b60208301915083602082850101111561270257600080fd5b9250929050565b60008060008060006080868803121561272157600080fd5b853567ffffffffffffffff81111561273857600080fd5b612744888289016126a8565b95505060208601359350604086013561275c81612638565b9250606086013567ffffffffffffffff81111561277857600080fd5b612784888289016126c0565b969995985093965092949392505050565b6000602082840312156127a757600080fd5b5035919050565b600080604083850312156127c157600080fd5b8235915060208301356127d381612638565b809150509250929050565b60008060008060008060a087890312156127f757600080fd5b863567ffffffffffffffff81111561280e57600080fd5b61281a89828a016126a8565b965050602087013561282b81612638565b945060408701359350606087013561284281612638565b9250608087013567ffffffffffffffff81111561285e57600080fd5b61286a89828a016126c0565b979a9699509497509295939492505050565b6000806040838503121561288f57600080fd5b50508035926020909101359150565b600080604083850312156128b157600080fd5b82356128bc81612638565b915060208301356127d381612638565b600080604083850312156128df57600080fd5b82356128ea81612638565b9150602083013567ffffffffffffffff81111561290657600080fd5b612912858286016125a8565b9150509250929050565b6000806000806060858703121561293257600080fd5b843567ffffffffffffffff81111561294957600080fd5b612955878288016125a8565b94505060208501359250604085013567ffffffffffffffff81111561297957600080fd5b612985878288016126c0565b95989497509550505050565b6000806000806000608086880312156129a957600080fd5b853567ffffffffffffffff8111156129c057600080fd5b612744888289016125a8565b600080600080606085870312156129e257600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561297957600080fd5b60005b83811015612a22578181015183820152602001612a0a565b50506000910152565b60008151808452612a43816020860160208601612a07565b601f01601f19169290920160200192915050565b6020815260006124ee6020830184612a2b565b600080600060608486031215612a7f57600080fd5b8335612a8a81612638565b925060208401359150604084013561269d81612638565b600060208284031215612ab357600080fd5b5051919050565b60c081526000612acd60c0830188612a2b565b6001600160a01b038716602084015285604084015284606084015283608084015282810360a084015260008152602081019150509695505050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b600081357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112612b6a57600080fd5b820160208101903567ffffffffffffffff811115612b8757600080fd5b803603821315612b9657600080fd5b60608552612ba8606086018284612b0b565b9150506020830135612bb981612638565b6001600160a01b0316602085015260409283013592909301919091525090565b608081526000612bec6080830188612b36565b6001600160a01b03871660208401528560408401528281036060840152612c14818587612b0b565b98975050505050505050565b600060208284031215612c3257600080fd5b815180151581146124ee57600080fd5b604081526000612c556040830186612a2b565b8281036020840152612c68818587612b0b565b9695505050505050565b60c081526000612c8560c083018a612a2b565b6001600160a01b038916602084015287604084015286606084015285608084015282810360a0840152612cb9818587612b0b565b9a9950505050505050505050565b60008060408385031215612cda57600080fd5b8251612ce581612638565b6020939093015192949293505050565b60008251612d07818460208701612a07565b919091019291505056fea2646970667358221220d80062e0540ac38d4b4690f67eb67f6597352e50aa6a7cdb180a197da643c76164736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts b/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts index 46d1bca3..f1627cbb 100644 --- a/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts +++ b/v2/typechain-types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts @@ -9,6 +9,106 @@ import type { } from "../../IGatewayEVM.sol/IGatewayEVM"; const _abi = [ + { + type: "function", + name: "call", + inputs: [ + { + name: "receiver", + type: "address", + internalType: "address", + }, + { + name: "payload", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "deposit", + inputs: [ + { + name: "receiver", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "payable", + }, + { + type: "function", + name: "deposit", + inputs: [ + { + name: "receiver", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "asset", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "depositAndCall", + inputs: [ + { + name: "receiver", + type: "address", + internalType: "address", + }, + { + name: "payload", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, + { + type: "function", + name: "depositAndCall", + inputs: [ + { + name: "receiver", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "asset", + type: "address", + internalType: "address", + }, + { + name: "payload", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "execute", @@ -33,6 +133,24 @@ const _abi = [ ], stateMutability: "payable", }, + { + type: "function", + name: "executeRevert", + inputs: [ + { + name: "destination", + type: "address", + internalType: "address", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "payable", + }, { type: "function", name: "executeWithERC20", diff --git a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts index 28a247d5..9411fb85 100644 --- a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts +++ b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts @@ -49,6 +49,11 @@ const _abi = [ name: "ZRC20BurnFailed", inputs: [], }, + { + type: "error", + name: "ZRC20DepositFailed", + inputs: [], + }, { type: "error", name: "ZRC20TransferFailed", diff --git a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts index a335659a..955b4e4e 100644 --- a/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts +++ b/v2/typechain-types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts @@ -55,6 +55,51 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "depositAndCall", + inputs: [ + { + name: "context", + type: "tuple", + internalType: "struct zContext", + components: [ + { + name: "origin", + type: "bytes", + internalType: "bytes", + }, + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "chainID", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "depositAndCall", @@ -105,6 +150,56 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "depositAndRevert", + inputs: [ + { + name: "context", + type: "tuple", + internalType: "struct revertContext", + components: [ + { + name: "origin", + type: "bytes", + internalType: "bytes", + }, + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "chainID", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "zrc20", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "execute", @@ -155,6 +250,56 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "executeRevert", + inputs: [ + { + name: "context", + type: "tuple", + internalType: "struct revertContext", + components: [ + { + name: "origin", + type: "bytes", + internalType: "bytes", + }, + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "chainID", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "zrc20", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "message", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "withdraw", diff --git a/v2/typechain-types/factories/SenderZEVM__factory.ts b/v2/typechain-types/factories/SenderZEVM__factory.ts index b9792ecf..70549204 100644 --- a/v2/typechain-types/factories/SenderZEVM__factory.ts +++ b/v2/typechain-types/factories/SenderZEVM__factory.ts @@ -120,7 +120,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea264697066735822122011f5a132ec30e33aab727a8c0099e5989394033720d9fda5b9669b838309363564736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b5060405161080c38038061080c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61077f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b578063865b36f6146100a4575b600080fd5b6100596100543660046104c4565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b236600461057f565b6102af565b60008383836040516024016100ce93929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810189905291925086169063095ea7b3906044016020604051808303816000875af11580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e2919061069e565b610218576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f7993c1e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637993c1e090610274908a908a908a9087906004016106c2565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008383836040516024016102c693929190610674565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490517f5d40e17800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690635d40e1789061039690899089908690600401610714565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b50505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261041057600080fd5b81356020830160008067ffffffffffffffff841115610431576104316103d0565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff8211171561047e5761047e6103d0565b60405283815290508082840187101561049657600080fd5b838360208301376000602085830101528094505050505092915050565b80151581146104c157600080fd5b50565b60008060008060008060c087890312156104dd57600080fd5b863567ffffffffffffffff8111156104f457600080fd5b61050089828a016103ff565b96505060208701359450604087013573ffffffffffffffffffffffffffffffffffffffff8116811461053157600080fd5b9350606087013567ffffffffffffffff81111561054d57600080fd5b61055989828a016103ff565b9350506080870135915060a0870135610571816104b3565b809150509295509295509295565b600080600080600060a0868803121561059757600080fd5b853567ffffffffffffffff8111156105ae57600080fd5b6105ba888289016103ff565b95505060208601359350604086013567ffffffffffffffff8111156105de57600080fd5b6105ea888289016103ff565b935050606086013591506080860135610602816104b3565b809150509295509295909350565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006106876060830186610610565b602083019490945250901515604090910152919050565b6000602082840312156106b057600080fd5b81516106bb816104b3565b9392505050565b6080815260006106d56080830187610610565b85602084015273ffffffffffffffffffffffffffffffffffffffff8516604084015282810360608401526107098185610610565b979650505050505050565b6060815260006107276060830186610610565b846020840152828103604084015261073f8185610610565b969550505050505056fea264697066735822122077d23238a2e7d47c8bbeab590e5478444c1217f3c032da9d8971c2c3fc1625ce64736f6c634300081a0033"; type SenderZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ZRC20.sol/ZRC20__factory.ts b/v2/typechain-types/factories/ZRC20.sol/ZRC20__factory.ts index 8656717f..8bd35965 100644 --- a/v2/typechain-types/factories/ZRC20.sol/ZRC20__factory.ts +++ b/v2/typechain-types/factories/ZRC20.sol/ZRC20__factory.ts @@ -671,7 +671,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b50604051611ac2380380611ac283398101604081905261002f916101db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600761006f898261032d565b50600861007c888261032d565b506009805460ff191660ff881617905560808590528360028111156100a3576100a36103eb565b60a08160028111156100b7576100b76103eb565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104019350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261011e57600080fd5b81516001600160401b03811115610137576101376100f7565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610165576101656100f7565b60405281815283820160200185101561017d57600080fd5b60005b8281101561019c57602081860181015183830182015201610180565b506000918101602001919091529392505050565b8051600381106101bf57600080fd5b919050565b80516001600160a01b03811681146101bf57600080fd5b600080600080600080600080610100898b0312156101f857600080fd5b88516001600160401b0381111561020e57600080fd5b61021a8b828c0161010d565b60208b015190995090506001600160401b0381111561023857600080fd5b6102448b828c0161010d565b975050604089015160ff8116811461025b57600080fd5b60608a0151909650945061027160808a016101b0565b60a08a0151909450925061028760c08a016101c4565b915061029560e08a016101c4565b90509295985092959890939650565b600181811c908216806102b857607f821691505b6020821081036102d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561032857806000526020600020601f840160051c810160208510156103055750805b601f840160051c820191505b818110156103255760008155600101610311565b50505b505050565b81516001600160401b03811115610346576103466100f7565b61035a8161035484546102a4565b846102de565b6020601f82116001811461038e57600083156103765750848201515b600019600385901b1c1916600184901b178455610325565b600084815260208120601f198516915b828110156103be578785015182556020948501946001909201910161039e565b50848210156103dc5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05161168e61043460003960006103280152600081816102d901528181610a1d0152610b23015261168e6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b714610432578063f687d12a1461043b578063fa62d57f1461044e57600080fd5b8063d9eeebed146103a5578063dd62ed3e146103d9578063eddeb1231461041f57600080fd5b8063c7012626116100bd578063c70126261461036a578063c835d7cc1461037d578063ccc775991461039257600080fd5b806395d89b411461031b578063a3413d0314610323578063a9059cbb1461035757600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a082311461029e57806385e1f4d0146102d45780638b851b95146102fb57600080fd5b80633ce4a5bc1461025d57806342966c681461027857806347e7ef241461028b57600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610457565b6040516101b2919061126d565b60405180910390f35b6101ce6101c93660046112ac565b6104e9565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe3660046112d8565b610500565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60095460405160ff90911681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce610286366004611319565b610597565b6101ce6102993660046112ac565b6105ab565b6101e26102ac366004611332565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a56106ff565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b2919061134f565b6101ce6103653660046112ac565b61070e565b6101ce6103783660046113bf565b61071b565b61039061038b366004611332565b61086a565b005b6103906103a0366004611332565b610931565b6103ad6109f1565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e26103e73660046114b7565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b61039061042d366004611319565b610c0f565b6101e260025481565b610390610449366004611319565b610c91565b6101e260035481565b606060078054610466906114f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610492906114f0565b80156104df5780601f106104b4576101008083540402835291602001916104df565b820191906000526020600020905b8154815290600101906020018083116104c257829003601f168201915b5050505050905090565b60006104f6338484610d13565b5060015b92915050565b600061050d848484610e1c565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610578576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61058c85336105878685611572565b610d13565b506001949350505050565b60006105a33383610fd7565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab148015906105e9575060005473ffffffffffffffffffffffffffffffffffffffff163314155b801561060d575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610644576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61064e8383611119565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526106ee918690611585565b60405180910390a250600192915050565b606060088054610466906114f0565b60006104f6338484610e1c565b60008060006107286109f1565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de91906115a7565b610814576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081e3385610fd7565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d95591610857918991899187916115c9565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108b7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461097e576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610926565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa891906115f8565b905073ffffffffffffffffffffffffffffffffffffffff8116610af7576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa9190611615565b905080600003610be6576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610bf9919061162e565b610c039190611645565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610c5c576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610926565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cde576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610926565b73ffffffffffffffffffffffffffffffffffffffff8316610d60576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610dad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e69576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610eb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610f16576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f208282611572565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600460205260408082209390935590851681529081208054849290610f63908490611645565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fc991815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611024576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205481811015611084576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61108e8282611572565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040812091909155600680548492906110c9908490611572565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e0f565b73ffffffffffffffffffffffffffffffffffffffff8216611166576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546111789190611645565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906111b2908490611645565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561122f57602081850181015186830182015201611213565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006112806020830184611209565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112a957600080fd5b50565b600080604083850312156112bf57600080fd5b82356112ca81611287565b946020939093013593505050565b6000806000606084860312156112ed57600080fd5b83356112f881611287565b9250602084013561130881611287565b929592945050506040919091013590565b60006020828403121561132b57600080fd5b5035919050565b60006020828403121561134457600080fd5b813561128081611287565b602081016003831061138a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113d257600080fd5b823567ffffffffffffffff8111156113e957600080fd5b8301601f810185136113fa57600080fd5b803567ffffffffffffffff81111561141457611414611390565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561148057611480611390565b60405281815282820160200187101561149857600080fd5b8160208401602083013760006020928201830152969401359450505050565b600080604083850312156114ca57600080fd5b82356114d581611287565b915060208301356114e581611287565b809150509250929050565b600181811c9082168061150457607f821691505b60208210810361153d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104fa576104fa611543565b6040815260006115986040830185611209565b90508260208301529392505050565b6000602082840312156115b957600080fd5b8151801515811461128057600080fd5b6080815260006115dc6080830187611209565b6020830195909552506040810192909252606090910152919050565b60006020828403121561160a57600080fd5b815161128081611287565b60006020828403121561162757600080fd5b5051919050565b80820281158282048414176104fa576104fa611543565b808201808211156104fa576104fa61154356fea2646970667358221220ff62fd4bd87c4bd8cb6b710eb3bc879bf82b272805bab80a5c462f9aee4e937164736f6c634300081a0033"; + "0x60e060405234801561001057600080fd5b50604051611bb5380380611bb583398101604081905261002f9161020e565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60076100aa8982610360565b5060086100b78882610360565b5060ff861660c05260808590528360028111156100d6576100d661041e565b60a08160028111156100ea576100ea61041e565b905250600292909255600080546001600160a01b039283166001600160a01b03199182161790915560018054929093169116179055506104349350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261015157600080fd5b81516001600160401b0381111561016a5761016a61012a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101985761019861012a565b6040528181528382016020018510156101b057600080fd5b60005b828110156101cf576020818601810151838301820152016101b3565b506000918101602001919091529392505050565b8051600381106101f257600080fd5b919050565b80516001600160a01b03811681146101f257600080fd5b600080600080600080600080610100898b03121561022b57600080fd5b88516001600160401b0381111561024157600080fd5b61024d8b828c01610140565b60208b015190995090506001600160401b0381111561026b57600080fd5b6102778b828c01610140565b975050604089015160ff8116811461028e57600080fd5b60608a015190965094506102a460808a016101e3565b60a08a015190945092506102ba60c08a016101f7565b91506102c860e08a016101f7565b90509295985092959890939650565b600181811c908216806102eb57607f821691505b60208210810361030b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561035b57806000526020600020601f840160051c810160208510156103385750805b601f840160051c820191505b818110156103585760008155600101610344565b50505b505050565b81516001600160401b038111156103795761037961012a565b61038d8161038784546102d7565b84610311565b6020601f8211600181146103c157600083156103a95750848201515b600019600385901b1c1916600184901b178455610358565b600084815260208120601f198516915b828110156103f157878501518255602094850194600190920191016103d1565b508482101561040f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c051611744610471600039600061024f015260006103440152600081816102f501528181610ad30152610bd901526117446000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063d9eeebed1161008c578063f68016b711610066578063f68016b71461044e578063f687d12a14610457578063fa62d57f1461046a57600080fd5b8063d9eeebed146103c1578063dd62ed3e146103f5578063eddeb1231461043b57600080fd5b8063c7012626116100bd578063c701262614610386578063c835d7cc14610399578063ccc77599146103ae57600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc1161014557806370a082311161011f57806370a08231146102ba57806385e1f4d0146102f05780638b851b951461031757600080fd5b80633ce4a5bc1461027957806342966c681461029457806347e7ef24146102a757600080fd5b806323b872dd1161017657806323b872dd146101f0578063249f469714610203578063313ce5671461024857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a5610473565b6040516101b29190611323565b60405180910390f35b6101ce6101c9366004611362565b610505565b60405190151581526020016101b2565b6006545b6040519081526020016101b2565b6101ce6101fe36600461138e565b61051c565b6000546102239073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101b2565b61022373735b14bb79463307aacbed86daf3322b1e6226ab81565b6101ce6102a23660046113cf565b6105b3565b6101ce6102b5366004611362565b6105c7565b6101e26102c83660046113e8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6101e27f000000000000000000000000000000000000000000000000000000000000000081565b6001546102239073ffffffffffffffffffffffffffffffffffffffff1681565b6101a561071b565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b29190611405565b6101ce610381366004611362565b61072a565b6101ce610394366004611475565b610737565b6103ac6103a73660046113e8565b610886565b005b6103ac6103bc3660046113e8565b61099a565b6103c9610aa7565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101b2565b6101e261040336600461156d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b6103ac6104493660046113cf565b610cc5565b6101e260025481565b6103ac6104653660046113cf565b610d47565b6101e260035481565b606060078054610482906115a6565b80601f01602080910402602001604051908101604052809291908181526020018280546104ae906115a6565b80156104fb5780601f106104d0576101008083540402835291602001916104fb565b820191906000526020600020905b8154815290600101906020018083116104de57829003601f168201915b5050505050905090565b6000610512338484610dc9565b5060015b92915050565b6000610529848484610ed2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832033845290915290205482811015610594576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105a885336105a38685611628565b610dc9565b506001949350505050565b60006105bf338361108d565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab14801590610605575060005473ffffffffffffffffffffffffffffffffffffffff163314155b8015610629575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610660576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066a83836111cf565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261070a91869061163b565b60405180910390a250600192915050565b606060088054610482906115a6565b6000610512338484610ed2565b6000806000610744610aa7565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa919061165d565b610830576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083a338561108d565b60035460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955916108739189918991879161167f565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146108d3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610920576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109e7576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a34576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a3879060200161098f565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5e91906116ae565b905073ffffffffffffffffffffffffffffffffffffffff8116610bad576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6091906116cb565b905080600003610c9c576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610caf91906116e4565b610cb991906116fb565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d12576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f9060200161098f565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610d94576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a9060200161098f565b73ffffffffffffffffffffffffffffffffffffffff8316610e16576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610e63576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f1f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f6c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205481811015610fcc576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd68282611628565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526004602052604080822093909355908516815290812080548492906110199084906116fb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161107f91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166110da576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020548181101561113a576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111448282611628565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120919091556006805484929061117f908490611628565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ec5565b73ffffffffffffffffffffffffffffffffffffffff821661121c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806006600082825461122e91906116fb565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906112689084906116fb565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b818110156112e5576020818501810151868301820152016112c9565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061133660208301846112bf565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461135f57600080fd5b50565b6000806040838503121561137557600080fd5b82356113808161133d565b946020939093013593505050565b6000806000606084860312156113a357600080fd5b83356113ae8161133d565b925060208401356113be8161133d565b929592945050506040919091013590565b6000602082840312156113e157600080fd5b5035919050565b6000602082840312156113fa57600080fd5b81356113368161133d565b6020810160038310611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561148857600080fd5b823567ffffffffffffffff81111561149f57600080fd5b8301601f810185136114b057600080fd5b803567ffffffffffffffff8111156114ca576114ca611446565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561153657611536611446565b60405281815282820160200187101561154e57600080fd5b8160208401602083013760006020928201830152969401359450505050565b6000806040838503121561158057600080fd5b823561158b8161133d565b9150602083013561159b8161133d565b809150509250929050565b600181811c908216806115ba57607f821691505b6020821081036115f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610516576105166115f9565b60408152600061164e60408301856112bf565b90508260208301529392505050565b60006020828403121561166f57600080fd5b8151801515811461133657600080fd5b60808152600061169260808301876112bf565b6020830195909552506040810192909252606090910152919050565b6000602082840312156116c057600080fd5b81516113368161133d565b6000602082840312156116dd57600080fd5b5051919050565b8082028115828204841417610516576105166115f9565b80820180821115610516576105166115f956fea264697066735822122037649c2055bfb791d5356fcc351c4af595c644cc42f4d0379388cd4eda6b0fd864736f6c634300081a0033"; type ZRC20ConstructorParams = | [signer?: Signer] diff --git a/v2/typechain-types/factories/ZetaConnectorBase__factory.ts b/v2/typechain-types/factories/ZetaConnectorBase__factory.ts index addcb7b2..c79b6ca4 100644 --- a/v2/typechain-types/factories/ZetaConnectorBase__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorBase__factory.ts @@ -210,19 +210,6 @@ const _abi = [ ], stateMutability: "view", }, - { - type: "function", - name: "tssAddress", - inputs: [], - outputs: [ - { - name: "", - type: "address", - internalType: "address", - }, - ], - stateMutability: "view", - }, { type: "function", name: "unpause", diff --git a/v2/typechain-types/factories/ZetaConnectorNative__factory.ts b/v2/typechain-types/factories/ZetaConnectorNative__factory.ts index ce7b5485..8c297454 100644 --- a/v2/typechain-types/factories/ZetaConnectorNative__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorNative__factory.ts @@ -24,22 +24,22 @@ const _abi = [ type: "constructor", inputs: [ { - name: "_gateway", + name: "gateway_", type: "address", internalType: "address", }, { - name: "_zetaToken", + name: "zetaToken_", type: "address", internalType: "address", }, { - name: "_tssAddress", + name: "tssAddress_", type: "address", internalType: "address", }, { - name: "_admin", + name: "admin_", type: "address", internalType: "address", }, @@ -247,19 +247,6 @@ const _abi = [ ], stateMutability: "view", }, - { - type: "function", - name: "tssAddress", - inputs: [], - outputs: [ - { - name: "", - type: "address", - internalType: "address", - }, - ], - stateMutability: "view", - }, { type: "function", name: "unpause", @@ -611,7 +598,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b5060405161163738038061163783398101604081905261002f916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b1561008f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516113836102b4600039600081816101f70152818161046d0152818161051e01528181610638015281816107cc0152818161087d015261094b0152600081816101ab0152818161048f015281816104f1015281816107ee015261085001526113836000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635b112591116100cd57806385f438c111610081578063a217fddf11610066578063a217fddf1461033e578063d547741f14610346578063e63ab1e91461035957600080fd5b806385f438c1146102d157806391d14854146102f857600080fd5b80635e3e9fef116100b25780635e3e9fef146102a3578063743e0c9b146102b65780638456cb59146102c957600080fd5b80635b112591146102785780635c975abb1461029857600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a71461015657806302d5c8991461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110be565b610380565b60405190151581526020015b60405180910390f35b61019161018c366004611129565b610419565b005b6101916101a13660046111bb565b6105e4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c6102273660046111ee565b60009081526002602052604090206001015490565b604051908152602001610175565b610191610258366004611207565b6106bf565b61019161026b366004611207565b6106ea565b610191610743565b6003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff16610169565b6101916102b1366004611129565b610778565b6101916102c43660046111ee565b610929565b610191610973565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610169610306366004611207565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b610191610354366004611207565b6109a5565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104216109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461044b81610a0d565b610453610a17565b6104b473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd49061054e907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b15801561056857600080fd5b505af115801561057c573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8686866040516105ca939291906112d9565b60405180910390a2506105dd6001600055565b5050505050565b6105ec6109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461061681610a0d565b61061e610a17565b61065f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a56565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040516106a791815260200190565b60405180910390a2506106ba6001600055565b505050565b6000828152600260205260409020600101546106da81610a0d565b6106e48383610ad7565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610739576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ba8282610bd7565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61076d81610a0d565b610775610c96565b50565b6107806109ca565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107aa81610a0d565b6107b2610a17565b61081373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a56565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108ad907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161127c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8686866040516105ca939291906112d9565b610931610a17565b61077573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d13565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099d81610a0d565b610775610d59565b6000828152600260205260409020600101546109c081610a0d565b6106e48383610bd7565b600260005403610a06576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107758133610db2565b60015460ff1615610a54576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106ba91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e43565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b6d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610413565b506000610413565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bcf57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610413565b610c9e610ed9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106e49186918216906323b872dd90608401610a90565b610d61610a17565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ce9565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e3f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e6573ffffffffffffffffffffffffffffffffffffffff841683610f15565b90508051600014158015610e8a575080806020019051810190610e8891906112fc565b155b156106ba576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e36565b60015460ff16610a54576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f2383836000610f2a565b9392505050565b606081471015610f68576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e36565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f91919061131e565b60006040518083038185875af1925050503d8060008114610fce576040519150601f19603f3d011682016040523d82523d6000602084013e610fd3565b606091505b5091509150610fe3868383610fed565b9695505050505050565b60608261100257610ffd8261107c565b610f23565b8151158015611026575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611075576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e36565b5080610f23565b80511561108c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110d057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461112457600080fd5b919050565b60008060008060006080868803121561114157600080fd5b61114a86611100565b945060208601359350604086013567ffffffffffffffff81111561116d57600080fd5b8601601f8101881361117e57600080fd5b803567ffffffffffffffff81111561119557600080fd5b8860208284010111156111a757600080fd5b959894975060200195606001359392505050565b6000806000606084860312156111d057600080fd5b6111d984611100565b95602085013595506040909401359392505050565b60006020828403121561120057600080fd5b5035919050565b6000806040838503121561121a57600080fd5b8235915061122a60208401611100565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112ce608083018486611233565b979650505050505050565b8381526040602082015260006112f3604083018486611233565b95945050505050565b60006020828403121561130e57600080fd5b81518015158114610f2357600080fd5b6000825160005b8181101561133f5760208186018101518583015201611325565b50600092019182525091905056fea264697066735822122076f21f1ac8f2c01b56f41facd345cbe7bb75624ae7a01f61b68ad17dc9af27a464736f6c634300081a0033"; + "0x60c060405234801561001057600080fd5b506040516115f63803806115f683398101604081905261002f916101ef565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf600082610123565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610123565b506101157f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610123565b505050505050505050610243565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101c95760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101813390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101cd565b5060005b92915050565b80516001600160a01b03811681146101ea57600080fd5b919050565b6000806000806080858703121561020557600080fd5b61020e856101d3565b935061021c602086016101d3565b925061022a604086016101d3565b9150610238606086016101d3565b905092959194509250565b60805160a0516113486102ae600039600081816101dc01528181610432015281816104e3015281816105fd0152818161079101528181610842015261091001526000818161019001528181610454015281816104b6015281816107b3015261081501526113486000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80635c975abb116100b257806385f438c111610081578063a217fddf11610066578063a217fddf14610303578063d547741f1461030b578063e63ab1e91461031e57600080fd5b806385f438c11461029657806391d14854146102bd57600080fd5b80635c975abb1461025d5780635e3e9fef14610268578063743e0c9b1461027b5780638456cb591461028e57600080fd5b806321e093b1116101095780632f2ff15d116100ee5780632f2ff15d1461022f57806336568abe146102425780633f4ba83a1461025557600080fd5b806321e093b1146101d7578063248a9ca3146101fe57600080fd5b806301ffc9a71461013b57806302d5c89914610163578063106e629014610178578063116191b61461018b575b600080fd5b61014e610149366004611083565b610345565b60405190151581526020015b60405180910390f35b6101766101713660046110ee565b6103de565b005b610176610186366004611180565b6105a9565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b61022161020c3660046111b3565b60009081526002602052604090206001015490565b60405190815260200161015a565b61017661023d3660046111cc565b610684565b6101766102503660046111cc565b6106af565b610176610708565b60015460ff1661014e565b6101766102763660046110ee565b61073d565b6101766102893660046111b3565b6108ee565b610176610938565b6102217f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61014e6102cb3660046111cc565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610221600081565b6101766103193660046111cc565b61096a565b6102217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806103d857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6103e661098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610410816109d2565b6104186109dc565b61047973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8969bd490610513907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161058f9392919061129e565b60405180910390a2506105a26001600055565b5050505050565b6105b161098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46105db816109d2565b6105e36109dc565b61062473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a1b565b8373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161066c91815260200190565b60405180910390a25061067f6001600055565b505050565b60008281526002602052604090206001015461069f816109d2565b6106a98383610a9c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106fe576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61067f8282610b9c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610732816109d2565b61073a610c5b565b50565b61074561098f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f816109d2565b6107776109dc565b6107d873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a1b565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610872907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a90600401611241565b600060405180830381600087803b15801561088c57600080fd5b505af11580156108a0573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161058f9392919061129e565b6108f66109dc565b61073a73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610cd8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610962816109d2565b61073a610d1e565b600082815260026020526040902060010154610985816109d2565b6106a98383610b9c565b6002600054036109cb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61073a8133610d77565b60015460ff1615610a19576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261067f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e08565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b323390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016103d8565b5060006103d8565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610b9457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016103d8565b610c63610e9e565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106a99186918216906323b872dd90608401610a55565b610d266109dc565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610cae565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e04576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e2a73ffffffffffffffffffffffffffffffffffffffff841683610eda565b90508051600014158015610e4f575080806020019051810190610e4d91906112c1565b155b1561067f576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610dfb565b60015460ff16610a19576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610ee883836000610eef565b9392505050565b606081471015610f2d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610dfb565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610f5691906112e3565b60006040518083038185875af1925050503d8060008114610f93576040519150601f19603f3d011682016040523d82523d6000602084013e610f98565b606091505b5091509150610fa8868383610fb2565b9695505050505050565b606082610fc757610fc282611041565b610ee8565b8151158015610feb575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561103a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610dfb565b5080610ee8565b8051156110515780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561109557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ee857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146110e957600080fd5b919050565b60008060008060006080868803121561110657600080fd5b61110f866110c5565b945060208601359350604086013567ffffffffffffffff81111561113257600080fd5b8601601f8101881361114357600080fd5b803567ffffffffffffffff81111561115a57600080fd5b88602082840101111561116c57600080fd5b959894975060200195606001359392505050565b60008060006060848603121561119557600080fd5b61119e846110c5565b95602085013595506040909401359392505050565b6000602082840312156111c557600080fd5b5035919050565b600080604083850312156111df57600080fd5b823591506111ef602084016110c5565b90509250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006112936080830184866111f8565b979650505050505050565b8381526040602082015260006112b86040830184866111f8565b95945050505050565b6000602082840312156112d357600080fd5b81518015158114610ee857600080fd5b6000825160005b8181101561130457602081860181015185830152016112ea565b50600092019182525091905056fea2646970667358221220acfa51062c59716e02e413798f47a294f807ab6bfe6bcb7c13ce0530e6e5b1b864736f6c634300081a0033"; type ZetaConnectorNativeConstructorParams = | [signer?: Signer] @@ -631,32 +618,32 @@ export class ZetaConnectorNative__factory extends ContractFactory { } override getDeployTransaction( - _gateway: AddressLike, - _zetaToken: AddressLike, - _tssAddress: AddressLike, - _admin: AddressLike, + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike, overrides?: NonPayableOverrides & { from?: string } ): Promise { return super.getDeployTransaction( - _gateway, - _zetaToken, - _tssAddress, - _admin, + gateway_, + zetaToken_, + tssAddress_, + admin_, overrides || {} ); } override deploy( - _gateway: AddressLike, - _zetaToken: AddressLike, - _tssAddress: AddressLike, - _admin: AddressLike, + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike, overrides?: NonPayableOverrides & { from?: string } ) { return super.deploy( - _gateway, - _zetaToken, - _tssAddress, - _admin, + gateway_, + zetaToken_, + tssAddress_, + admin_, overrides || {} ) as Promise< ZetaConnectorNative & { diff --git a/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts b/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts index b37e3908..242eb24a 100644 --- a/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts +++ b/v2/typechain-types/factories/ZetaConnectorNonNative__factory.ts @@ -24,22 +24,22 @@ const _abi = [ type: "constructor", inputs: [ { - name: "_gateway", + name: "gateway_", type: "address", internalType: "address", }, { - name: "_zetaToken", + name: "zetaToken_", type: "address", internalType: "address", }, { - name: "_tssAddress", + name: "tssAddress_", type: "address", internalType: "address", }, { - name: "_admin", + name: "admin_", type: "address", internalType: "address", }, @@ -246,7 +246,7 @@ const _abi = [ name: "setMaxSupply", inputs: [ { - name: "_maxSupply", + name: "maxSupply_", type: "uint256", internalType: "uint256", }, @@ -273,19 +273,6 @@ const _abi = [ ], stateMutability: "view", }, - { - type: "function", - name: "tssAddress", - inputs: [], - outputs: [ - { - name: "", - type: "address", - internalType: "address", - }, - ], - stateMutability: "view", - }, { type: "function", name: "unpause", @@ -617,7 +604,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405260001960045534801561001657600080fd5b5060405161182a38038061182a833981016040819052610035916101fb565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b156100955760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384811660805283811660a052600380546001600160a01b0319169184169190911790556100cb60008261012f565b506100f67f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361012f565b506101217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261012f565b50505050505050505061024f565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101d55760008381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561018d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d9565b5060005b92915050565b80516001600160a01b03811681146101f657600080fd5b919050565b6000806000806080858703121561021157600080fd5b61021a856101df565b9350610228602086016101df565b9250610236604086016101df565b9150610244606086016101df565b905092959194509250565b60805160a05161155b6102cf6000396000818161021d0152818161049a015281816105dc015281816106a2015281816107a7015281816108c901528181610a7d01528181610bbf01528181610c850152610ddc0152600081816101d1015281816105a60152818161067301528181610b890152610c56015261155b6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635c975abb116100d857806385f438c11161008c578063d547741f11610066578063d547741f1461037f578063d5abeb0114610392578063e63ab1e91461039b57600080fd5b806385f438c11461030a57806391d1485414610331578063a217fddf1461037757600080fd5b80636f8b44b0116100bd5780636f8b44b0146102dc578063743e0c9b146102ef5780638456cb591461030257600080fd5b80635c975abb146102be5780635e3e9fef146102c957600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635b1125911461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c57806302d5c899146101a4575b600080fd5b61018f61018a36600461128d565b6103c2565b60405190151581526020015b60405180910390f35b6101b76101b23660046112ff565b61045b565b005b6101b76101c7366004611391565b610768565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d3660046113c4565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e3660046113dd565b610985565b6101b76102913660046113dd565b6109b0565b6101b7610a09565b6003546101f39073ffffffffffffffffffffffffffffffffffffffff1681565b60015460ff1661018f565b6101b76102d73660046112ff565b610a3e565b6101b76102ea3660046113c4565b610d31565b6101b76102fd3660046113c4565b610d9f565b6101b7610e49565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61033f3660046113dd565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6101b761038d3660046113dd565b610e7b565b61026260045481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610463610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461048d81610ee3565b610495610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611409565b6105319087611422565b1115610569576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561062057600080fd5b505af1158015610634573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106d2907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b1580156106ec57600080fd5b505af1158015610700573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe86868660405161074e93929190611502565b60405180910390a2506107616001600055565b5050505050565b610770610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461079a81610ee3565b6107a2610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190611409565b61083e9085611422565b1115610876576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161096d91815260200190565b60405180910390a2506109806001600055565b505050565b6000828152600260205260409020600101546109a081610ee3565b6109aa8383610f2c565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109ff576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610980828261102c565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3381610ee3565b610a3b6110eb565b50565b610a46610ea0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a7081610ee3565b610a78610eed565b6004547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611409565b610b149087611422565b1115610b4c576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610cb5907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114a5565b600060405180830381600087803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced86868660405161074e93929190611502565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d5b81610ee3565b610d63610eed565b60048290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610da7610eed565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e3557600080fd5b505af1158015610761573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e7381610ee3565b610a3b611168565b600082815260026020526040902060010154610e9681610ee3565b6109aa838361102c565b600260005403610edc576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a3b81336111c1565b60015460ff1615610f2a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610fc23390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610455565b506000610455565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561102457600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610455565b6110f3611251565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611170610eed565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361113e565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661124d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610f2a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561129f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112cf57600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112fa57600080fd5b919050565b60008060008060006080868803121561131757600080fd5b611320866112d6565b945060208601359350604086013567ffffffffffffffff81111561134357600080fd5b8601601f8101881361135457600080fd5b803567ffffffffffffffff81111561136b57600080fd5b88602082840101111561137d57600080fd5b959894975060200195606001359392505050565b6000806000606084860312156113a657600080fd5b6113af846112d6565b95602085013595506040909401359392505050565b6000602082840312156113d657600080fd5b5035919050565b600080604083850312156113f057600080fd5b82359150611400602084016112d6565b90509250929050565b60006020828403121561141b57600080fd5b5051919050565b80820180821115610455577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114f760808301848661145c565b979650505050505050565b83815260406020820152600061151c60408301848661145c565b9594505050505056fea2646970667358221220c864e28878a70f2d629a9a8bcc8540adbc24308f0bdca4bb9f799c9b08a4b8fc64736f6c634300081a0033"; + "0x60c060405260001960035534801561001657600080fd5b506040516117f93803806117f9833981016040819052610035916101f5565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610129565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610129565b5061011b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610129565b505050505050505050610249565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101cf5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b5060005b92915050565b80516001600160a01b03811681146101f057600080fd5b919050565b6000806000806080858703121561020b57600080fd5b610214856101d9565b9350610222602086016101d9565b9250610230604086016101d9565b915061023e606086016101d9565b905092959194509250565b60805160a0516115306102c9600039600081816102120152818161046f015281816105b1015281816106770152818161077c0152818161089e01528181610a5201528181610b9401528181610c5a0152610db10152600081816101c60152818161057b0152818161064801528181610b5e0152610c2b01526115306000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80635e3e9fef116100cd57806391d1485411610081578063d547741f11610066578063d547741f14610354578063d5abeb0114610367578063e63ab1e91461037057600080fd5b806391d1485414610306578063a217fddf1461034c57600080fd5b8063743e0c9b116100b2578063743e0c9b146102c45780638456cb59146102d757806385f438c1146102df57600080fd5b80635e3e9fef1461029e5780636f8b44b0146102b157600080fd5b8063248a9ca31161012457806336568abe1161010957806336568abe146102785780633f4ba83a1461028b5780635c975abb1461029357600080fd5b8063248a9ca3146102345780632f2ff15d1461026557600080fd5b8063106e629011610155578063106e6290146101ae578063116191b6146101c157806321e093b11461020d57600080fd5b806301ffc9a71461017157806302d5c89914610199575b600080fd5b61018461017f366004611262565b610397565b60405190151581526020015b60405180910390f35b6101ac6101a73660046112d4565b610430565b005b6101ac6101bc366004611366565b61073d565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101e87f000000000000000000000000000000000000000000000000000000000000000081565b610257610242366004611399565b60009081526002602052604090206001015490565b604051908152602001610190565b6101ac6102733660046113b2565b61095a565b6101ac6102863660046113b2565b610985565b6101ac6109de565b60015460ff16610184565b6101ac6102ac3660046112d4565b610a13565b6101ac6102bf366004611399565b610d06565b6101ac6102d2366004611399565b610d74565b6101ac610e1e565b6102577f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101846103143660046113b2565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610257600081565b6101ac6103623660046113b2565b610e50565b61025760035481565b6102577f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610438610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461046281610eb8565b61046a610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc91906113de565b61050690876113f7565b111561053e576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b50506040517fb8969bd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016925063b8969bd491506106a7907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe868686604051610723939291906114d7565b60405180910390a2506107366001600055565b5050505050565b610745610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461076f81610eb8565b610777610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080991906113de565b61081390856113f7565b111561084b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648460405161094291815260200190565b60405180910390a2506109556001600055565b505050565b60008281526002602052604090206001015461097581610eb8565b61097f8383610f01565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109558282611001565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a0881610eb8565b610a106110c0565b50565b610a1b610e75565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a4581610eb8565b610a4d610ec2565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf91906113de565b610ae990876113f7565b1115610b21576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201879052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50506040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250635131ab599150610c8a907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a9060040161147a565b600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced868686604051610723939291906114d7565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d3081610eb8565b610d38610ec2565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610d7c610ec2565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e0a57600080fd5b505af1158015610736573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4881610eb8565b610a1061113d565b600082815260026020526040902060010154610e6b81610eb8565b61097f8383611001565b600260005403610eb1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b610a108133611196565b60015460ff1615610eff576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610f973390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161042a565b50600061042a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610ff957600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161042a565b6110c8611226565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611145610ec2565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611113565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611222576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610eff576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561127457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112a457600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112cf57600080fd5b919050565b6000806000806000608086880312156112ec57600080fd5b6112f5866112ab565b945060208601359350604086013567ffffffffffffffff81111561131857600080fd5b8601601f8101881361132957600080fd5b803567ffffffffffffffff81111561134057600080fd5b88602082840101111561135257600080fd5b959894975060200195606001359392505050565b60008060006060848603121561137b57600080fd5b611384846112ab565b95602085013595506040909401359392505050565b6000602082840312156113ab57600080fd5b5035919050565b600080604083850312156113c557600080fd5b823591506113d5602084016112ab565b90509250929050565b6000602082840312156113f057600080fd5b5051919050565b8082018082111561042a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114cc608083018486611431565b979650505050505050565b8381526040602082015260006114f1604083018486611431565b9594505050505056fea264697066735822122083f8ba25d15d0dacb4bf73d1472e680a549b02f1b26b83dcb21bfef553fb6e1d64736f6c634300081a0033"; type ZetaConnectorNonNativeConstructorParams = | [signer?: Signer] @@ -637,32 +624,32 @@ export class ZetaConnectorNonNative__factory extends ContractFactory { } override getDeployTransaction( - _gateway: AddressLike, - _zetaToken: AddressLike, - _tssAddress: AddressLike, - _admin: AddressLike, + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike, overrides?: NonPayableOverrides & { from?: string } ): Promise { return super.getDeployTransaction( - _gateway, - _zetaToken, - _tssAddress, - _admin, + gateway_, + zetaToken_, + tssAddress_, + admin_, overrides || {} ); } override deploy( - _gateway: AddressLike, - _zetaToken: AddressLike, - _tssAddress: AddressLike, - _admin: AddressLike, + gateway_: AddressLike, + zetaToken_: AddressLike, + tssAddress_: AddressLike, + admin_: AddressLike, overrides?: NonPayableOverrides & { from?: string } ) { return super.deploy( - _gateway, - _zetaToken, - _tssAddress, - _admin, + gateway_, + zetaToken_, + tssAddress_, + admin_, overrides || {} ) as Promise< ZetaConnectorNonNative & {