From c21699212166f9153d5f58006a325ba5cd5e0c1d Mon Sep 17 00:00:00 2001 From: Igx22 Date: Tue, 12 Nov 2024 20:43:46 +0700 Subject: [PATCH] fix: compilation fixes for localhost testing; --- .env.sample | 12 +++++ .gitignore | 4 +- .prettierignore | 11 +++-- docker/a1/ValidatorV1.json | 97 +++++++++++++++++++++----------------- package-lock.json | 59 +++++++++++++++++++++++ package.json | 2 + src/utilz/blockUtil.ts | 8 ++-- src/utilz/chainUtil.ts | 1 + src/utilz/tuple.ts | 2 +- tsconfig.json | 11 +++-- 10 files changed, 152 insertions(+), 55 deletions(-) create mode 100644 .env.sample diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..421ee43 --- /dev/null +++ b/.env.sample @@ -0,0 +1,12 @@ +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +VALIDATOR_RPC_ENDPOINT=http://localhost:8545 +VALIDATOR_RPC_NETWORK=1337 +VALIDATOR_PUSH_TOKEN_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3 +VALIDATOR_CONTRACT_ADDRESS=0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9 +STORAGE_CONTRACT_ADDRESS=0x0165878A594ca255338adfa4d48449f69242Eb8F +DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/anode1 +CONFIG_DIR=docker/a1 +VALIDATOR_PRIVATE_KEY_FILE=validator_eth_key.json +VALIDATOR_PRIVATE_KEY_PASS=test +LOCALH= \ No newline at end of file diff --git a/.gitignore b/.gitignore index 1596d99..d9eac21 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ app.log .DS_Store *.log app.log -.idea \ No newline at end of file +.idea +build/ +log/ \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index e0f03d1..4381094 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,7 @@ -node_modules/ -dist/ -src/utilz/ -src/modules/validator/ \ No newline at end of file +node_modules +public +build +dist +# these files come from push-vnode; don't reformat them please; +src/utilz/*.ts +src/services/messaging-common/*.ts \ No newline at end of file diff --git a/docker/a1/ValidatorV1.json b/docker/a1/ValidatorV1.json index dbecf31..5a474cd 100644 --- a/docker/a1/ValidatorV1.json +++ b/docker/a1/ValidatorV1.json @@ -248,6 +248,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "REPORTS_BEFORE_SLASH_A", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "REPORTS_BEFORE_SLASH_S", @@ -287,6 +300,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "SLASHES_BEFORE_BAN_A", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "SLASHES_BEFORE_BAN_S", @@ -354,7 +380,7 @@ "type": "uint256" } ], - "name": "dnodes", + "name": "anodes", "outputs": [ { "internalType": "address", @@ -367,24 +393,12 @@ }, { "inputs": [], - "name": "getActiveVNodes", + "name": "getANodes", "outputs": [ { - "components": [ - { - "internalType": "address", - "name": "nodeWallet", - "type": "address" - }, - { - "internalType": "string", - "name": "nodeApiBaseUrl", - "type": "string" - } - ], - "internalType": "struct ValidatorV1.ActiveValidator[]", + "internalType": "address[]", "name": "", - "type": "tuple[]" + "type": "address[]" } ], "stateMutability": "view", @@ -392,12 +406,12 @@ }, { "inputs": [], - "name": "getDNodes", + "name": "getANodesLength", "outputs": [ { - "internalType": "address[]", + "internalType": "uint256", "name": "", - "type": "address[]" + "type": "uint256" } ], "stateMutability": "view", @@ -405,12 +419,24 @@ }, { "inputs": [], - "name": "getDNodesLength", + "name": "getActiveVNodes", "outputs": [ { - "internalType": "uint256", + "components": [ + { + "internalType": "address", + "name": "nodeWallet", + "type": "address" + }, + { + "internalType": "string", + "name": "nodeApiBaseUrl", + "type": "string" + } + ], + "internalType": "struct ValidatorV1.ActiveValidator[]", "name": "", - "type": "uint256" + "type": "tuple[]" } ], "stateMutability": "view", @@ -585,7 +611,7 @@ }, { "internalType": "uint16", - "name": "REPORTS_BEFORE_SLASH_S_", + "name": "REPORTS_BEFORE_SLASH_S_A", "type": "uint16" }, { @@ -595,7 +621,7 @@ }, { "internalType": "uint16", - "name": "SLASHES_BEFORE_BAN_S_", + "name": "SLASHES_BEFORE_BAN_S_A", "type": "uint16" }, { @@ -616,7 +642,7 @@ }, { "inputs": [], - "name": "minStakeD", + "name": "minStakeA", "outputs": [ { "internalType": "uint256", @@ -1121,29 +1147,16 @@ ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [], - "name": "vnodesActive", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" } ], - "bytecode": "0x60a06040523060805234801561001457600080fd5b50608051615c436200004d60003960008181610db901528181610e3e015281816111a80152818161122d01526113170152615c436000f3fe60806040526004361061031e5760003560e01c80637f6e29de116101a5578063bdb860ea116100ec578063e67a5d7811610095578063f6e8913d1161006f578063f6e8913d146108b2578063f7714eb9146108d7578063fdd9344c146108fe578063ffa1ad741461092057600080fd5b8063e67a5d781461085c578063f108f5b61461087c578063f2fde38b1461089257600080fd5b8063dc38b0a2116100c6578063dc38b0a214610808578063dd6f8f9014610828578063e30c39781461083e57600080fd5b8063bdb860ea146107b2578063c993d861146107c8578063ce3e7e91146107e857600080fd5b8063931127a01161014e578063adf1daa611610128578063adf1daa614610750578063b10064eb14610772578063b27b154d1461079257600080fd5b8063931127a0146106fa578063974c5b411461071b5780639c30db5c1461073057600080fd5b806384f21a441161017f57806384f21a441461069a5780638b8f631f146106bc5780638da5cb5b146106dc57600080fd5b80637f6e29de14610658578063817b1cd21461066e57806381ebc5061461068557600080fd5b80633659cfe61161026957806365cdbaea11610212578063715018a6116101ec578063715018a61461061357806379ba5097146106285780637c4981c81461063d57600080fd5b806365cdbaea146105ae5780636dcd3af2146105d75780636ddf344a146105f757600080fd5b806352d1902d1161024357806352d1902d1461054c578063569c876214610561578063582115fb1461058157600080fd5b80633659cfe6146104e65780633a688a2f146105065780634f1ef2861461053957600080fd5b80631acf7629116102cb57806324212b86116102a557806324212b86146104855780632ae9c6001461049b578063339f334b146104b657600080fd5b80631acf76291461041657806323b8ac5d1461043857806323deecfe1461046357600080fd5b8063125c6c98116102fc578063125c6c98146103b957806313114a9d146103dd57806315aa7b06146103f457600080fd5b8063011f59a014610323578063024f38cb1461035d57806311ce026714610380575b600080fd5b34801561032f57600080fd5b5060ff5461034590600160701b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561036957600080fd5b5060ff5461034590640100000000900461ffff1681565b34801561038c57600080fd5b50610101546103a1906001600160a01b031681565b6040516001600160a01b039091168152602001610354565b3480156103c557600080fd5b506103cf60fc5481565b604051908152602001610354565b3480156103e957600080fd5b506103cf6101085481565b34801561040057600080fd5b50610409610976565b6040516103549190614fd2565b34801561042257600080fd5b50610436610431366004614ffa565b6109d9565b005b34801561044457600080fd5b5060ff54610345906c01000000000000000000000000900461ffff1681565b34801561046f57600080fd5b5060ff5461034590600160801b900461ffff1681565b34801561049157600080fd5b506103cf60fe5481565b3480156104a757600080fd5b5060fb546103459061ffff1681565b3480156104c257600080fd5b506104d66104d1366004615017565b610b34565b6040519015158152602001610354565b3480156104f257600080fd5b50610436610501366004614ffa565b610daf565b34801561051257600080fd5b50610526610521366004614ffa565b610f2a565b60405161035497969594939291906151a7565b6104366105473660046152d3565b61119e565b34801561055857600080fd5b506103cf61130a565b34801561056d57600080fd5b506103a161057c366004615323565b6113cf565b34801561058d57600080fd5b506105a161059c366004614ffa565b6113fa565b604051610354919061533c565b3480156105ba57600080fd5b5060ff54610345906a0100000000000000000000900461ffff1681565b3480156105e357600080fd5b506104366105f23660046153ea565b6116eb565b34801561060357600080fd5b50610103546103459061ffff1681565b34801561061f57600080fd5b50610436611b1f565b34801561063457600080fd5b50610436611b33565b34801561064957600080fd5b5060ff546103459061ffff1681565b34801561066457600080fd5b50610105546103cf565b34801561067a57600080fd5b506103cf6101075481565b34801561069157600080fd5b50610409611bbe565b3480156106a657600080fd5b506106af611c1f565b60405161035491906154b8565b3480156106c857600080fd5b506103a16106d7366004615323565b611e6e565b3480156106e857600080fd5b506033546001600160a01b03166103a1565b34801561070657600080fd5b5060ff546103459062010000900461ffff1681565b34801561072757600080fd5b50610409611e7f565b34801561073c57600080fd5b5061043661074b366004615544565b611ee0565b34801561075c57600080fd5b5060ff5461034590600160901b900461ffff1681565b34801561077e57600080fd5b5061043661078d3660046155c2565b612775565b34801561079e57600080fd5b506104366107ad3660046156bc565b612daa565b3480156107be57600080fd5b50610104546103cf565b3480156107d457600080fd5b506103a16107e3366004615323565b612e7c565b3480156107f457600080fd5b506104d66108033660046156d7565b612e8d565b34801561081457600080fd5b50610436610823366004614ffa565b61336a565b34801561083457600080fd5b506103cf60fd5481565b34801561084a57600080fd5b506065546001600160a01b03166103a1565b34801561086857600080fd5b50610436610877366004615718565b613395565b34801561088857600080fd5b50610102546103cf565b34801561089e57600080fd5b506104366108ad366004614ffa565b61346a565b3480156108be57600080fd5b5060ff54610345906601000000000000900461ffff1681565b3480156108e357600080fd5b5060ff546103459068010000000000000000900461ffff1681565b34801561090a57600080fd5b5060ff5461034590600160a01b900461ffff1681565b34801561092c57600080fd5b506109696040518060400160405280600581526020017f302e302e3200000000000000000000000000000000000000000000000000000081525081565b604051610354919061574b565b60606101058054806020026020016040519081016040528092919081815260200182805480156109cf57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109b1575b5050505050905090565b6001600160a01b038082166000908152610106602052604090206001810154909116610a4c5760405162461bcd60e51b815260206004820152601460248201527f6e6f646520646f6573206e6f742065786973747300000000000000000000000060448201526064015b60405180910390fd5b80546001600160a01b0316331480610a7d575033610a726033546001600160a01b031690565b6001600160a01b0316145b610ac95760405162461bcd60e51b815260206004820152601d60248201527f6f6e6c79206f776e65722063616e20756e7374616b652061206e6f64650000006044820152606401610a43565b610ad2816134db565b5060088101805460ff1916600490811790915560018201546040516001600160a01b03909116917ffadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3e91610b28919060009061575e565b60405180910390a25050565b6000610b3e6137c6565b6001600160a01b038316610b945760405162461bcd60e51b815260206004820152601260248201527f696e76616c696420746f206164647265737300000000000000000000000000006044820152606401610a43565b60008211610be45760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e740000000000000000000000000000000000006044820152606401610a43565b610108548211158015610c7c5750610100546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c789190615779565b8211155b610cc85760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610a43565b6101005460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190615792565b610d8c5760405162461bcd60e51b815260206004820152601260248201527f6661696c656420746f207472616e7366657200000000000000000000000000006044820152606401610a43565b816101086000828254610d9f91906157ca565b9091555060019150505b92915050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e3c5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610a43565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e977f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610f025760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610a43565b610f0b81613820565b60408051600080825260208201909252610f2791839190613828565b50565b6101066020526000908152604090208054600182015460028301546003840180546001600160a01b039485169594841694600160a01b90940460ff16939190610f72906157dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9e906157dd565b8015610feb5780601f10610fc057610100808354040283529160200191610feb565b820191906000526020600020905b815481529060010190602001808311610fce57829003601f168201915b50506040805160a08101825260048701805461ffff808216845262010000909104166020808401919091526005890180548551818402810184018752818152999a99949850929650938701945091929183018282801561109c57602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116110595790505b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156110fe57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110e0575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561118857602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116111455790505b5050509190925250505060089091015460ff1687565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361122b5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610a43565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b0316146112f15760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610a43565b6112fa82613820565b61130682826001613828565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113aa5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a43565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61010581815481106113e057600080fd5b6000918252602090912001546001600160a01b0316905081565b611402614db9565b6001600160a01b0382811660009081526101066020908152604091829020825160e08101845281548516815260018201549485169281019290925290929091830190600160a01b900460ff16600281111561145f5761145f615043565b600281111561147057611470615043565b81526020016002820154815260200160038201805461148e906157dd565b80601f01602080910402602001604051908101604052809291908181526020018280546114ba906157dd565b80156115075780601f106114dc57610100808354040283529160200191611507565b820191906000526020600020905b8154815290600101906020018083116114ea57829003601f168201915b50505091835250506040805160a08101825260048401805461ffff808216845262010000909104166020838101919091526005860180548551818402810184018752818152968301969495939493860193928301828280156115ba57602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116115775790505b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561161c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115fe575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a657602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116116635790505b505050919092525050508152600882015460209091019060ff1660048111156116d1576116d1615043565b60048111156116e2576116e2615043565b90525092915050565b600054610100900460ff161580801561170b5750600054600160ff909116105b806117255750303b158015611725575060005460ff166001145b6117975760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a43565b6000805460ff1916600117905580156117ba576000805461ff0019166101001790555b6117c26139cd565b6117ca613a38565b60fb805461ffff191661ffff8e161790556001600160a01b038b166117ee57600080fd5b61010080546001600160a01b0319166001600160a01b038d1617905561ffff8a1661185b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642061747465737465727320616d6f756e7400000000000000006044820152606401610a43565b60ff805461ffff808d16600160801b0271ffff00000000000000000000000000000000199092169190911790915589166118fd5760405162461bcd60e51b815260206004820152602160248201527f696e76616c6964206e6f646552616e646f6d4d696e436f756e7420616d6f756e60448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610a43565b60ff805461ffff808c16600160901b027fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff9092169190911790915588166119ac5760405162461bcd60e51b815260206004820152602c60248201527f696e76616c6964206e6f646552616e646f6d46696c74657250696e677352657160448201527f756972656420616d6f756e7400000000000000000000000000000000000000006064820152608401610a43565b8760ff60146101000a81548161ffff021916908361ffff160217905550606460fc81905550606460fd81905550606460fe819055508660ff60026101000a81548161ffff021916908361ffff1602179055508560ff60046101000a81548161ffff021916908361ffff1602179055508260ff60066101000a81548161ffff021916908361ffff1602179055508460ff60086101000a81548161ffff021916908361ffff1602179055508360ff600a6101000a81548161ffff021916908361ffff1602179055508160ff600c6101000a81548161ffff021916908361ffff160217905550604260ff60006101000a81548161ffff021916908361ffff160217905550600060ff600e6101000a81548161ffff021916908361ffff1602179055508015611b11576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b611b276137c6565b611b316000613aa8565b565b60655433906001600160a01b03168114611bb55760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610a43565b610f2781613aa8565b60606101048054806020026020016040519081016040528092919081815260200182805480156109cf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109b1575050505050905090565b60606000805b61010254811015611ca85760006101028281548110611c4657611c46615817565b60009182526020808320909101546001600160a01b03168083526101069091526040909120600881015491925090611c809060ff16613ac1565b15611c935783611c8f8161582d565b9450505b50508080611ca09061582d565b915050611c25565b5060008167ffffffffffffffff811115611cc457611cc4615214565b604051908082528060200260200182016040528015611d0a57816020015b604080518082019091526000815260606020820152815260200190600190039081611ce25790505b5090506000805b61010254811015611e655760006101028281548110611d3257611d32615817565b60009182526020808320909101546001600160a01b03168083526101069091526040909120600881015491925090611d6c9060ff16613ac1565b611d77575050611e53565b6040805180820190915260018201546001600160a01b03168152600382018054602083019190611da6906157dd565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd2906157dd565b8015611e1f5780601f10611df457610100808354040283529160200191611e1f565b820191906000526020600020905b815481529060010190602001808311611e0257829003601f168201915b5050505050815250858580611e339061582d565b965081518110611e4557611e45615817565b602002602001018190525050505b80611e5d8161582d565b915050611d11565b50909392505050565b61010481815481106113e057600080fd5b60606101028054806020026020016040519081016040528092919081815260200182805480156109cf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109b1575050505050905090565b6000836002811115611ef457611ef4615043565b03611fa65760fc54841015611f555760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220564e4f446044820152604560f81b6064820152608401610a43565b61010280546001810182556000919091527f93bdaa6a4190909b7c3fbe8d42169ffe1cab19f51dfc8db24c71abf849eced4a0180546001600160a01b0319166001600160a01b03831617905561217a565b6001836002811115611fba57611fba615043565b0361206c5760fd5484101561201b5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220534e4f446044820152604560f81b6064820152608401610a43565b61010480546001810182556000919091527f4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe0180546001600160a01b0319166001600160a01b03831617905561217a565b600283600281111561208057612080615043565b036121325760fe548410156120e15760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220444e4f446044820152604560f81b6064820152608401610a43565b61010580546001810182556000919091527ffc62abc8c0fc47c2d92f5aec99bf8b60f375828e14394d89345cae11a98673710180546001600160a01b0319166001600160a01b03831617905561217a565b60405162461bcd60e51b815260206004820152601560248201527f756e737570706f72746564206e6f6465547970652000000000000000000000006044820152606401610a43565b6001600160a01b0380821660009081526101066020526040902080549091161561220c5760405162461bcd60e51b815260206004820152602560248201527f61206e6f64652077697468207075624b657920697320616c726561647920646560448201527f66696e65640000000000000000000000000000000000000000000000000000006064820152608401610a43565b841561231957610100546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201526000916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f9190615779565b9050858110156123175760405162461bcd60e51b815260206004820152603260248201527f5f6e6f6465546f6b656e732063616e6e6f74206265207472616e73666572726560448201527f642c20636865636b20616c6c6f77616e636500000000000000000000000000006064820152608401610a43565b505b612321614db9565b3381526001600160a01b03831660208201526040810185600281111561234957612349615043565b9081600281111561235c5761235c615043565b90525060608101869052608081018490526001600160a01b0380841660009081526101066020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549190951692811683178555928501518594919390927fffffffffffffffffffffff00000000000000000000000000000000000000000090911617600160a01b8360028111156123fc576123fc615043565b0217905550606082015160028201556080820151600382019061241f908261588c565b5060a0820151805160048301805460208085015161ffff908116620100000263ffffffff1990931694169390931717815560408301518051919261246b92600587019290910190614e2d565b5060608201518051612487916002840191602090910190614ee5565b50608082015180516124a3916003840191602090910190614e2d565b50505060c082015160088201805460ff191660018360048111156124c9576124c9615043565b021790555050861590506125de57610100546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256c9190615792565b6125de5760405162461bcd60e51b815260206004820152602560248201527f6661696c656420746f207472616e7366657220746f6b656e7320746f20636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610a43565b8561010760008282546125f1919061594c565b909155506000905085600281111561260b5761260b615043565b0361261d57612618613afb565b61271e565b600185600281111561263157612631615043565b0361271e57610101546001600160a01b031661268f5760405162461bcd60e51b815260206004820152601b60248201527f6e6f2073746f7261676520636f6e747261637420646566696e656400000000006044820152606401610a43565b610101546040517f9d95f1cc0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116908190639d95f1cc906024016020604051808303816000875af11580156126f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271b9190615970565b50505b826001600160a01b0316336001600160a01b03167f67bd55f864dcc77d483ff7567de0889142417ef6d0299753cfd80e4c72ddc5548789886040516127659392919061598b565b60405180910390a3505050505050565b3360009081526101066020526040902060018101546001600160a01b03166127df5760405162461bcd60e51b815260206004820152601060248201527f696e76616c6964207265706f72746572000000000000000000000000000000006044820152606401610a43565b600080835167ffffffffffffffff8111156127fc576127fc615214565b604051908082528060200260200182016040528015612825578160200160208202803683370190505b50905060005b84518110156129b457600073__$7aaf162b34d2533b02434bde51cad0c5c5$__6336de68108888858151811061286357612863615817565b60200260200101516040518363ffffffff1660e01b81526004016128889291906159b3565b602060405180830381865af41580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c991906159d8565b6001600160a01b03808216600090815261010660205260409020600181015492935091166128f85750506129a2565b6000805b8681101561295157836001600160a01b031686828151811061292057612920615817565b60200260200101516001600160a01b03160361293f5760019150612951565b806129498161582d565b9150506128fc565b508015612960575050506129a2565b82858761296c8161582d565b98508151811061297e5761297e615817565b60200260200101906001600160a01b031690816001600160a01b0316815250505050505b806129ac8161582d565b91505061282b565b508351821015612a6a5760008267ffffffffffffffff8111156129d9576129d9615214565b604051908082528060200260200182016040528015612a02578160200160208202803683370190505b50905060005b83811015612a6657828181518110612a2257612a22615817565b6020026020010151828281518110612a3c57612a3c615817565b6001600160a01b039092166020928302919091019091015280612a5e8161582d565b915050612a08565b5090505b6000866002811115612a7e57612a7e615043565b03612c0957600080600087806020019051810190612a9c9190615a0c565b9194509250905060ff8316600114612af65760405162461bcd60e51b815260206004820152601c60248201527f7265706f727420616374696f6e206f6e6c7920737570706f72746564000000006044820152606401610a43565b6001600160a01b038082166000908152610106602052604090206001810154909116612b6f5760405162461bcd60e51b815260206004820152602260248201527f746172676574206e6f64652077616c6c657420646f6573206e6f742065786973604482015261747360f01b6064820152608401610a43565b60006001820154600160a01b900460ff166002811115612b9157612b91615043565b14612bde5760405162461bcd60e51b815260206004820152601660248201527f7265706f7274206f6e6c7920666f7220564e6f646573000000000000000000006044820152606401610a43565b612bff8460ff166002811115612bf657612bf6615043565b88878487613c61565b5050505050612da2565b6001866002811115612c1d57612c1d615043565b03612da25760008060008088806020019051810190612c3c9190615a53565b9296509094509250905060ff8416600214612c995760405162461bcd60e51b815260206004820152601c60248201527f7265706f727420616374696f6e206f6e6c7920737570706f72746564000000006044820152606401610a43565b6001600160a01b038083166000908152610106602052604090206001810154909116612d125760405162461bcd60e51b815260206004820152602260248201527f746172676574206e6f64652077616c6c657420646f6573206e6f742065786973604482015261747360f01b6064820152608401610a43565b600180820154600160a01b900460ff166002811115612d3357612d33615043565b14612d805760405162461bcd60e51b815260206004820152601660248201527f7265706f7274206f6e6c7920666f7220534e6f646573000000000000000000006044820152606401610a43565b611b118560ff166002811115612d9857612d98615043565b8988848887613e09565b505050505050565b612db26137c6565b6101025461ffff82161115612e095760405162461bcd60e51b815260206004820152601c60248201527f696e636f72726563742076616c506572426c6f636b5461726765745f000000006044820152606401610a43565b60ff805471ffff000000000000000000000000000000001916600160801b61ffff848116918202929092179283905560408051600160701b909404909216835260208301527f81512b84dc2b38f82b4999b5512a14df033b165371fa51776cce559212bf0a44910160405180910390a150565b61010281815481106113e057600080fd5b6000612e976137c6565b60008211612ee75760405162461bcd60e51b815260206004820152601960248201527f616d6f756e742073686f756c6420626520706f736974697665000000000000006044820152606401610a43565b826001600160a01b0316846001600160a01b031603612f6e5760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616e73666572206265747765656e2073616d652061646460448201527f72657373657300000000000000000000000000000000000000000000000000006064820152608401610a43565b6001600160a01b03831615801590612f8d57506001600160a01b038416155b156130b45781610108541015612ff55760405162461bcd60e51b815260206004820152602760248201527f66726f6d206e6f64652073686f756c64206861766520656e6f75676820636f6c6044820152661b185d195c985b60ca1b6064820152608401610a43565b6001600160a01b0380841660009081526101066020526040902080549091166130605760405162461bcd60e51b815260206004820152600f60248201527f6d697373696e6720746f206e6f646500000000000000000000000000000000006044820152606401610a43565b82610108600082825461307391906157ca565b9250508190555082610107600082825461308d919061594c565b92505081905550828160020160008282546130a8919061594c565b90915550613360915050565b6001600160a01b038416158015906130d357506001600160a01b038316155b156131ef576001600160a01b0380851660009081526101066020526040902080549091166131435760405162461bcd60e51b815260206004820152601160248201527f6d697373696e672066726f6d206e6f64650000000000000000000000000000006044820152606401610a43565b82816002015410156131a75760405162461bcd60e51b815260206004820152602760248201527f66726f6d206e6f64652073686f756c64206861766520656e6f75676820636f6c6044820152661b185d195c985b60ca1b6064820152608401610a43565b828160020160008282546131bb91906157ca565b925050819055508261010760008282546131d591906157ca565b925050819055508261010860008282546130a8919061594c565b6001600160a01b03808516600090815261010660205260409020805490911661325a5760405162461bcd60e51b815260206004820152601160248201527f6d697373696e672066726f6d206e6f64650000000000000000000000000000006044820152606401610a43565b82816002015410156132be5760405162461bcd60e51b815260206004820152602760248201527f66726f6d206e6f64652073686f756c64206861766520656e6f75676820636f6c6044820152661b185d195c985b60ca1b6064820152608401610a43565b6001600160a01b0380851660009081526101066020526040902082549091166133295760405162461bcd60e51b815260206004820152600f60248201527f6d697373696e6720746f206e6f646500000000000000000000000000000000006044820152606401610a43565b8382600201600082825461333d91906157ca565b9250508190555083816002016000828254613358919061594c565b909155505050505b5060019392505050565b6133726137c6565b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b61339d6137c6565b6101025461ffff8316106133b057600080fd5b6101025461ffff8216106133c357600080fd5b60ff80547fffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff16600160901b61ffff8581169182027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1692909217600160a01b928516928302179092556040805192835260208301919091527fcd481667fa77e513c517493174075f0471ec1fe24d57af644377cd1a2572d13d910160405180910390a15050565b6134726137c6565b606580546001600160a01b0383166001600160a01b031990911681179091556134a36033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600281015461010054825460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905260009392919091169063a9059cbb906044016020604051808303816000875af115801561353b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355f9190615792565b6135d15760405162461bcd60e51b815260206004820152602560248201527f6661696c656420746f20747261736665722066756e6473206261636b20746f2060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610a43565b600083600201819055508061010760008282546135ee91906157ca565b92505081905550806101086000828254613608919061594c565b90915550600090506001840154600160a01b900460ff16600281111561363057613630615043565b0361367a57613643600584016000614f3a565b613651600684016000614f5f565b600183015461366c90610102906001600160a01b0316613fb5565b50613675613afb565b610da9565b600180840154600160a01b900460ff16600281111561369b5761369b615043565b03610da957610101546001600160a01b03166136f95760405162461bcd60e51b815260206004820152601b60248201527f6e6f2073746f7261676520636f6e747261637420646566696e656400000000006044820152606401610a43565b6101015460018401546040517fb2b99ec90000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911690819063b2b99ec990602401600060405180830381600087803b15801561376057600080fd5b505af1158015613774573d6000803e3d6000fd5b5061378792505050600585016000614f3a565b613795600685016000614f5f565b6137a3600785016000614f3a565b60018401546137be90610104906001600160a01b0316613fb5565b505092915050565b6033546001600160a01b03163314611b315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a43565b610f276137c6565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156138605761385b836140e1565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156138ba575060408051601f3d908101601f191682019092526138b791810190615779565b60015b61392c5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610a43565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146139c15760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610a43565b5061385b83838361419f565b600054610100900460ff16611b315760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a43565b600054610100900460ff16613aa35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a43565b611b31335b606580546001600160a01b0319169055610f27816141ca565b60006004826004811115613ad757613ad7615043565b1480613af457506003826004811115613af257613af2615043565b145b1592915050565b6000805b61010254811015613b825760006101028281548110613b2057613b20615817565b60009182526020808320909101546001600160a01b03168083526101069091526040909120600881015491925090613b5a9060ff16613ac1565b15613b6d5783613b6981615aa9565b9450505b50508080613b7a9061582d565b915050613aff565b50610103805461ffff191661ffff83811691821790925560ff548392600160801b9091041690811015613bb3578091505b60ff5461ffff808316600160701b909204161115613bd057600080fd5b60ff5461ffff838116600160701b909204161461385b5760ff80547fffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff16600160701b61ffff858116918202929092179092556040805192835290831660208301527f81512b84dc2b38f82b4999b5512a14df033b165371fa51776cce559212bf0a44910160405180910390a1505050565b6000806001840154600160a01b900460ff166002811115613c8457613c84615043565b14613cd15760405162461bcd60e51b815260206004820152601660248201527f7265706f7274206f6e6c7920666f7220564e6f646573000000000000000000006044820152606401610a43565b60ff54606490613cef9061ffff80821691600160701b900416615aca565b613cf99190615afe565b61ffff1684511015613d4d5760405162461bcd60e51b815260206004820152601460248201527f73696720636f756e7420697320746f6f206c6f770000000000000000000000006044820152606401610a43565b600883015460ff166004816004811115613d6957613d69615043565b1480613d8657506003816004811115613d8457613d84615043565b145b15613d95576000915050613e00565b613da48787868887600061421c565b60ff54600485015461ffff620100009092048216911610613dc957613dc98685614892565b60ff5460048501546801000000000000000090910461ffff908116620100009092041610613dfa57613dfa84614af0565b60009150505b95945050505050565b6000600180850154600160a01b900460ff166002811115613e2c57613e2c615043565b14613e795760405162461bcd60e51b815260206004820152601660248201527f7265706f7274206f6e6c7920666f7220534e6f646573000000000000000000006044820152606401610a43565b60ff54606490613e979061ffff80821691600160701b900416615aca565b613ea19190615afe565b61ffff1685511015613ef55760405162461bcd60e51b815260206004820152601460248201527f73696720636f756e7420697320746f6f206c6f770000000000000000000000006044820152606401610a43565b600884015460ff166004816004811115613f1157613f11615043565b1480613f2e57506003816004811115613f2c57613f2c615043565b145b15613f3d576000915050613fab565b613f4b88888789888861421c565b60ff54600486015461ffff6401000000009092048216911610613f7257613f728786614892565b60ff5460048601546a010000000000000000000090910461ffff908116620100009092041610613fa557613fa585614af0565b60009150505b9695505050505050565b8154600090815b818110156140d657836001600160a01b0316858281548110613fe057613fe0615817565b6000918252602090912001546001600160a01b0316036140c4576140056001836157ca565b811461408657846140176001846157ca565b8154811061402757614027615817565b9060005260206000200160009054906101000a90046001600160a01b031685828154811061405757614057615817565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061409657614096615b1f565b600082815260209020810160001990810180546001600160a01b03191690550190555060019150610da99050565b806140ce8161582d565b915050613fbc565b506000949350505050565b6001600160a01b0381163b61415e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610a43565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6141a883614b97565b6000825111806141b55750805b1561385b576141c48383614bd7565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000846004016001018054806020026020016040519081016040528092919081815260200182805480156142a157602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f0104928301926001038202915080841161425e5790505b505083519394506000925050505b81811015614343578281815181106142c9576142c9615817565b60200260200101516001600160801b0316856001600160801b0316036143315760405162461bcd60e51b815260206004820152601060248201527f626c6f636b206973206e6f74206e6577000000000000000000000000000000006044820152606401610a43565b8061433b8161582d565b9150506142af565b50600180870154600160a01b900460ff16600281111561436557614365615043565b0361453057826001600160801b03166000036143c35760405162461bcd60e51b815260206004820152601760248201527f73746f72616765206b65792069732072657175697265640000000000000000006044820152606401610a43565b60008660040160030180548060200260200160405190810160405280929190818152602001828054801561444857602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116144055790505b505083519394506000925050505b818110156144ea5782818151811061447057614470615817565b60200260200101516001600160801b0316866001600160801b0316036144d85760405162461bcd60e51b815260206004820152601660248201527f73746f72616765206b6579206973206e6f74206e6577000000000000000000006044820152606401610a43565b806144e28161582d565b915050614456565b505050600786018054600180820183556000928352602090922060028204018054929091166010026101000a6001600160801b0381810219909316928616029190911790555b60048601805461ffff1690600061454683615aa9565b825461010092830a61ffff818102199092169290911602179091556005880180546001818101835560009283526020808420600284040180549390921660100290940a6001600160801b0381810219909316928a1602919091179055600689018054604080518286028101860190915281815292945091929091908301828280156145fa57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116145dc575b505083519394506000925050505b87518110156146fe5760005b828110156146eb5783818151811061462e5761462e615817565b60200260200101516001600160a01b031689838151811061465157614651615817565b60200260200101516001600160a01b031614801561469b575060006001600160a01b031689838151811061468757614687615817565b60200260200101516001600160a01b031614155b156146d95760008983815181106146b4576146b4615817565b60200260200101906001600160a01b031690816001600160a01b0316815250506146eb565b806146e38161582d565b915050614614565b50806146f68161582d565b915050614608565b5060005b87518110156147ab57600088828151811061471f5761471f615817565b6020026020010151905060006001600160a01b0316816001600160a01b031614614798578960040160020189838151811061475c5761475c615817565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b50806147a38161582d565b915050614702565b506000600889015460ff1660048111156147c7576147c7615043565b036147dc5760088801805460ff191660011790555b600180890154908a01546040517f19d5f3972073c7002111a82b2a44db11e739567a002445f2e3db8ab96fe6645f92614827926001600160a01b03918216929116908b908f90615b35565b60405180910390a16001880154600889015460028a01546040516001600160a01b03909316927ffadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3e9261487e9260ff9091169161575e565b60405180910390a250505050505050505050565b60ff5460009081906148b39084906601000000000000900461ffff16614c03565b600685018054604080516020808402820181019092528281529496509294506000939283018282801561490f57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116148f1575b5050505050905060008083118015614928575060008251115b156149d25781516149399084615b7b565b905060005b82518110156149d0576000610106600085848151811061496057614960615817565b6020908102919091018101516001600160a01b0390811683529082019290925260400160002080549092501661499657506149be565b828160020160008282546149aa919061594c565b909155506149ba905083866157ca565b9450505b806149c88161582d565b91505061493e565b505b828660020160008282546149e6919061594c565b909155506149fa9050600686016000614f5f565b6000600886015460ff166004811115614a1557614a15615043565b1480614a3957506001600886015460ff166004811115614a3757614a37615043565b145b15614a4e5760088501805460ff191660021790555b60048501805461ffff191680825562010000900461ffff16906002614a7283615aa9565b91906101000a81548161ffff021916908361ffff160217905550508460010160009054906101000a90046001600160a01b03166001600160a01b03167ffadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3e600286604051614ae092919061575e565b60405180910390a2505050505050565b60ff546000908190614b179084906c01000000000000000000000000900461ffff16614c03565b9092509050614b25836134db565b5060048301805463ffff00001916905560088301805460ff1916600390811790915560018401546040516001600160a01b03909116917ffadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3e91614b8a919060009061575e565b60405180910390a2505050565b614ba0816140e1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060614bfc8383604051806060016040528060278152602001615be760279139614ca5565b9392505050565b60008060648363ffffffff161115614c5d5760405162461bcd60e51b815260206004820181905260248201527f70657263656e746167652073686f756c6420626520696e205b302c203130305d6044820152606401610a43565b60028401546064614c6e8582615b8f565b614c7e9063ffffffff1683615bb3565b614c889190615b7b565b9250614c9483826157ca565b600286018490559150509250929050565b6060600080856001600160a01b031685604051614cc29190615bca565b600060405180830381855af49150503d8060008114614cfd576040519150601f19603f3d011682016040523d82523d6000602084013e614d02565b606091505b5091509150613fab8683838760608315614d7d578251600003614d76576001600160a01b0385163b614d765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a43565b5081614d87565b614d878383614d8f565b949350505050565b815115614d9f5781518083602001fd5b8060405162461bcd60e51b8152600401610a43919061574b565b6040805160e081018252600080825260208201819052909182019081526020016000815260200160608152602001614e216040518060a00160405280600061ffff168152602001600061ffff1681526020016060815260200160608152602001606081525090565b81526020016000905290565b82805482825590600052602060002090600101600290048101928215614ed55791602002820160005b83821115614ea057835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f01049283019260010302614e56565b8015614ed35782816101000a8154906001600160801b030219169055601001602081600f01049283019260010302614ea0565b505b50614ee1929150614f79565b5090565b828054828255906000526020600020908101928215614ed5579160200282015b82811115614ed557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614f05565b508054600082556001016002900490600052602060002090810190610f279190614f79565b5080546000825590600052602060002090810190610f2791905b5b80821115614ee15760008155600101614f7a565b600081518084526020808501945080840160005b83811015614fc75781516001600160a01b031687529582019590820190600101614fa2565b509495945050505050565b602081526000614bfc6020830184614f8e565b6001600160a01b0381168114610f2757600080fd5b60006020828403121561500c57600080fd5b8135614bfc81614fe5565b6000806040838503121561502a57600080fd5b823561503581614fe5565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60038110610f2757610f27615043565b60005b8381101561508457818101518382015260200161506c565b50506000910152565b600081518084526150a5816020860160208601615069565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015614fc75781516001600160801b0316875295820195908201906001016150cd565b600061ffff8083511684526020818185015116818601526040840151915060a0604086015261512460a08601836150b9565b60608581015187830391880191909152805180835290830193506000918301905b8083101561516e5784516001600160a01b03168252938301936001929092019190830190615145565b5060808601519350868103608088015261518881856150b9565b979650505050505050565b600581106151a3576151a3615043565b9052565b6001600160a01b0388811682528716602082015260006151c687615059565b86604083015285606083015260e060808301526151e660e083018661508d565b82810360a08401526151f881866150f2565b91505061520860c0830184615193565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561525357615253615214565b604052919050565b600067ffffffffffffffff83111561527557615275615214565b615288601f8401601f191660200161522a565b905082815283838301111561529c57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126152c457600080fd5b614bfc8383356020850161525b565b600080604083850312156152e657600080fd5b82356152f181614fe5565b9150602083013567ffffffffffffffff81111561530d57600080fd5b615319858286016152b3565b9150509250929050565b60006020828403121561533557600080fd5b5035919050565b6020815260006001600160a01b0380845116602084015280602085015116604084015250604083015161536e81615059565b8060608401525060608301516080830152608083015160e060a084015261539961010084018261508d565b905060a0840151601f198483030160c08501526153b682826150f2565b91505060c08401516153cb60e0850182615193565b509392505050565b803561ffff811681146153e557600080fd5b919050565b60008060008060008060008060008060006101608c8e03121561540c57600080fd5b6154158c6153d3565b9a5060208c013561542581614fe5565b995061543360408d016153d3565b985061544160608d016153d3565b975061544f60808d016153d3565b965061545d60a08d016153d3565b955061546b60c08d016153d3565b945061547960e08d016153d3565b93506154886101008d016153d3565b92506154976101208d016153d3565b91506154a66101408d016153d3565b90509295989b509295989b9093969950565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561552757888303603f19018552815180516001600160a01b031684528701518784018790526155148785018261508d565b95880195935050908601906001016154df565b509098975050505050505050565b8035600381106153e557600080fd5b6000806000806080858703121561555a57600080fd5b8435935061556a60208601615535565b9250604085013567ffffffffffffffff81111561558657600080fd5b8501601f8101871361559757600080fd5b6155a68782356020840161525b565b92505060608501356155b781614fe5565b939692955090935050565b6000806000606084860312156155d757600080fd5b6155e084615535565b925060208085013567ffffffffffffffff808211156155fe57600080fd5b61560a888389016152b3565b9450604087013591508082111561562057600080fd5b818701915087601f83011261563457600080fd5b81358181111561564657615646615214565b8060051b61565585820161522a565b918252838101850191858101908b84111561566f57600080fd5b86860192505b838310156156ab5782358581111561568d5760008081fd5b61569b8d89838a01016152b3565b8352509186019190860190615675565b809750505050505050509250925092565b6000602082840312156156ce57600080fd5b614bfc826153d3565b6000806000606084860312156156ec57600080fd5b83356156f781614fe5565b9250602084013561570781614fe5565b929592945050506040919091013590565b6000806040838503121561572b57600080fd5b615734836153d3565b9150615742602084016153d3565b90509250929050565b602081526000614bfc602083018461508d565b6040810161576c8285615193565b8260208301529392505050565b60006020828403121561578b57600080fd5b5051919050565b6000602082840312156157a457600080fd5b81518015158114614bfc57600080fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610da957610da96157b4565b600181811c908216806157f157607f821691505b60208210810361581157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161583f5761583f6157b4565b5060010190565b601f82111561385b57600081815260208120601f850160051c8101602086101561586d5750805b601f850160051c820191505b81811015612da257828155600101615879565b815167ffffffffffffffff8111156158a6576158a6615214565b6158ba816158b484546157dd565b84615846565b602080601f8311600181146158ef57600084156158d75750858301515b600019600386901b1c1916600185901b178555612da2565b600085815260208120601f198616915b8281101561591e578886015182559484019460019091019084016158ff565b508582101561593c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610da957610da96157b4565b805160ff811681146153e557600080fd5b60006020828403121561598257600080fd5b614bfc8261595f565b61599484615059565b838152826020820152606060408201526000613e00606083018461508d565b6040815260006159c6604083018561508d565b8281036020840152613e00818561508d565b6000602082840312156159ea57600080fd5b8151614bfc81614fe5565b80516001600160801b03811681146153e557600080fd5b600080600060608486031215615a2157600080fd5b615a2a8461595f565b9250615a38602085016159f5565b91506040840151615a4881614fe5565b809150509250925092565b60008060008060808587031215615a6957600080fd5b615a728561595f565b9350615a80602086016159f5565b92506040850151615a9081614fe5565b9150615a9e606086016159f5565b905092959194509250565b600061ffff808316818103615ac057615ac06157b4565b6001019392505050565b61ffff8181168382160280821691908281146137be576137be6157b4565b634e487b7160e01b600052601260045260246000fd5b600061ffff80841680615b1357615b13615ae8565b92169190910492915050565b634e487b7160e01b600052603160045260246000fd5b60006001600160a01b03808716835280861660208401525060806040830152615b616080830185614f8e565b9050615b6c83615059565b82606083015295945050505050565b600082615b8a57615b8a615ae8565b500490565b63ffffffff828116828216039080821115615bac57615bac6157b4565b5092915050565b8082028115828204841417610da957610da96157b4565b60008251615bdc818460208701615069565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122019aa0081e69056404e40023f916698c2b116cb83388048dea2cf1b230e45ab7b64736f6c63430008110033", - "deployedBytecode": "0x60806040526004361061031e5760003560e01c80637f6e29de116101a5578063bdb860ea116100ec578063e67a5d7811610095578063f6e8913d1161006f578063f6e8913d146108b2578063f7714eb9146108d7578063fdd9344c146108fe578063ffa1ad741461092057600080fd5b8063e67a5d781461085c578063f108f5b61461087c578063f2fde38b1461089257600080fd5b8063dc38b0a2116100c6578063dc38b0a214610808578063dd6f8f9014610828578063e30c39781461083e57600080fd5b8063bdb860ea146107b2578063c993d861146107c8578063ce3e7e91146107e857600080fd5b8063931127a01161014e578063adf1daa611610128578063adf1daa614610750578063b10064eb14610772578063b27b154d1461079257600080fd5b8063931127a0146106fa578063974c5b411461071b5780639c30db5c1461073057600080fd5b806384f21a441161017f57806384f21a441461069a5780638b8f631f146106bc5780638da5cb5b146106dc57600080fd5b80637f6e29de14610658578063817b1cd21461066e57806381ebc5061461068557600080fd5b80633659cfe61161026957806365cdbaea11610212578063715018a6116101ec578063715018a61461061357806379ba5097146106285780637c4981c81461063d57600080fd5b806365cdbaea146105ae5780636dcd3af2146105d75780636ddf344a146105f757600080fd5b806352d1902d1161024357806352d1902d1461054c578063569c876214610561578063582115fb1461058157600080fd5b80633659cfe6146104e65780633a688a2f146105065780634f1ef2861461053957600080fd5b80631acf7629116102cb57806324212b86116102a557806324212b86146104855780632ae9c6001461049b578063339f334b146104b657600080fd5b80631acf76291461041657806323b8ac5d1461043857806323deecfe1461046357600080fd5b8063125c6c98116102fc578063125c6c98146103b957806313114a9d146103dd57806315aa7b06146103f457600080fd5b8063011f59a014610323578063024f38cb1461035d57806311ce026714610380575b600080fd5b34801561032f57600080fd5b5060ff5461034590600160701b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561036957600080fd5b5060ff5461034590640100000000900461ffff1681565b34801561038c57600080fd5b50610101546103a1906001600160a01b031681565b6040516001600160a01b039091168152602001610354565b3480156103c557600080fd5b506103cf60fc5481565b604051908152602001610354565b3480156103e957600080fd5b506103cf6101085481565b34801561040057600080fd5b50610409610976565b6040516103549190614fd2565b34801561042257600080fd5b50610436610431366004614ffa565b6109d9565b005b34801561044457600080fd5b5060ff54610345906c01000000000000000000000000900461ffff1681565b34801561046f57600080fd5b5060ff5461034590600160801b900461ffff1681565b34801561049157600080fd5b506103cf60fe5481565b3480156104a757600080fd5b5060fb546103459061ffff1681565b3480156104c257600080fd5b506104d66104d1366004615017565b610b34565b6040519015158152602001610354565b3480156104f257600080fd5b50610436610501366004614ffa565b610daf565b34801561051257600080fd5b50610526610521366004614ffa565b610f2a565b60405161035497969594939291906151a7565b6104366105473660046152d3565b61119e565b34801561055857600080fd5b506103cf61130a565b34801561056d57600080fd5b506103a161057c366004615323565b6113cf565b34801561058d57600080fd5b506105a161059c366004614ffa565b6113fa565b604051610354919061533c565b3480156105ba57600080fd5b5060ff54610345906a0100000000000000000000900461ffff1681565b3480156105e357600080fd5b506104366105f23660046153ea565b6116eb565b34801561060357600080fd5b50610103546103459061ffff1681565b34801561061f57600080fd5b50610436611b1f565b34801561063457600080fd5b50610436611b33565b34801561064957600080fd5b5060ff546103459061ffff1681565b34801561066457600080fd5b50610105546103cf565b34801561067a57600080fd5b506103cf6101075481565b34801561069157600080fd5b50610409611bbe565b3480156106a657600080fd5b506106af611c1f565b60405161035491906154b8565b3480156106c857600080fd5b506103a16106d7366004615323565b611e6e565b3480156106e857600080fd5b506033546001600160a01b03166103a1565b34801561070657600080fd5b5060ff546103459062010000900461ffff1681565b34801561072757600080fd5b50610409611e7f565b34801561073c57600080fd5b5061043661074b366004615544565b611ee0565b34801561075c57600080fd5b5060ff5461034590600160901b900461ffff1681565b34801561077e57600080fd5b5061043661078d3660046155c2565b612775565b34801561079e57600080fd5b506104366107ad3660046156bc565b612daa565b3480156107be57600080fd5b50610104546103cf565b3480156107d457600080fd5b506103a16107e3366004615323565b612e7c565b3480156107f457600080fd5b506104d66108033660046156d7565b612e8d565b34801561081457600080fd5b50610436610823366004614ffa565b61336a565b34801561083457600080fd5b506103cf60fd5481565b34801561084a57600080fd5b506065546001600160a01b03166103a1565b34801561086857600080fd5b50610436610877366004615718565b613395565b34801561088857600080fd5b50610102546103cf565b34801561089e57600080fd5b506104366108ad366004614ffa565b61346a565b3480156108be57600080fd5b5060ff54610345906601000000000000900461ffff1681565b3480156108e357600080fd5b5060ff546103459068010000000000000000900461ffff1681565b34801561090a57600080fd5b5060ff5461034590600160a01b900461ffff1681565b34801561092c57600080fd5b506109696040518060400160405280600581526020017f302e302e3200000000000000000000000000000000000000000000000000000081525081565b604051610354919061574b565b60606101058054806020026020016040519081016040528092919081815260200182805480156109cf57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109b1575b5050505050905090565b6001600160a01b038082166000908152610106602052604090206001810154909116610a4c5760405162461bcd60e51b815260206004820152601460248201527f6e6f646520646f6573206e6f742065786973747300000000000000000000000060448201526064015b60405180910390fd5b80546001600160a01b0316331480610a7d575033610a726033546001600160a01b031690565b6001600160a01b0316145b610ac95760405162461bcd60e51b815260206004820152601d60248201527f6f6e6c79206f776e65722063616e20756e7374616b652061206e6f64650000006044820152606401610a43565b610ad2816134db565b5060088101805460ff1916600490811790915560018201546040516001600160a01b03909116917ffadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3e91610b28919060009061575e565b60405180910390a25050565b6000610b3e6137c6565b6001600160a01b038316610b945760405162461bcd60e51b815260206004820152601260248201527f696e76616c696420746f206164647265737300000000000000000000000000006044820152606401610a43565b60008211610be45760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e740000000000000000000000000000000000006044820152606401610a43565b610108548211158015610c7c5750610100546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c789190615779565b8211155b610cc85760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610a43565b6101005460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190615792565b610d8c5760405162461bcd60e51b815260206004820152601260248201527f6661696c656420746f207472616e7366657200000000000000000000000000006044820152606401610a43565b816101086000828254610d9f91906157ca565b9091555060019150505b92915050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e3c5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610a43565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e977f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610f025760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610a43565b610f0b81613820565b60408051600080825260208201909252610f2791839190613828565b50565b6101066020526000908152604090208054600182015460028301546003840180546001600160a01b039485169594841694600160a01b90940460ff16939190610f72906157dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9e906157dd565b8015610feb5780601f10610fc057610100808354040283529160200191610feb565b820191906000526020600020905b815481529060010190602001808311610fce57829003601f168201915b50506040805160a08101825260048701805461ffff808216845262010000909104166020808401919091526005890180548551818402810184018752818152999a99949850929650938701945091929183018282801561109c57602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116110595790505b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156110fe57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110e0575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561118857602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116111455790505b5050509190925250505060089091015460ff1687565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361122b5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610a43565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b0316146112f15760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610a43565b6112fa82613820565b61130682826001613828565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113aa5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a43565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61010581815481106113e057600080fd5b6000918252602090912001546001600160a01b0316905081565b611402614db9565b6001600160a01b0382811660009081526101066020908152604091829020825160e08101845281548516815260018201549485169281019290925290929091830190600160a01b900460ff16600281111561145f5761145f615043565b600281111561147057611470615043565b81526020016002820154815260200160038201805461148e906157dd565b80601f01602080910402602001604051908101604052809291908181526020018280546114ba906157dd565b80156115075780601f106114dc57610100808354040283529160200191611507565b820191906000526020600020905b8154815290600101906020018083116114ea57829003601f168201915b50505091835250506040805160a08101825260048401805461ffff808216845262010000909104166020838101919091526005860180548551818402810184018752818152968301969495939493860193928301828280156115ba57602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116115775790505b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561161c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115fe575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156116a657602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116116635790505b505050919092525050508152600882015460209091019060ff1660048111156116d1576116d1615043565b60048111156116e2576116e2615043565b90525092915050565b600054610100900460ff161580801561170b5750600054600160ff909116105b806117255750303b158015611725575060005460ff166001145b6117975760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a43565b6000805460ff1916600117905580156117ba576000805461ff0019166101001790555b6117c26139cd565b6117ca613a38565b60fb805461ffff191661ffff8e161790556001600160a01b038b166117ee57600080fd5b61010080546001600160a01b0319166001600160a01b038d1617905561ffff8a1661185b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642061747465737465727320616d6f756e7400000000000000006044820152606401610a43565b60ff805461ffff808d16600160801b0271ffff00000000000000000000000000000000199092169190911790915589166118fd5760405162461bcd60e51b815260206004820152602160248201527f696e76616c6964206e6f646552616e646f6d4d696e436f756e7420616d6f756e60448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610a43565b60ff805461ffff808c16600160901b027fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff9092169190911790915588166119ac5760405162461bcd60e51b815260206004820152602c60248201527f696e76616c6964206e6f646552616e646f6d46696c74657250696e677352657160448201527f756972656420616d6f756e7400000000000000000000000000000000000000006064820152608401610a43565b8760ff60146101000a81548161ffff021916908361ffff160217905550606460fc81905550606460fd81905550606460fe819055508660ff60026101000a81548161ffff021916908361ffff1602179055508560ff60046101000a81548161ffff021916908361ffff1602179055508260ff60066101000a81548161ffff021916908361ffff1602179055508460ff60086101000a81548161ffff021916908361ffff1602179055508360ff600a6101000a81548161ffff021916908361ffff1602179055508160ff600c6101000a81548161ffff021916908361ffff160217905550604260ff60006101000a81548161ffff021916908361ffff160217905550600060ff600e6101000a81548161ffff021916908361ffff1602179055508015611b11576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b611b276137c6565b611b316000613aa8565b565b60655433906001600160a01b03168114611bb55760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610a43565b610f2781613aa8565b60606101048054806020026020016040519081016040528092919081815260200182805480156109cf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109b1575050505050905090565b60606000805b61010254811015611ca85760006101028281548110611c4657611c46615817565b60009182526020808320909101546001600160a01b03168083526101069091526040909120600881015491925090611c809060ff16613ac1565b15611c935783611c8f8161582d565b9450505b50508080611ca09061582d565b915050611c25565b5060008167ffffffffffffffff811115611cc457611cc4615214565b604051908082528060200260200182016040528015611d0a57816020015b604080518082019091526000815260606020820152815260200190600190039081611ce25790505b5090506000805b61010254811015611e655760006101028281548110611d3257611d32615817565b60009182526020808320909101546001600160a01b03168083526101069091526040909120600881015491925090611d6c9060ff16613ac1565b611d77575050611e53565b6040805180820190915260018201546001600160a01b03168152600382018054602083019190611da6906157dd565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd2906157dd565b8015611e1f5780601f10611df457610100808354040283529160200191611e1f565b820191906000526020600020905b815481529060010190602001808311611e0257829003601f168201915b5050505050815250858580611e339061582d565b965081518110611e4557611e45615817565b602002602001018190525050505b80611e5d8161582d565b915050611d11565b50909392505050565b61010481815481106113e057600080fd5b60606101028054806020026020016040519081016040528092919081815260200182805480156109cf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109b1575050505050905090565b6000836002811115611ef457611ef4615043565b03611fa65760fc54841015611f555760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220564e4f446044820152604560f81b6064820152608401610a43565b61010280546001810182556000919091527f93bdaa6a4190909b7c3fbe8d42169ffe1cab19f51dfc8db24c71abf849eced4a0180546001600160a01b0319166001600160a01b03831617905561217a565b6001836002811115611fba57611fba615043565b0361206c5760fd5484101561201b5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220534e4f446044820152604560f81b6064820152608401610a43565b61010480546001810182556000919091527f4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe0180546001600160a01b0319166001600160a01b03831617905561217a565b600283600281111561208057612080615043565b036121325760fe548410156120e15760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220444e4f446044820152604560f81b6064820152608401610a43565b61010580546001810182556000919091527ffc62abc8c0fc47c2d92f5aec99bf8b60f375828e14394d89345cae11a98673710180546001600160a01b0319166001600160a01b03831617905561217a565b60405162461bcd60e51b815260206004820152601560248201527f756e737570706f72746564206e6f6465547970652000000000000000000000006044820152606401610a43565b6001600160a01b0380821660009081526101066020526040902080549091161561220c5760405162461bcd60e51b815260206004820152602560248201527f61206e6f64652077697468207075624b657920697320616c726561647920646560448201527f66696e65640000000000000000000000000000000000000000000000000000006064820152608401610a43565b841561231957610100546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201526000916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f9190615779565b9050858110156123175760405162461bcd60e51b815260206004820152603260248201527f5f6e6f6465546f6b656e732063616e6e6f74206265207472616e73666572726560448201527f642c20636865636b20616c6c6f77616e636500000000000000000000000000006064820152608401610a43565b505b612321614db9565b3381526001600160a01b03831660208201526040810185600281111561234957612349615043565b9081600281111561235c5761235c615043565b90525060608101869052608081018490526001600160a01b0380841660009081526101066020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549190951692811683178555928501518594919390927fffffffffffffffffffffff00000000000000000000000000000000000000000090911617600160a01b8360028111156123fc576123fc615043565b0217905550606082015160028201556080820151600382019061241f908261588c565b5060a0820151805160048301805460208085015161ffff908116620100000263ffffffff1990931694169390931717815560408301518051919261246b92600587019290910190614e2d565b5060608201518051612487916002840191602090910190614ee5565b50608082015180516124a3916003840191602090910190614e2d565b50505060c082015160088201805460ff191660018360048111156124c9576124c9615043565b021790555050861590506125de57610100546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256c9190615792565b6125de5760405162461bcd60e51b815260206004820152602560248201527f6661696c656420746f207472616e7366657220746f6b656e7320746f20636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610a43565b8561010760008282546125f1919061594c565b909155506000905085600281111561260b5761260b615043565b0361261d57612618613afb565b61271e565b600185600281111561263157612631615043565b0361271e57610101546001600160a01b031661268f5760405162461bcd60e51b815260206004820152601b60248201527f6e6f2073746f7261676520636f6e747261637420646566696e656400000000006044820152606401610a43565b610101546040517f9d95f1cc0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116908190639d95f1cc906024016020604051808303816000875af11580156126f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271b9190615970565b50505b826001600160a01b0316336001600160a01b03167f67bd55f864dcc77d483ff7567de0889142417ef6d0299753cfd80e4c72ddc5548789886040516127659392919061598b565b60405180910390a3505050505050565b3360009081526101066020526040902060018101546001600160a01b03166127df5760405162461bcd60e51b815260206004820152601060248201527f696e76616c6964207265706f72746572000000000000000000000000000000006044820152606401610a43565b600080835167ffffffffffffffff8111156127fc576127fc615214565b604051908082528060200260200182016040528015612825578160200160208202803683370190505b50905060005b84518110156129b457600073__$7aaf162b34d2533b02434bde51cad0c5c5$__6336de68108888858151811061286357612863615817565b60200260200101516040518363ffffffff1660e01b81526004016128889291906159b3565b602060405180830381865af41580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c991906159d8565b6001600160a01b03808216600090815261010660205260409020600181015492935091166128f85750506129a2565b6000805b8681101561295157836001600160a01b031686828151811061292057612920615817565b60200260200101516001600160a01b03160361293f5760019150612951565b806129498161582d565b9150506128fc565b508015612960575050506129a2565b82858761296c8161582d565b98508151811061297e5761297e615817565b60200260200101906001600160a01b031690816001600160a01b0316815250505050505b806129ac8161582d565b91505061282b565b508351821015612a6a5760008267ffffffffffffffff8111156129d9576129d9615214565b604051908082528060200260200182016040528015612a02578160200160208202803683370190505b50905060005b83811015612a6657828181518110612a2257612a22615817565b6020026020010151828281518110612a3c57612a3c615817565b6001600160a01b039092166020928302919091019091015280612a5e8161582d565b915050612a08565b5090505b6000866002811115612a7e57612a7e615043565b03612c0957600080600087806020019051810190612a9c9190615a0c565b9194509250905060ff8316600114612af65760405162461bcd60e51b815260206004820152601c60248201527f7265706f727420616374696f6e206f6e6c7920737570706f72746564000000006044820152606401610a43565b6001600160a01b038082166000908152610106602052604090206001810154909116612b6f5760405162461bcd60e51b815260206004820152602260248201527f746172676574206e6f64652077616c6c657420646f6573206e6f742065786973604482015261747360f01b6064820152608401610a43565b60006001820154600160a01b900460ff166002811115612b9157612b91615043565b14612bde5760405162461bcd60e51b815260206004820152601660248201527f7265706f7274206f6e6c7920666f7220564e6f646573000000000000000000006044820152606401610a43565b612bff8460ff166002811115612bf657612bf6615043565b88878487613c61565b5050505050612da2565b6001866002811115612c1d57612c1d615043565b03612da25760008060008088806020019051810190612c3c9190615a53565b9296509094509250905060ff8416600214612c995760405162461bcd60e51b815260206004820152601c60248201527f7265706f727420616374696f6e206f6e6c7920737570706f72746564000000006044820152606401610a43565b6001600160a01b038083166000908152610106602052604090206001810154909116612d125760405162461bcd60e51b815260206004820152602260248201527f746172676574206e6f64652077616c6c657420646f6573206e6f742065786973604482015261747360f01b6064820152608401610a43565b600180820154600160a01b900460ff166002811115612d3357612d33615043565b14612d805760405162461bcd60e51b815260206004820152601660248201527f7265706f7274206f6e6c7920666f7220534e6f646573000000000000000000006044820152606401610a43565b611b118560ff166002811115612d9857612d98615043565b8988848887613e09565b505050505050565b612db26137c6565b6101025461ffff82161115612e095760405162461bcd60e51b815260206004820152601c60248201527f696e636f72726563742076616c506572426c6f636b5461726765745f000000006044820152606401610a43565b60ff805471ffff000000000000000000000000000000001916600160801b61ffff848116918202929092179283905560408051600160701b909404909216835260208301527f81512b84dc2b38f82b4999b5512a14df033b165371fa51776cce559212bf0a44910160405180910390a150565b61010281815481106113e057600080fd5b6000612e976137c6565b60008211612ee75760405162461bcd60e51b815260206004820152601960248201527f616d6f756e742073686f756c6420626520706f736974697665000000000000006044820152606401610a43565b826001600160a01b0316846001600160a01b031603612f6e5760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616e73666572206265747765656e2073616d652061646460448201527f72657373657300000000000000000000000000000000000000000000000000006064820152608401610a43565b6001600160a01b03831615801590612f8d57506001600160a01b038416155b156130b45781610108541015612ff55760405162461bcd60e51b815260206004820152602760248201527f66726f6d206e6f64652073686f756c64206861766520656e6f75676820636f6c6044820152661b185d195c985b60ca1b6064820152608401610a43565b6001600160a01b0380841660009081526101066020526040902080549091166130605760405162461bcd60e51b815260206004820152600f60248201527f6d697373696e6720746f206e6f646500000000000000000000000000000000006044820152606401610a43565b82610108600082825461307391906157ca565b9250508190555082610107600082825461308d919061594c565b92505081905550828160020160008282546130a8919061594c565b90915550613360915050565b6001600160a01b038416158015906130d357506001600160a01b038316155b156131ef576001600160a01b0380851660009081526101066020526040902080549091166131435760405162461bcd60e51b815260206004820152601160248201527f6d697373696e672066726f6d206e6f64650000000000000000000000000000006044820152606401610a43565b82816002015410156131a75760405162461bcd60e51b815260206004820152602760248201527f66726f6d206e6f64652073686f756c64206861766520656e6f75676820636f6c6044820152661b185d195c985b60ca1b6064820152608401610a43565b828160020160008282546131bb91906157ca565b925050819055508261010760008282546131d591906157ca565b925050819055508261010860008282546130a8919061594c565b6001600160a01b03808516600090815261010660205260409020805490911661325a5760405162461bcd60e51b815260206004820152601160248201527f6d697373696e672066726f6d206e6f64650000000000000000000000000000006044820152606401610a43565b82816002015410156132be5760405162461bcd60e51b815260206004820152602760248201527f66726f6d206e6f64652073686f756c64206861766520656e6f75676820636f6c6044820152661b185d195c985b60ca1b6064820152608401610a43565b6001600160a01b0380851660009081526101066020526040902082549091166133295760405162461bcd60e51b815260206004820152600f60248201527f6d697373696e6720746f206e6f646500000000000000000000000000000000006044820152606401610a43565b8382600201600082825461333d91906157ca565b9250508190555083816002016000828254613358919061594c565b909155505050505b5060019392505050565b6133726137c6565b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b61339d6137c6565b6101025461ffff8316106133b057600080fd5b6101025461ffff8216106133c357600080fd5b60ff80547fffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff16600160901b61ffff8581169182027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1692909217600160a01b928516928302179092556040805192835260208301919091527fcd481667fa77e513c517493174075f0471ec1fe24d57af644377cd1a2572d13d910160405180910390a15050565b6134726137c6565b606580546001600160a01b0383166001600160a01b031990911681179091556134a36033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600281015461010054825460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905260009392919091169063a9059cbb906044016020604051808303816000875af115801561353b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355f9190615792565b6135d15760405162461bcd60e51b815260206004820152602560248201527f6661696c656420746f20747261736665722066756e6473206261636b20746f2060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610a43565b600083600201819055508061010760008282546135ee91906157ca565b92505081905550806101086000828254613608919061594c565b90915550600090506001840154600160a01b900460ff16600281111561363057613630615043565b0361367a57613643600584016000614f3a565b613651600684016000614f5f565b600183015461366c90610102906001600160a01b0316613fb5565b50613675613afb565b610da9565b600180840154600160a01b900460ff16600281111561369b5761369b615043565b03610da957610101546001600160a01b03166136f95760405162461bcd60e51b815260206004820152601b60248201527f6e6f2073746f7261676520636f6e747261637420646566696e656400000000006044820152606401610a43565b6101015460018401546040517fb2b99ec90000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911690819063b2b99ec990602401600060405180830381600087803b15801561376057600080fd5b505af1158015613774573d6000803e3d6000fd5b5061378792505050600585016000614f3a565b613795600685016000614f5f565b6137a3600785016000614f3a565b60018401546137be90610104906001600160a01b0316613fb5565b505092915050565b6033546001600160a01b03163314611b315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a43565b610f276137c6565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156138605761385b836140e1565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156138ba575060408051601f3d908101601f191682019092526138b791810190615779565b60015b61392c5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610a43565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146139c15760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610a43565b5061385b83838361419f565b600054610100900460ff16611b315760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a43565b600054610100900460ff16613aa35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a43565b611b31335b606580546001600160a01b0319169055610f27816141ca565b60006004826004811115613ad757613ad7615043565b1480613af457506003826004811115613af257613af2615043565b145b1592915050565b6000805b61010254811015613b825760006101028281548110613b2057613b20615817565b60009182526020808320909101546001600160a01b03168083526101069091526040909120600881015491925090613b5a9060ff16613ac1565b15613b6d5783613b6981615aa9565b9450505b50508080613b7a9061582d565b915050613aff565b50610103805461ffff191661ffff83811691821790925560ff548392600160801b9091041690811015613bb3578091505b60ff5461ffff808316600160701b909204161115613bd057600080fd5b60ff5461ffff838116600160701b909204161461385b5760ff80547fffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff16600160701b61ffff858116918202929092179092556040805192835290831660208301527f81512b84dc2b38f82b4999b5512a14df033b165371fa51776cce559212bf0a44910160405180910390a1505050565b6000806001840154600160a01b900460ff166002811115613c8457613c84615043565b14613cd15760405162461bcd60e51b815260206004820152601660248201527f7265706f7274206f6e6c7920666f7220564e6f646573000000000000000000006044820152606401610a43565b60ff54606490613cef9061ffff80821691600160701b900416615aca565b613cf99190615afe565b61ffff1684511015613d4d5760405162461bcd60e51b815260206004820152601460248201527f73696720636f756e7420697320746f6f206c6f770000000000000000000000006044820152606401610a43565b600883015460ff166004816004811115613d6957613d69615043565b1480613d8657506003816004811115613d8457613d84615043565b145b15613d95576000915050613e00565b613da48787868887600061421c565b60ff54600485015461ffff620100009092048216911610613dc957613dc98685614892565b60ff5460048501546801000000000000000090910461ffff908116620100009092041610613dfa57613dfa84614af0565b60009150505b95945050505050565b6000600180850154600160a01b900460ff166002811115613e2c57613e2c615043565b14613e795760405162461bcd60e51b815260206004820152601660248201527f7265706f7274206f6e6c7920666f7220534e6f646573000000000000000000006044820152606401610a43565b60ff54606490613e979061ffff80821691600160701b900416615aca565b613ea19190615afe565b61ffff1685511015613ef55760405162461bcd60e51b815260206004820152601460248201527f73696720636f756e7420697320746f6f206c6f770000000000000000000000006044820152606401610a43565b600884015460ff166004816004811115613f1157613f11615043565b1480613f2e57506003816004811115613f2c57613f2c615043565b145b15613f3d576000915050613fab565b613f4b88888789888861421c565b60ff54600486015461ffff6401000000009092048216911610613f7257613f728786614892565b60ff5460048601546a010000000000000000000090910461ffff908116620100009092041610613fa557613fa585614af0565b60009150505b9695505050505050565b8154600090815b818110156140d657836001600160a01b0316858281548110613fe057613fe0615817565b6000918252602090912001546001600160a01b0316036140c4576140056001836157ca565b811461408657846140176001846157ca565b8154811061402757614027615817565b9060005260206000200160009054906101000a90046001600160a01b031685828154811061405757614057615817565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061409657614096615b1f565b600082815260209020810160001990810180546001600160a01b03191690550190555060019150610da99050565b806140ce8161582d565b915050613fbc565b506000949350505050565b6001600160a01b0381163b61415e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610a43565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6141a883614b97565b6000825111806141b55750805b1561385b576141c48383614bd7565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000846004016001018054806020026020016040519081016040528092919081815260200182805480156142a157602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f0104928301926001038202915080841161425e5790505b505083519394506000925050505b81811015614343578281815181106142c9576142c9615817565b60200260200101516001600160801b0316856001600160801b0316036143315760405162461bcd60e51b815260206004820152601060248201527f626c6f636b206973206e6f74206e6577000000000000000000000000000000006044820152606401610a43565b8061433b8161582d565b9150506142af565b50600180870154600160a01b900460ff16600281111561436557614365615043565b0361453057826001600160801b03166000036143c35760405162461bcd60e51b815260206004820152601760248201527f73746f72616765206b65792069732072657175697265640000000000000000006044820152606401610a43565b60008660040160030180548060200260200160405190810160405280929190818152602001828054801561444857602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116144055790505b505083519394506000925050505b818110156144ea5782818151811061447057614470615817565b60200260200101516001600160801b0316866001600160801b0316036144d85760405162461bcd60e51b815260206004820152601660248201527f73746f72616765206b6579206973206e6f74206e6577000000000000000000006044820152606401610a43565b806144e28161582d565b915050614456565b505050600786018054600180820183556000928352602090922060028204018054929091166010026101000a6001600160801b0381810219909316928616029190911790555b60048601805461ffff1690600061454683615aa9565b825461010092830a61ffff818102199092169290911602179091556005880180546001818101835560009283526020808420600284040180549390921660100290940a6001600160801b0381810219909316928a1602919091179055600689018054604080518286028101860190915281815292945091929091908301828280156145fa57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116145dc575b505083519394506000925050505b87518110156146fe5760005b828110156146eb5783818151811061462e5761462e615817565b60200260200101516001600160a01b031689838151811061465157614651615817565b60200260200101516001600160a01b031614801561469b575060006001600160a01b031689838151811061468757614687615817565b60200260200101516001600160a01b031614155b156146d95760008983815181106146b4576146b4615817565b60200260200101906001600160a01b031690816001600160a01b0316815250506146eb565b806146e38161582d565b915050614614565b50806146f68161582d565b915050614608565b5060005b87518110156147ab57600088828151811061471f5761471f615817565b6020026020010151905060006001600160a01b0316816001600160a01b031614614798578960040160020189838151811061475c5761475c615817565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b50806147a38161582d565b915050614702565b506000600889015460ff1660048111156147c7576147c7615043565b036147dc5760088801805460ff191660011790555b600180890154908a01546040517f19d5f3972073c7002111a82b2a44db11e739567a002445f2e3db8ab96fe6645f92614827926001600160a01b03918216929116908b908f90615b35565b60405180910390a16001880154600889015460028a01546040516001600160a01b03909316927ffadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3e9261487e9260ff9091169161575e565b60405180910390a250505050505050505050565b60ff5460009081906148b39084906601000000000000900461ffff16614c03565b600685018054604080516020808402820181019092528281529496509294506000939283018282801561490f57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116148f1575b5050505050905060008083118015614928575060008251115b156149d25781516149399084615b7b565b905060005b82518110156149d0576000610106600085848151811061496057614960615817565b6020908102919091018101516001600160a01b0390811683529082019290925260400160002080549092501661499657506149be565b828160020160008282546149aa919061594c565b909155506149ba905083866157ca565b9450505b806149c88161582d565b91505061493e565b505b828660020160008282546149e6919061594c565b909155506149fa9050600686016000614f5f565b6000600886015460ff166004811115614a1557614a15615043565b1480614a3957506001600886015460ff166004811115614a3757614a37615043565b145b15614a4e5760088501805460ff191660021790555b60048501805461ffff191680825562010000900461ffff16906002614a7283615aa9565b91906101000a81548161ffff021916908361ffff160217905550508460010160009054906101000a90046001600160a01b03166001600160a01b03167ffadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3e600286604051614ae092919061575e565b60405180910390a2505050505050565b60ff546000908190614b179084906c01000000000000000000000000900461ffff16614c03565b9092509050614b25836134db565b5060048301805463ffff00001916905560088301805460ff1916600390811790915560018401546040516001600160a01b03909116917ffadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3e91614b8a919060009061575e565b60405180910390a2505050565b614ba0816140e1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060614bfc8383604051806060016040528060278152602001615be760279139614ca5565b9392505050565b60008060648363ffffffff161115614c5d5760405162461bcd60e51b815260206004820181905260248201527f70657263656e746167652073686f756c6420626520696e205b302c203130305d6044820152606401610a43565b60028401546064614c6e8582615b8f565b614c7e9063ffffffff1683615bb3565b614c889190615b7b565b9250614c9483826157ca565b600286018490559150509250929050565b6060600080856001600160a01b031685604051614cc29190615bca565b600060405180830381855af49150503d8060008114614cfd576040519150601f19603f3d011682016040523d82523d6000602084013e614d02565b606091505b5091509150613fab8683838760608315614d7d578251600003614d76576001600160a01b0385163b614d765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a43565b5081614d87565b614d878383614d8f565b949350505050565b815115614d9f5781518083602001fd5b8060405162461bcd60e51b8152600401610a43919061574b565b6040805160e081018252600080825260208201819052909182019081526020016000815260200160608152602001614e216040518060a00160405280600061ffff168152602001600061ffff1681526020016060815260200160608152602001606081525090565b81526020016000905290565b82805482825590600052602060002090600101600290048101928215614ed55791602002820160005b83821115614ea057835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f01049283019260010302614e56565b8015614ed35782816101000a8154906001600160801b030219169055601001602081600f01049283019260010302614ea0565b505b50614ee1929150614f79565b5090565b828054828255906000526020600020908101928215614ed5579160200282015b82811115614ed557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614f05565b508054600082556001016002900490600052602060002090810190610f279190614f79565b5080546000825590600052602060002090810190610f2791905b5b80821115614ee15760008155600101614f7a565b600081518084526020808501945080840160005b83811015614fc75781516001600160a01b031687529582019590820190600101614fa2565b509495945050505050565b602081526000614bfc6020830184614f8e565b6001600160a01b0381168114610f2757600080fd5b60006020828403121561500c57600080fd5b8135614bfc81614fe5565b6000806040838503121561502a57600080fd5b823561503581614fe5565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60038110610f2757610f27615043565b60005b8381101561508457818101518382015260200161506c565b50506000910152565b600081518084526150a5816020860160208601615069565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015614fc75781516001600160801b0316875295820195908201906001016150cd565b600061ffff8083511684526020818185015116818601526040840151915060a0604086015261512460a08601836150b9565b60608581015187830391880191909152805180835290830193506000918301905b8083101561516e5784516001600160a01b03168252938301936001929092019190830190615145565b5060808601519350868103608088015261518881856150b9565b979650505050505050565b600581106151a3576151a3615043565b9052565b6001600160a01b0388811682528716602082015260006151c687615059565b86604083015285606083015260e060808301526151e660e083018661508d565b82810360a08401526151f881866150f2565b91505061520860c0830184615193565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561525357615253615214565b604052919050565b600067ffffffffffffffff83111561527557615275615214565b615288601f8401601f191660200161522a565b905082815283838301111561529c57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126152c457600080fd5b614bfc8383356020850161525b565b600080604083850312156152e657600080fd5b82356152f181614fe5565b9150602083013567ffffffffffffffff81111561530d57600080fd5b615319858286016152b3565b9150509250929050565b60006020828403121561533557600080fd5b5035919050565b6020815260006001600160a01b0380845116602084015280602085015116604084015250604083015161536e81615059565b8060608401525060608301516080830152608083015160e060a084015261539961010084018261508d565b905060a0840151601f198483030160c08501526153b682826150f2565b91505060c08401516153cb60e0850182615193565b509392505050565b803561ffff811681146153e557600080fd5b919050565b60008060008060008060008060008060006101608c8e03121561540c57600080fd5b6154158c6153d3565b9a5060208c013561542581614fe5565b995061543360408d016153d3565b985061544160608d016153d3565b975061544f60808d016153d3565b965061545d60a08d016153d3565b955061546b60c08d016153d3565b945061547960e08d016153d3565b93506154886101008d016153d3565b92506154976101208d016153d3565b91506154a66101408d016153d3565b90509295989b509295989b9093969950565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561552757888303603f19018552815180516001600160a01b031684528701518784018790526155148785018261508d565b95880195935050908601906001016154df565b509098975050505050505050565b8035600381106153e557600080fd5b6000806000806080858703121561555a57600080fd5b8435935061556a60208601615535565b9250604085013567ffffffffffffffff81111561558657600080fd5b8501601f8101871361559757600080fd5b6155a68782356020840161525b565b92505060608501356155b781614fe5565b939692955090935050565b6000806000606084860312156155d757600080fd5b6155e084615535565b925060208085013567ffffffffffffffff808211156155fe57600080fd5b61560a888389016152b3565b9450604087013591508082111561562057600080fd5b818701915087601f83011261563457600080fd5b81358181111561564657615646615214565b8060051b61565585820161522a565b918252838101850191858101908b84111561566f57600080fd5b86860192505b838310156156ab5782358581111561568d5760008081fd5b61569b8d89838a01016152b3565b8352509186019190860190615675565b809750505050505050509250925092565b6000602082840312156156ce57600080fd5b614bfc826153d3565b6000806000606084860312156156ec57600080fd5b83356156f781614fe5565b9250602084013561570781614fe5565b929592945050506040919091013590565b6000806040838503121561572b57600080fd5b615734836153d3565b9150615742602084016153d3565b90509250929050565b602081526000614bfc602083018461508d565b6040810161576c8285615193565b8260208301529392505050565b60006020828403121561578b57600080fd5b5051919050565b6000602082840312156157a457600080fd5b81518015158114614bfc57600080fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610da957610da96157b4565b600181811c908216806157f157607f821691505b60208210810361581157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161583f5761583f6157b4565b5060010190565b601f82111561385b57600081815260208120601f850160051c8101602086101561586d5750805b601f850160051c820191505b81811015612da257828155600101615879565b815167ffffffffffffffff8111156158a6576158a6615214565b6158ba816158b484546157dd565b84615846565b602080601f8311600181146158ef57600084156158d75750858301515b600019600386901b1c1916600185901b178555612da2565b600085815260208120601f198616915b8281101561591e578886015182559484019460019091019084016158ff565b508582101561593c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610da957610da96157b4565b805160ff811681146153e557600080fd5b60006020828403121561598257600080fd5b614bfc8261595f565b61599484615059565b838152826020820152606060408201526000613e00606083018461508d565b6040815260006159c6604083018561508d565b8281036020840152613e00818561508d565b6000602082840312156159ea57600080fd5b8151614bfc81614fe5565b80516001600160801b03811681146153e557600080fd5b600080600060608486031215615a2157600080fd5b615a2a8461595f565b9250615a38602085016159f5565b91506040840151615a4881614fe5565b809150509250925092565b60008060008060808587031215615a6957600080fd5b615a728561595f565b9350615a80602086016159f5565b92506040850151615a9081614fe5565b9150615a9e606086016159f5565b905092959194509250565b600061ffff808316818103615ac057615ac06157b4565b6001019392505050565b61ffff8181168382160280821691908281146137be576137be6157b4565b634e487b7160e01b600052601260045260246000fd5b600061ffff80841680615b1357615b13615ae8565b92169190910492915050565b634e487b7160e01b600052603160045260246000fd5b60006001600160a01b03808716835280861660208401525060806040830152615b616080830185614f8e565b9050615b6c83615059565b82606083015295945050505050565b600082615b8a57615b8a615ae8565b500490565b63ffffffff828116828216039080821115615bac57615bac6157b4565b5092915050565b8082028115828204841417610da957610da96157b4565b60008251615bdc818460208701615069565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122019aa0081e69056404e40023f916698c2b116cb83388048dea2cf1b230e45ab7b64736f6c63430008110033", + "bytecode": "0x60a06040523060805234801561001457600080fd5b50608051615d666200004d60003960008181610c9a01528181610cda01528181610fed0152818161102d01526110c00152615d666000f3fe6080604052600436106102c95760003560e01c80638b8f631f11610175578063dc38b0a2116100dc578063f2fde38b11610095578063f7714eb91161006f578063f7714eb91461087a578063fc2782111461089c578063fdd9344c146108bc578063ffa1ad74146108de57600080fd5b8063f2fde38b14610823578063f45dc45014610843578063f6e8913d1461085857600080fd5b8063dc38b0a214610774578063dd6f8f9014610794578063e30c3978146107aa578063e67a5d78146107c8578063ee4752cf146107e8578063f108f5b61461080d57600080fd5b8063adf1daa61161012e578063adf1daa6146106bc578063b10064eb146106de578063b27b154d146106fe578063bdb860ea1461071e578063c993d86114610734578063ce3e7e911461075457600080fd5b80638b8f631f146106125780638d758d03146106325780638da5cb5b14610648578063931127a014610666578063974c5b41146106875780639c30db5c1461069c57600080fd5b806346b90b3b116102345780636dcd3af2116101ed5780637c4981c8116101c75780637c4981c81461059c578063817b1cd2146105b757806381ebc506146105ce57806384f21a44146105f057600080fd5b80636dcd3af214610552578063715018a61461057257806379ba50971461058757600080fd5b806346b90b3b146104a35780634f1ef286146104c55780635288d085146104d857806352d1902d146104ee578063582115fb1461050357806365cdbaea1461053057600080fd5b806323b8ac5d1161028657806323b8ac5d146103c157806323deecfe146103e35780632ae9c60014610405578063339f334b146104205780633659cfe6146104505780633a688a2f1461047057600080fd5b8063011f59a0146102ce578063024f38cb1461030857806311ce02671461032b578063125c6c981461036457806313114a9d146103885780631acf76291461039f575b600080fd5b3480156102da57600080fd5b5060ff546102f090600160901b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561031457600080fd5b5060ff546102f090640100000000900461ffff1681565b34801561033757600080fd5b506101015461034c906001600160a01b031681565b6040516001600160a01b0390911681526020016102ff565b34801561037057600080fd5b5061037a60fc5481565b6040519081526020016102ff565b34801561039457600080fd5b5061037a6101075481565b3480156103ab57600080fd5b506103bf6103ba366004614eb4565b61091c565b005b3480156103cd57600080fd5b5060ff546102f090600160801b900461ffff1681565b3480156103ef57600080fd5b5060ff546102f090600160a01b900461ffff1681565b34801561041157600080fd5b5060fb546102f09061ffff1681565b34801561042c57600080fd5b5061044061043b366004614ed1565b610a5c565b60405190151581526020016102ff565b34801561045c57600080fd5b506103bf61046b366004614eb4565b610c90565b34801561047c57600080fd5b5061049061048b366004614eb4565b610d6f565b6040516102ff979695949392919061506c565b3480156104af57600080fd5b5060ff546102f090600160701b900461ffff1681565b6103bf6104d3366004615196565b610fe3565b3480156104e457600080fd5b506101045461037a565b3480156104fa57600080fd5b5061037a6110b3565b34801561050f57600080fd5b5061052361051e366004614eb4565b611166565b6040516102ff91906151e6565b34801561053c57600080fd5b5060ff546102f090600160601b900461ffff1681565b34801561055e57600080fd5b506103bf61056d366004615291565b611457565b34801561057e57600080fd5b506103bf6118b8565b34801561059357600080fd5b506103bf6118cc565b3480156105a857600080fd5b5060ff546102f09061ffff1681565b3480156105c357600080fd5b5061037a6101065481565b3480156105da57600080fd5b506105e3611943565b6040516102ff9190615398565b3480156105fc57600080fd5b506106056119a6565b6040516102ff91906153ab565b34801561061e57600080fd5b5061034c61062d366004615428565b611bf6565b34801561063e57600080fd5b5061037a60fe5481565b34801561065457600080fd5b506033546001600160a01b031661034c565b34801561067257600080fd5b5060ff546102f09062010000900461ffff1681565b34801561069357600080fd5b506105e3611c21565b3480156106a857600080fd5b506103bf6106b7366004615450565b611c82565b3480156106c857600080fd5b5060ff546102f090600160b01b900461ffff1681565b3480156106ea57600080fd5b506103bf6106f93660046154ce565b6124bc565b34801561070a57600080fd5b506103bf6107193660046155c8565b612b33565b34801561072a57600080fd5b506101035461037a565b34801561074057600080fd5b5061034c61074f366004615428565b612bf8565b34801561076057600080fd5b5061044061076f3660046155e3565b612c09565b34801561078057600080fd5b506103bf61078f366004614eb4565b612fdb565b3480156107a057600080fd5b5061037a60fd5481565b3480156107b657600080fd5b506065546001600160a01b031661034c565b3480156107d457600080fd5b506103bf6107e3366004615624565b613049565b3480156107f457600080fd5b5060ff546102f0906601000000000000900461ffff1681565b34801561081957600080fd5b506101025461037a565b34801561082f57600080fd5b506103bf61083e366004614eb4565b61316b565b34801561084f57600080fd5b506105e36131dc565b34801561086457600080fd5b5060ff546102f090600160401b900461ffff1681565b34801561088657600080fd5b5060ff546102f090600160501b900461ffff1681565b3480156108a857600080fd5b5061034c6108b7366004615428565b61323d565b3480156108c857600080fd5b5060ff546102f090600160c01b900461ffff1681565b3480156108ea57600080fd5b5061090f60405180604001604052806005815260200164181718171960d91b81525081565b6040516102ff9190615657565b6001600160a01b0380821660009081526101056020526040902060018101549091166109865760405162461bcd60e51b81526020600482015260146024820152736e6f646520646f6573206e6f742065786973747360601b60448201526064015b60405180910390fd5b80546001600160a01b03163314806109b75750336109ac6033546001600160a01b031690565b6001600160a01b0316145b610a035760405162461bcd60e51b815260206004820152601d60248201527f6f6e6c79206f776e65722063616e20756e7374616b652061206e6f6465000000604482015260640161097d565b610a0c8161324e565b5060088101805460ff1916600490811790915560018201546040516001600160a01b0390911691600080516020615d1183398151915291610a50919060009061566a565b60405180910390a25050565b6000610a66613560565b6001600160a01b038316610ab15760405162461bcd60e51b8152602060048201526012602482015271696e76616c696420746f206164647265737360701b604482015260640161097d565b60008211610af25760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015260640161097d565b610107548211158015610b715750610100546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6d9190615685565b8211155b610bb45760405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015260640161097d565b6101005460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c919061569e565b610c6d5760405162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015260640161097d565b816101076000828254610c8091906156d6565b9091555060019150505b92915050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610cd85760405162461bcd60e51b815260040161097d906156e9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610d21600080516020615cca833981519152546001600160a01b031690565b6001600160a01b031614610d475760405162461bcd60e51b815260040161097d90615735565b610d50816135ba565b60408051600080825260208201909252610d6c918391906135c2565b50565b6101056020526000908152604090208054600182015460028301546003840180546001600160a01b039485169594841694600160a01b90940460ff16939190610db790615781565b80601f0160208091040260200160405190810160405280929190818152602001828054610de390615781565b8015610e305780601f10610e0557610100808354040283529160200191610e30565b820191906000526020600020905b815481529060010190602001808311610e1357829003601f168201915b50506040805160a08101825260048701805461ffff808216845262010000909104166020808401919091526005890180548551818402810184018752818152999a999498509296509387019450919291830182828015610ee157602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f01049283019260010382029150808411610e9e5790505b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610f4357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f25575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610fcd57602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f01049283019260010382029150808411610f8a5790505b5050509190925250505060089091015460ff1687565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361102b5760405162461bcd60e51b815260040161097d906156e9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611074600080516020615cca833981519152546001600160a01b031690565b6001600160a01b03161461109a5760405162461bcd60e51b815260040161097d90615735565b6110a3826135ba565b6110af828260016135c2565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111535760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161097d565b50600080516020615cca83398151915290565b61116e614cca565b6001600160a01b0382811660009081526101056020908152604091829020825160e08101845281548516815260018201549485169281019290925290929091830190600160a01b900460ff1660028111156111cb576111cb614efd565b60028111156111dc576111dc614efd565b8152602001600282015481526020016003820180546111fa90615781565b80601f016020809104026020016040519081016040528092919081815260200182805461122690615781565b80156112735780601f1061124857610100808354040283529160200191611273565b820191906000526020600020905b81548152906001019060200180831161125657829003601f168201915b50505091835250506040805160a08101825260048401805461ffff8082168452620100009091041660208381019190915260058601805485518184028101840187528181529683019694959394938601939283018282801561132657602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116112e35790505b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561138857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161136a575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561141257602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116113cf5790505b505050919092525050508152600882015460209091019060ff16600481111561143d5761143d614efd565b600481111561144e5761144e614efd565b90525092915050565b600054610100900460ff16158080156114775750600054600160ff909116105b806114915750303b158015611491575060005460ff166001145b6114f45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097d565b6000805460ff191660011790558015611517576000805461ff0019166101001790555b61151f613732565b611527613759565b60fb805461ffff191661ffff8e161790556001600160a01b038b166115845760405162461bcd60e51b81526020600482015260136024820152727075736820746f6b656e20697320656d70747960681b604482015260640161097d565b60008a61ffff16116115e25760405162461bcd60e51b815260206004820152602160248201527f696e76616c69642076616c506572426c6f636b5461726765745f20616d6f756e6044820152601d60fa1b606482015260840161097d565b60008961ffff16116116405760405162461bcd60e51b815260206004820152602160248201527f696e76616c6964206e6f646552616e646f6d4d696e436f756e7420616d6f756e6044820152601d60fa1b606482015260840161097d565b60008861ffff16116116a95760405162461bcd60e51b815260206004820152602c60248201527f696e76616c6964206e6f646552616e646f6d46696c74657250696e677352657160448201526b1d5a5c995908185b5bdd5b9d60a21b606482015260840161097d565b8a61010060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508960ff60146101000a81548161ffff021916908361ffff1602179055508860ff60166101000a81548161ffff021916908361ffff1602179055508760ff60186101000a81548161ffff021916908361ffff160217905550606460fc81905550606460fd81905550606460fe819055508660ff60026101000a81548161ffff021916908361ffff1602179055508560ff60046101000a81548161ffff021916908361ffff1602179055508560ff60066101000a81548161ffff021916908361ffff1602179055508260ff60086101000a81548161ffff021916908361ffff1602179055508460ff600a6101000a81548161ffff021916908361ffff1602179055508360ff600c6101000a81548161ffff021916908361ffff1602179055508360ff600e6101000a81548161ffff021916908361ffff1602179055508160ff60106101000a81548161ffff021916908361ffff160217905550604260ff60006101000a81548161ffff021916908361ffff160217905550600060ff60126101000a81548161ffff021916908361ffff16021790555080156118aa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b6118c0613560565b6118ca6000613785565b565b60655433906001600160a01b0316811461193a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161097d565b610d6c81613785565b606061010380548060200260200160405190810160405280929190818152602001828054801561199c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161197e575b5050505050905090565b61010254606090600090815b81811015611a3257600061010282815481106119d0576119d06157bb565b60009182526020808320909101546001600160a01b03168083526101059091526040909120600881015491925090611a0a9060ff1661379e565b15611a1d5784611a19816157d1565b9550505b50508080611a2a906157d1565b9150506119b2565b5060008267ffffffffffffffff811115611a4e57611a4e6150d7565b604051908082528060200260200182016040528015611a9457816020015b604080518082019091526000815260606020820152815260200190600190039081611a6c5790505b5090506000805b83811015611bec5760006101028281548110611ab957611ab96157bb565b60009182526020808320909101546001600160a01b03168083526101059091526040909120600881015491925090611af39060ff1661379e565b611afe575050611bda565b6040805180820190915260018201546001600160a01b03168152600382018054602083019190611b2d90615781565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5990615781565b8015611ba65780601f10611b7b57610100808354040283529160200191611ba6565b820191906000526020600020905b815481529060010190602001808311611b8957829003601f168201915b5050505050815250858580611bba906157d1565b965081518110611bcc57611bcc6157bb565b602002602001018190525050505b80611be4816157d1565b915050611a9b565b5090949350505050565b6101038181548110611c0757600080fd5b6000918252602090912001546001600160a01b0316905081565b606061010280548060200260200160405190810160405280929190818152602001828054801561199c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161197e575050505050905090565b6001600160a01b038116611ccd5760405162461bcd60e51b8152602060048201526012602482015271656d707479206e6f6465206164647265737360701b604482015260640161097d565b6001600160a01b03808216600090815261010560205260409020805490911615611d475760405162461bcd60e51b815260206004820152602560248201527f61206e6f64652077697468207075624b657920697320616c7265616479206465604482015264199a5b995960da1b606482015260840161097d565b6000846002811115611d5b57611d5b614efd565b03611e0d5760fc54851015611dbc5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220564e4f446044820152604560f81b606482015260840161097d565b61010280546001810182556000919091527f93bdaa6a4190909b7c3fbe8d42169ffe1cab19f51dfc8db24c71abf849eced4a0180546001600160a01b0319166001600160a01b038416179055611fd9565b6001846002811115611e2157611e21614efd565b03611ed35760fd54851015611e825760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220534e4f446044820152604560f81b606482015260840161097d565b61010380546001810182556000919091527f02c297ab74aad0aede3a1895c857b1f2c71e6a203feb727bec95ac752998cb780180546001600160a01b0319166001600160a01b038416179055611fd9565b6002846002811115611ee757611ee7614efd565b03611f995760fe54851015611f485760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220414e4f446044820152604560f81b606482015260840161097d565b61010480546001810182556000919091527f4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe0180546001600160a01b0319166001600160a01b038416179055611fd9565b60405162461bcd60e51b815260206004820152601560248201527403ab739bab83837b93a32b2103737b232aa3cb8329605d1b604482015260640161097d565b84156120c25761010054604051636eb1769f60e11b81523360048201523060248201526000916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561202f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120539190615685565b9050858110156120c05760405162461bcd60e51b815260206004820152603260248201527f5f6e6f6465546f6b656e732063616e6e6f74206265207472616e736665727265604482015271642c20636865636b20616c6c6f77616e636560701b606482015260840161097d565b505b6120ca614cca565b3381526001600160a01b0383166020820152604081018560028111156120f2576120f2614efd565b9081600281111561210557612105614efd565b90525060608101869052608081018490526001600160a01b0380841660009081526101056020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549190951692811683178555928501518594919390926001600160a81b031990911617600160a01b83600281111561218d5761218d614efd565b021790555060608201516002820155608082015160038201906121b09082615830565b5060a0820151805160048301805460208085015161ffff908116620100000263ffffffff199093169416939093171781556040830151805191926121fc92600587019290910190614d3e565b5060608201518051612218916002840191602090910190614df6565b5060808201518051612234916003840191602090910190614d3e565b50505060c082015160088201805460ff1916600183600481111561225a5761225a614efd565b0217905550508615905061233e57610100546040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e4919061569e565b61233e5760405162461bcd60e51b815260206004820152602560248201527f6661696c656420746f207472616e7366657220746f6b656e7320746f20636f6e6044820152641d1c9858dd60da1b606482015260840161097d565b85610106600082825461235191906158f0565b909155506000905085600281111561236b5761236b614efd565b0361237d576123786137d8565b612465565b600185600281111561239157612391614efd565b0361246557610101546001600160a01b03166123ef5760405162461bcd60e51b815260206004820152601b60248201527f6e6f2073746f7261676520636f6e747261637420646566696e65640000000000604482015260640161097d565b610101546040516327657c7360e21b81526001600160a01b038581166004830152909116908190639d95f1cc906024016020604051808303816000875af115801561243e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124629190615914565b50505b826001600160a01b0316336001600160a01b03167f67bd55f864dcc77d483ff7567de0889142417ef6d0299753cfd80e4c72ddc5548789886040516124ac9392919061592f565b60405180910390a3505050505050565b3360009081526101056020526040902060018101546001600160a01b03166125195760405162461bcd60e51b815260206004820152601060248201526f34b73b30b634b2103932b837b93a32b960811b604482015260640161097d565b600080835167ffffffffffffffff811115612536576125366150d7565b60405190808252806020026020018201604052801561255f578160200160208202803683370190505b50905060005b84518110156126ee57600073__$7aaf162b34d2533b02434bde51cad0c5c5$__6336de68108888858151811061259d5761259d6157bb565b60200260200101516040518363ffffffff1660e01b81526004016125c2929190615955565b602060405180830381865af41580156125df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612603919061597a565b6001600160a01b03808216600090815261010560205260409020600181015492935091166126325750506126dc565b6000805b8681101561268b57836001600160a01b031686828151811061265a5761265a6157bb565b60200260200101516001600160a01b031603612679576001915061268b565b80612683816157d1565b915050612636565b50801561269a575050506126dc565b8285876126a6816157d1565b9850815181106126b8576126b86157bb565b60200260200101906001600160a01b031690816001600160a01b0316815250505050505b806126e6816157d1565b915050612565565b5083518210156127a45760008267ffffffffffffffff811115612713576127136150d7565b60405190808252806020026020018201604052801561273c578160200160208202803683370190505b50905060005b838110156127a05782818151811061275c5761275c6157bb565b6020026020010151828281518110612776576127766157bb565b6001600160a01b039092166020928302919091019091015280612798816157d1565b915050612742565b5090505b60008660028111156127b8576127b8614efd565b036128d1576000806000878060200190518101906127d691906159ae565b9194509250905060ff83166001146128005760405162461bcd60e51b815260040161097d906159f5565b6001600160a01b03808216600090815261010560205260409020600181015490911661283e5760405162461bcd60e51b815260040161097d90615a2c565b60006001820154600160a01b900460ff16600281111561286057612860614efd565b146128a65760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220564e6f64657360501b604482015260640161097d565b6128c78460ff1660038111156128be576128be614efd565b88878487613918565b5050505050612b2b565b60018660028111156128e5576128e5614efd565b03612a0357600080600080888060200190518101906129049190615a6e565b9296509094509250905060ff84166002146129315760405162461bcd60e51b815260040161097d906159f5565b6001600160a01b03808316600090815261010560205260409020600181015490911661296f5760405162461bcd60e51b815260040161097d90615a2c565b600180820154600160a01b900460ff16600281111561299057612990614efd565b146129d65760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220534e6f64657360501b604482015260640161097d565b6129f88560ff1660038111156129ee576129ee614efd565b8988848887613a84565b505050505050612b2b565b6002866002811115612a1757612a17614efd565b03612b2b5760008060008088806020019051810190612a369190615a6e565b9296509094509250905060ff8416600314612a635760405162461bcd60e51b815260040161097d906159f5565b6001600160a01b038083166000908152610105602052604090206001810154909116612aa15760405162461bcd60e51b815260040161097d90615a2c565b60026001820154600160a01b900460ff166002811115612ac357612ac3614efd565b14612b095760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220414e6f64657360501b604482015260640161097d565b6118aa8560ff166003811115612b2157612b21614efd565b8988848887613bf2565b505050505050565b612b3b613560565b6101025461ffff82161115612b925760405162461bcd60e51b815260206004820152601c60248201527f696e636f72726563742076616c506572426c6f636b5461726765745f00000000604482015260640161097d565b60ff805461ffff60a01b1916600160a01b61ffff848116918202929092179283905560408051600160901b909404909216835260208301527f81512b84dc2b38f82b4999b5512a14df033b165371fa51776cce559212bf0a44910160405180910390a150565b6101028181548110611c0757600080fd5b6000612c13613560565b60008211612c635760405162461bcd60e51b815260206004820152601960248201527f616d6f756e742073686f756c6420626520706f73697469766500000000000000604482015260640161097d565b826001600160a01b0316846001600160a01b031603612cd35760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616e73666572206265747765656e2073616d652061646460448201526572657373657360d01b606482015260840161097d565b6001600160a01b03831615801590612cf257506001600160a01b038416155b15612dcb5781610107541015612d1a5760405162461bcd60e51b815260040161097d90615ac4565b6001600160a01b038084166000908152610105602052604090208054909116612d775760405162461bcd60e51b815260206004820152600f60248201526e6d697373696e6720746f206e6f646560881b604482015260640161097d565b826101076000828254612d8a91906156d6565b92505081905550826101066000828254612da491906158f0565b9250508190555082816002016000828254612dbf91906158f0565b90915550612fd1915050565b6001600160a01b03841615801590612dea57506001600160a01b038316155b15612eba576001600160a01b038085166000908152610105602052604090208054909116612e4e5760405162461bcd60e51b81526020600482015260116024820152706d697373696e672066726f6d206e6f646560781b604482015260640161097d565b8281600201541015612e725760405162461bcd60e51b815260040161097d90615ac4565b82816002016000828254612e8691906156d6565b92505081905550826101066000828254612ea091906156d6565b92505081905550826101076000828254612dbf91906158f0565b6001600160a01b038085166000908152610105602052604090208054909116612f195760405162461bcd60e51b81526020600482015260116024820152706d697373696e672066726f6d206e6f646560781b604482015260640161097d565b8281600201541015612f3d5760405162461bcd60e51b815260040161097d90615ac4565b6001600160a01b038085166000908152610105602052604090208054909116612f9a5760405162461bcd60e51b815260206004820152600f60248201526e6d697373696e6720746f206e6f646560881b604482015260640161097d565b83826002016000828254612fae91906156d6565b9250508190555083816002016000828254612fc991906158f0565b909155505050505b5060019392505050565b612fe3613560565b6001600160a01b0381166130265760405162461bcd60e51b815260206004820152600a60248201526932b6b83a3c9030b2323960b11b604482015260640161097d565b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b613051613560565b6101025461ffff8316106130a05760405162461bcd60e51b8152602060048201526016602482015275189859081b9bd91954985b991bdb535a5b90dbdd5b9d60521b604482015260640161097d565b6101025461ffff8216106130f65760405162461bcd60e51b815260206004820152601860248201527f626164206e6f646552616e646f6d50696e67436f756e745f0000000000000000604482015260640161097d565b60ff805463ffffffff60b01b1916600160b01b61ffff85811691820261ffff60c01b191692909217600160c01b928516928302179092556040805192835260208301919091527fcd481667fa77e513c517493174075f0471ec1fe24d57af644377cd1a2572d13d910160405180910390a15050565b613173613560565b606580546001600160a01b0383166001600160a01b031990911681179091556131a46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b606061010480548060200260200160405190810160405280929190818152602001828054801561199c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161197e575050505050905090565b6101048181548110611c0757600080fd5b600281015461010054825460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905260009392919091169063a9059cbb906044016020604051808303816000875af11580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d2919061569e565b61332c5760405162461bcd60e51b815260206004820152602560248201527f6661696c656420746f20747261736665722066756e6473206261636b20746f2060448201526437bbb732b960d91b606482015260840161097d565b6000836002018190555080610106600082825461334991906156d6565b90915550600090506001840154600160a01b900460ff16600281111561337157613371614efd565b036133bb57613384600584016000614e4b565b613392600684016000614e70565b60018301546133ad90610102906001600160a01b0316613d53565b506133b66137d8565b610c8a565b600180840154600160a01b900460ff1660028111156133dc576133dc614efd565b036134ed57610101546001600160a01b031661343a5760405162461bcd60e51b815260206004820152601b60248201527f6e6f2073746f7261676520636f6e747261637420646566696e65640000000000604482015260640161097d565b61010154600184015460405163b2b99ec960e01b81526001600160a01b039182166004820152911690819063b2b99ec990602401600060405180830381600087803b15801561348857600080fd5b505af115801561349c573d6000803e3d6000fd5b506134af92505050600585016000614e4b565b6134bd600685016000614e70565b6134cb600785016000614e4b565b60018401546134e690610103906001600160a01b0316613d53565b5050610c8a565b60026001840154600160a01b900460ff16600281111561350f5761350f614efd565b03610c8a57613522600584016000614e4b565b613530600684016000614e70565b61353e600784016000614e4b565b600183015461355990610104906001600160a01b0316613d53565b5092915050565b6033546001600160a01b031633146118ca5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097d565b610d6c613560565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156135fa576135f583613e7f565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613654575060408051601f3d908101601f1916820190925261365191810190615685565b60015b6136b75760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161097d565b600080516020615cca83398151915281146137265760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161097d565b506135f5838383613f1b565b600054610100900460ff166118ca5760405162461bcd60e51b815260040161097d90615b0b565b600054610100900460ff166137805760405162461bcd60e51b815260040161097d90615b0b565b6118ca335b606580546001600160a01b0319169055610d6c81613f40565b600060048260048111156137b4576137b4614efd565b14806137d1575060038260048111156137cf576137cf614efd565b145b1592915050565b61010254600090815b8181101561386157600061010282815481106137ff576137ff6157bb565b60009182526020808320909101546001600160a01b031680835261010590915260409091206008810154919250906138399060ff1661379e565b1561384c578461384881615b56565b9550505b50508080613859906157d1565b9150506137e1565b5060ff54829061ffff600160a01b9091048116908216811015613882578091505b60ff5461ffff808316600160901b90920416111561389f57600080fd5b60ff5461ffff838116600160901b90920416146139125760ff805461ffff60901b1916600160901b61ffff858116918202929092179092556040805192835290831660208301527f81512b84dc2b38f82b4999b5512a14df033b165371fa51776cce559212bf0a44910160405180910390a15b50505050565b6000806001840154600160a01b900460ff16600281111561393b5761393b614efd565b146139815760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220564e6f64657360501b604482015260640161097d565b60ff5460649061399f9061ffff80821691600160901b900416615b77565b6139a99190615bb3565b61ffff16845110156139cd5760405162461bcd60e51b815260040161097d90615bd4565b600883015460ff1660048160048111156139e9576139e9614efd565b1480613a0657506003816004811115613a0457613a04614efd565b145b15613a15576000915050613a7b565b613a2487878688876000613f92565b60ff54600485015461ffff620100009092048216911610613a4957613a4986856147d3565b60ff546004850154600160501b90910461ffff908116620100009092041610613a7557613a7584614a1c565b60009150505b95945050505050565b6000600180850154600160a01b900460ff166002811115613aa757613aa7614efd565b14613aed5760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220534e6f64657360501b604482015260640161097d565b60ff54606490613b0b9061ffff80821691600160901b900416615b77565b613b159190615bb3565b61ffff1685511015613b395760405162461bcd60e51b815260040161097d90615bd4565b600884015460ff166004816004811115613b5557613b55614efd565b1480613b7257506003816004811115613b7057613b70614efd565b145b15613b81576000915050613be8565b613b8f888887898888613f92565b60ff54600486015461ffff6401000000009092048216911610613bb657613bb687866147d3565b60ff546004860154600160601b90910461ffff908116620100009092041610613be257613be285614a1c565b60009150505b9695505050505050565b600060026001850154600160a01b900460ff166002811115613c1657613c16614efd565b14613c5c5760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220414e6f64657360501b604482015260640161097d565b60ff54606490613c7a9061ffff80821691600160901b900416615b77565b613c849190615bb3565b61ffff1685511015613ca85760405162461bcd60e51b815260040161097d90615bd4565b600884015460ff166004816004811115613cc457613cc4614efd565b1480613ce157506003816004811115613cdf57613cdf614efd565b145b15613cf0576000915050613be8565b613cfe888887898888613f92565b60ff54600486015461ffff66010000000000009092048216911610613d2757613d2787866147d3565b60ff546004860154600160701b90910461ffff908116620100009092041610613be257613be285614a1c565b8154600090815b81811015613e7457836001600160a01b0316858281548110613d7e57613d7e6157bb565b6000918252602090912001546001600160a01b031603613e6257613da36001836156d6565b8114613e245784613db56001846156d6565b81548110613dc557613dc56157bb565b9060005260206000200160009054906101000a90046001600160a01b0316858281548110613df557613df56157bb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b84805480613e3457613e34615c02565b600082815260209020810160001990810180546001600160a01b03191690550190555060019150610c8a9050565b80613e6c816157d1565b915050613d5a565b506000949350505050565b6001600160a01b0381163b613eec5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161097d565b600080516020615cca83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613f2483614aa8565b600082511180613f315750805b156135f5576139128383614ae8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008460040160010180548060200260200160405190810160405280929190818152602001828054801561401757602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f01049283019260010382029150808411613fd45790505b505083519394506000925050505b818110156140ac5782818151811061403f5761403f6157bb565b60200260200101516001600160801b0316856001600160801b03160361409a5760405162461bcd60e51b815260206004820152601060248201526f626c6f636b206973206e6f74206e657760801b604482015260640161097d565b806140a4816157d1565b915050614025565b50600180870154600160a01b900460ff1660028111156140ce576140ce614efd565b0361429657826001600160801b031660000361412c5760405162461bcd60e51b815260206004820152601760248201527f73746f72616765206b6579206973207265717569726564000000000000000000604482015260640161097d565b6000866004016003018054806020026020016040519081016040528092919081815260200182805480156141b157602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f0104928301926001038202915080841161416e5790505b505083519394506000925050505b8181101561424c578281815181106141d9576141d96157bb565b60200260200101516001600160801b0316866001600160801b03160361423a5760405162461bcd60e51b815260206004820152601660248201527573746f72616765206b6579206973206e6f74206e657760501b604482015260640161097d565b80614244816157d1565b9150506141bf565b505050600786018054600180820183556000928352602090922060028204018054929091166010026101000a6001600160801b038181021990931692861602919091179055614483565b60026001870154600160a01b900460ff1660028111156142b8576142b8614efd565b0361448357826001600160801b03166000036143165760405162461bcd60e51b815260206004820152601860248201527f617263686976616c206b65792069732072657175697265640000000000000000604482015260640161097d565b60008660040160030180548060200260200160405190810160405280929190818152602001828054801561439b57602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116143585790505b505083519394506000925050505b8181101561443d578281815181106143c3576143c36157bb565b60200260200101516001600160801b0316866001600160801b03160361442b5760405162461bcd60e51b815260206004820152601760248201527f617263686976616c206b6579206973206e6f74206e6577000000000000000000604482015260640161097d565b80614435816157d1565b9150506143a9565b505050600786018054600180820183556000928352602090922060028204018054929091166010026101000a6001600160801b0381810219909316928616029190911790555b60048601805461ffff1690600061449983615b56565b825461010092830a61ffff818102199092169290911602179091556005880180546001818101835560009283526020808420600284040180549390921660100290940a6001600160801b0381810219909316928a16029190911790556006890180546040805182860281018601909152818152929450919290919083018282801561454d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161452f575b505083519394506000925050505b87518110156146515760005b8281101561463e57838181518110614581576145816157bb565b60200260200101516001600160a01b03168983815181106145a4576145a46157bb565b60200260200101516001600160a01b03161480156145ee575060006001600160a01b03168983815181106145da576145da6157bb565b60200260200101516001600160a01b031614155b1561462c576000898381518110614607576146076157bb565b60200260200101906001600160a01b031690816001600160a01b03168152505061463e565b80614636816157d1565b915050614567565b5080614649816157d1565b91505061455b565b5060005b87518110156146fe576000888281518110614672576146726157bb565b6020026020010151905060006001600160a01b0316816001600160a01b0316146146eb57896004016002018983815181106146af576146af6157bb565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b50806146f6816157d1565b915050614655565b506000600889015460ff16600481111561471a5761471a614efd565b0361472f5760088801805460ff191660011790555b600180890154908a01546040517f19d5f3972073c7002111a82b2a44db11e739567a002445f2e3db8ab96fe6645f9261477a926001600160a01b03918216929116908b908f90615c18565b60405180910390a16001880154600889015460028a01546040516001600160a01b0390931692600080516020615d11833981519152926147bf9260ff9091169161566a565b60405180910390a250505050505050505050565b60ff5460009081906147f1908490600160401b900461ffff16614b14565b600685018054604080516020808402820181019092528281529496509294506000939283018282801561484d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161482f575b5050505050905060008083118015614866575060008251115b156149105781516148779084615c65565b905060005b825181101561490e576000610105600085848151811061489e5761489e6157bb565b6020908102919091018101516001600160a01b039081168352908201929092526040016000208054909250166148d457506148fc565b828160020160008282546148e891906158f0565b909155506148f8905083866156d6565b9450505b80614906816157d1565b91505061487c565b505b8286600201600082825461492491906158f0565b909155506149389050600686016000614e70565b6000600886015460ff16600481111561495357614953614efd565b148061497757506001600886015460ff16600481111561497557614975614efd565b145b1561498c5760088501805460ff191660021790555b60048501805461ffff191680825562010000900461ffff169060026149b083615b56565b91906101000a81548161ffff021916908361ffff160217905550508460010160009054906101000a90046001600160a01b03166001600160a01b0316600080516020615d11833981519152600286604051614a0c92919061566a565b60405180910390a2505050505050565b60ff546000908190614a3a908490600160801b900461ffff16614b14565b9092509050614a488361324e565b5060048301805463ffff00001916905560088301805460ff1916600390811790915560018401546040516001600160a01b0390911691600080516020615d1183398151915291614a9b919060009061566a565b60405180910390a2505050565b614ab181613e7f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060614b0d8383604051806060016040528060278152602001615cea60279139614bb6565b9392505050565b60008060648363ffffffff161115614b6e5760405162461bcd60e51b815260206004820181905260248201527f70657263656e746167652073686f756c6420626520696e205b302c203130305d604482015260640161097d565b60028401546064614b7f8582615c79565b614b8f9063ffffffff1683615c96565b614b999190615c65565b9250614ba583826156d6565b600286018490559150509250929050565b6060600080856001600160a01b031685604051614bd39190615cad565b600060405180830381855af49150503d8060008114614c0e576040519150601f19603f3d011682016040523d82523d6000602084013e614c13565b606091505b5091509150613be88683838760608315614c8e578251600003614c87576001600160a01b0385163b614c875760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161097d565b5081614c98565b614c988383614ca0565b949350505050565b815115614cb05781518083602001fd5b8060405162461bcd60e51b815260040161097d9190615657565b6040805160e081018252600080825260208201819052909182019081526020016000815260200160608152602001614d326040518060a00160405280600061ffff168152602001600061ffff1681526020016060815260200160608152602001606081525090565b81526020016000905290565b82805482825590600052602060002090600101600290048101928215614de65791602002820160005b83821115614db157835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f01049283019260010302614d67565b8015614de45782816101000a8154906001600160801b030219169055601001602081600f01049283019260010302614db1565b505b50614df2929150614e8a565b5090565b828054828255906000526020600020908101928215614de6579160200282015b82811115614de657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614e16565b508054600082556001016002900490600052602060002090810190610d6c9190614e8a565b5080546000825590600052602060002090810190610d6c91905b5b80821115614df25760008155600101614e8b565b6001600160a01b0381168114610d6c57600080fd5b600060208284031215614ec657600080fd5b8135614b0d81614e9f565b60008060408385031215614ee457600080fd5b8235614eef81614e9f565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60038110614f2357614f23614efd565b9052565b60005b83811015614f42578181015183820152602001614f2a565b50506000910152565b60008151808452614f63816020860160208601614f27565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015614fb05781516001600160801b031687529582019590820190600101614f8b565b509495945050505050565b600061ffff8083511684526020818185015116818601526040840151915060a06040860152614fed60a0860183614f77565b60608581015187830391880191909152805180835290830193506000918301905b808310156150375784516001600160a01b0316825293830193600192909201919083019061500e565b506080860151935086810360808801526150518185614f77565b979650505050505050565b60058110614f2357614f23614efd565b6001600160a01b03888116825287166020820152600061508f6040830188614f13565b85606083015260e060808301526150a960e0830186614f4b565b82810360a08401526150bb8186614fbb565b9150506150cb60c083018461505c565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615116576151166150d7565b604052919050565b600067ffffffffffffffff831115615138576151386150d7565b61514b601f8401601f19166020016150ed565b905082815283838301111561515f57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261518757600080fd5b614b0d8383356020850161511e565b600080604083850312156151a957600080fd5b82356151b481614e9f565b9150602083013567ffffffffffffffff8111156151d057600080fd5b6151dc85828601615176565b9150509250929050565b60208152600060018060a01b0380845116602084015280602085015116604084015250604083015161521b6060840182614f13565b5060608301516080830152608083015160e060a0840152615240610100840182614f4b565b905060a0840151601f198483030160c085015261525d8282614fbb565b91505060c084015161527260e085018261505c565b509392505050565b803561ffff8116811461528c57600080fd5b919050565b60008060008060008060008060008060006101608c8e0312156152b357600080fd5b6152bc8c61527a565b9a5060208c01356152cc81614e9f565b99506152da60408d0161527a565b98506152e860608d0161527a565b97506152f660808d0161527a565b965061530460a08d0161527a565b955061531260c08d0161527a565b945061532060e08d0161527a565b935061532f6101008d0161527a565b925061533e6101208d0161527a565b915061534d6101408d0161527a565b90509295989b509295989b9093969950565b600081518084526020808501945080840160005b83811015614fb05781516001600160a01b031687529582019590820190600101615373565b602081526000614b0d602083018461535f565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561541a57888303603f19018552815180516001600160a01b0316845287015187840187905261540787850182614f4b565b95880195935050908601906001016153d2565b509098975050505050505050565b60006020828403121561543a57600080fd5b5035919050565b80356003811061528c57600080fd5b6000806000806080858703121561546657600080fd5b8435935061547660208601615441565b9250604085013567ffffffffffffffff81111561549257600080fd5b8501601f810187136154a357600080fd5b6154b28782356020840161511e565b92505060608501356154c381614e9f565b939692955090935050565b6000806000606084860312156154e357600080fd5b6154ec84615441565b925060208085013567ffffffffffffffff8082111561550a57600080fd5b61551688838901615176565b9450604087013591508082111561552c57600080fd5b818701915087601f83011261554057600080fd5b813581811115615552576155526150d7565b8060051b6155618582016150ed565b918252838101850191858101908b84111561557b57600080fd5b86860192505b838310156155b7578235858111156155995760008081fd5b6155a78d89838a0101615176565b8352509186019190860190615581565b809750505050505050509250925092565b6000602082840312156155da57600080fd5b614b0d8261527a565b6000806000606084860312156155f857600080fd5b833561560381614e9f565b9250602084013561561381614e9f565b929592945050506040919091013590565b6000806040838503121561563757600080fd5b6156408361527a565b915061564e6020840161527a565b90509250929050565b602081526000614b0d6020830184614f4b565b60408101615678828561505c565b8260208301529392505050565b60006020828403121561569757600080fd5b5051919050565b6000602082840312156156b057600080fd5b81518015158114614b0d57600080fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c8a57610c8a6156c0565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600181811c9082168061579557607f821691505b6020821081036157b557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016157e3576157e36156c0565b5060010190565b601f8211156135f557600081815260208120601f850160051c810160208610156158115750805b601f850160051c820191505b81811015612b2b5782815560010161581d565b815167ffffffffffffffff81111561584a5761584a6150d7565b61585e816158588454615781565b846157ea565b602080601f831160018114615893576000841561587b5750858301515b600019600386901b1c1916600185901b178555612b2b565b600085815260208120601f198616915b828110156158c2578886015182559484019460019091019084016158a3565b50858210156158e05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610c8a57610c8a6156c0565b805160ff8116811461528c57600080fd5b60006020828403121561592657600080fd5b614b0d82615903565b6159398185614f13565b826020820152606060408201526000613a7b6060830184614f4b565b6040815260006159686040830185614f4b565b8281036020840152613a7b8185614f4b565b60006020828403121561598c57600080fd5b8151614b0d81614e9f565b80516001600160801b038116811461528c57600080fd5b6000806000606084860312156159c357600080fd5b6159cc84615903565b92506159da60208501615997565b915060408401516159ea81614e9f565b809150509250925092565b6020808252601c908201527f7265706f727420616374696f6e206f6e6c7920737570706f7274656400000000604082015260600190565b60208082526022908201527f746172676574206e6f64652077616c6c657420646f6573206e6f742065786973604082015261747360f01b606082015260800190565b60008060008060808587031215615a8457600080fd5b615a8d85615903565b9350615a9b60208601615997565b92506040850151615aab81614e9f565b9150615ab960608601615997565b905092959194509250565b60208082526027908201527f66726f6d206e6f64652073686f756c64206861766520656e6f75676820636f6c6040820152661b185d195c985b60ca1b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600061ffff808316818103615b6d57615b6d6156c0565b6001019392505050565b61ffff818116838216028082169190828114615b9557615b956156c0565b505092915050565b634e487b7160e01b600052601260045260246000fd5b600061ffff80841680615bc857615bc8615b9d565b92169190910492915050565b60208082526014908201527373696720636f756e7420697320746f6f206c6f7760601b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b03858116825284166020820152608060408201819052600090615c449083018561535f565b905060048310615c5657615c56614efd565b82606083015295945050505050565b600082615c7457615c74615b9d565b500490565b63ffffffff828116828216039080821115613559576135596156c0565b8082028115828204841417610c8a57610c8a6156c0565b60008251615cbf818460208701614f27565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564fadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3ea2646970667358221220beb32ccf0f0f8f8b9f6c4e855142246eba8bc3ac1020838a0bc35319b12bd9cd64736f6c63430008110033", + "deployedBytecode": "0x6080604052600436106102c95760003560e01c80638b8f631f11610175578063dc38b0a2116100dc578063f2fde38b11610095578063f7714eb91161006f578063f7714eb91461087a578063fc2782111461089c578063fdd9344c146108bc578063ffa1ad74146108de57600080fd5b8063f2fde38b14610823578063f45dc45014610843578063f6e8913d1461085857600080fd5b8063dc38b0a214610774578063dd6f8f9014610794578063e30c3978146107aa578063e67a5d78146107c8578063ee4752cf146107e8578063f108f5b61461080d57600080fd5b8063adf1daa61161012e578063adf1daa6146106bc578063b10064eb146106de578063b27b154d146106fe578063bdb860ea1461071e578063c993d86114610734578063ce3e7e911461075457600080fd5b80638b8f631f146106125780638d758d03146106325780638da5cb5b14610648578063931127a014610666578063974c5b41146106875780639c30db5c1461069c57600080fd5b806346b90b3b116102345780636dcd3af2116101ed5780637c4981c8116101c75780637c4981c81461059c578063817b1cd2146105b757806381ebc506146105ce57806384f21a44146105f057600080fd5b80636dcd3af214610552578063715018a61461057257806379ba50971461058757600080fd5b806346b90b3b146104a35780634f1ef286146104c55780635288d085146104d857806352d1902d146104ee578063582115fb1461050357806365cdbaea1461053057600080fd5b806323b8ac5d1161028657806323b8ac5d146103c157806323deecfe146103e35780632ae9c60014610405578063339f334b146104205780633659cfe6146104505780633a688a2f1461047057600080fd5b8063011f59a0146102ce578063024f38cb1461030857806311ce02671461032b578063125c6c981461036457806313114a9d146103885780631acf76291461039f575b600080fd5b3480156102da57600080fd5b5060ff546102f090600160901b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561031457600080fd5b5060ff546102f090640100000000900461ffff1681565b34801561033757600080fd5b506101015461034c906001600160a01b031681565b6040516001600160a01b0390911681526020016102ff565b34801561037057600080fd5b5061037a60fc5481565b6040519081526020016102ff565b34801561039457600080fd5b5061037a6101075481565b3480156103ab57600080fd5b506103bf6103ba366004614eb4565b61091c565b005b3480156103cd57600080fd5b5060ff546102f090600160801b900461ffff1681565b3480156103ef57600080fd5b5060ff546102f090600160a01b900461ffff1681565b34801561041157600080fd5b5060fb546102f09061ffff1681565b34801561042c57600080fd5b5061044061043b366004614ed1565b610a5c565b60405190151581526020016102ff565b34801561045c57600080fd5b506103bf61046b366004614eb4565b610c90565b34801561047c57600080fd5b5061049061048b366004614eb4565b610d6f565b6040516102ff979695949392919061506c565b3480156104af57600080fd5b5060ff546102f090600160701b900461ffff1681565b6103bf6104d3366004615196565b610fe3565b3480156104e457600080fd5b506101045461037a565b3480156104fa57600080fd5b5061037a6110b3565b34801561050f57600080fd5b5061052361051e366004614eb4565b611166565b6040516102ff91906151e6565b34801561053c57600080fd5b5060ff546102f090600160601b900461ffff1681565b34801561055e57600080fd5b506103bf61056d366004615291565b611457565b34801561057e57600080fd5b506103bf6118b8565b34801561059357600080fd5b506103bf6118cc565b3480156105a857600080fd5b5060ff546102f09061ffff1681565b3480156105c357600080fd5b5061037a6101065481565b3480156105da57600080fd5b506105e3611943565b6040516102ff9190615398565b3480156105fc57600080fd5b506106056119a6565b6040516102ff91906153ab565b34801561061e57600080fd5b5061034c61062d366004615428565b611bf6565b34801561063e57600080fd5b5061037a60fe5481565b34801561065457600080fd5b506033546001600160a01b031661034c565b34801561067257600080fd5b5060ff546102f09062010000900461ffff1681565b34801561069357600080fd5b506105e3611c21565b3480156106a857600080fd5b506103bf6106b7366004615450565b611c82565b3480156106c857600080fd5b5060ff546102f090600160b01b900461ffff1681565b3480156106ea57600080fd5b506103bf6106f93660046154ce565b6124bc565b34801561070a57600080fd5b506103bf6107193660046155c8565b612b33565b34801561072a57600080fd5b506101035461037a565b34801561074057600080fd5b5061034c61074f366004615428565b612bf8565b34801561076057600080fd5b5061044061076f3660046155e3565b612c09565b34801561078057600080fd5b506103bf61078f366004614eb4565b612fdb565b3480156107a057600080fd5b5061037a60fd5481565b3480156107b657600080fd5b506065546001600160a01b031661034c565b3480156107d457600080fd5b506103bf6107e3366004615624565b613049565b3480156107f457600080fd5b5060ff546102f0906601000000000000900461ffff1681565b34801561081957600080fd5b506101025461037a565b34801561082f57600080fd5b506103bf61083e366004614eb4565b61316b565b34801561084f57600080fd5b506105e36131dc565b34801561086457600080fd5b5060ff546102f090600160401b900461ffff1681565b34801561088657600080fd5b5060ff546102f090600160501b900461ffff1681565b3480156108a857600080fd5b5061034c6108b7366004615428565b61323d565b3480156108c857600080fd5b5060ff546102f090600160c01b900461ffff1681565b3480156108ea57600080fd5b5061090f60405180604001604052806005815260200164181718171960d91b81525081565b6040516102ff9190615657565b6001600160a01b0380821660009081526101056020526040902060018101549091166109865760405162461bcd60e51b81526020600482015260146024820152736e6f646520646f6573206e6f742065786973747360601b60448201526064015b60405180910390fd5b80546001600160a01b03163314806109b75750336109ac6033546001600160a01b031690565b6001600160a01b0316145b610a035760405162461bcd60e51b815260206004820152601d60248201527f6f6e6c79206f776e65722063616e20756e7374616b652061206e6f6465000000604482015260640161097d565b610a0c8161324e565b5060088101805460ff1916600490811790915560018201546040516001600160a01b0390911691600080516020615d1183398151915291610a50919060009061566a565b60405180910390a25050565b6000610a66613560565b6001600160a01b038316610ab15760405162461bcd60e51b8152602060048201526012602482015271696e76616c696420746f206164647265737360701b604482015260640161097d565b60008211610af25760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015260640161097d565b610107548211158015610b715750610100546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6d9190615685565b8211155b610bb45760405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015260640161097d565b6101005460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c919061569e565b610c6d5760405162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a37903a3930b739b332b960711b604482015260640161097d565b816101076000828254610c8091906156d6565b9091555060019150505b92915050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610cd85760405162461bcd60e51b815260040161097d906156e9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610d21600080516020615cca833981519152546001600160a01b031690565b6001600160a01b031614610d475760405162461bcd60e51b815260040161097d90615735565b610d50816135ba565b60408051600080825260208201909252610d6c918391906135c2565b50565b6101056020526000908152604090208054600182015460028301546003840180546001600160a01b039485169594841694600160a01b90940460ff16939190610db790615781565b80601f0160208091040260200160405190810160405280929190818152602001828054610de390615781565b8015610e305780601f10610e0557610100808354040283529160200191610e30565b820191906000526020600020905b815481529060010190602001808311610e1357829003601f168201915b50506040805160a08101825260048701805461ffff808216845262010000909104166020808401919091526005890180548551818402810184018752818152999a999498509296509387019450919291830182828015610ee157602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f01049283019260010382029150808411610e9e5790505b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610f4357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f25575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610fcd57602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f01049283019260010382029150808411610f8a5790505b5050509190925250505060089091015460ff1687565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361102b5760405162461bcd60e51b815260040161097d906156e9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611074600080516020615cca833981519152546001600160a01b031690565b6001600160a01b03161461109a5760405162461bcd60e51b815260040161097d90615735565b6110a3826135ba565b6110af828260016135c2565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111535760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161097d565b50600080516020615cca83398151915290565b61116e614cca565b6001600160a01b0382811660009081526101056020908152604091829020825160e08101845281548516815260018201549485169281019290925290929091830190600160a01b900460ff1660028111156111cb576111cb614efd565b60028111156111dc576111dc614efd565b8152602001600282015481526020016003820180546111fa90615781565b80601f016020809104026020016040519081016040528092919081815260200182805461122690615781565b80156112735780601f1061124857610100808354040283529160200191611273565b820191906000526020600020905b81548152906001019060200180831161125657829003601f168201915b50505091835250506040805160a08101825260048401805461ffff8082168452620100009091041660208381019190915260058601805485518184028101840187528181529683019694959394938601939283018282801561132657602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116112e35790505b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561138857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161136a575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561141257602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116113cf5790505b505050919092525050508152600882015460209091019060ff16600481111561143d5761143d614efd565b600481111561144e5761144e614efd565b90525092915050565b600054610100900460ff16158080156114775750600054600160ff909116105b806114915750303b158015611491575060005460ff166001145b6114f45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097d565b6000805460ff191660011790558015611517576000805461ff0019166101001790555b61151f613732565b611527613759565b60fb805461ffff191661ffff8e161790556001600160a01b038b166115845760405162461bcd60e51b81526020600482015260136024820152727075736820746f6b656e20697320656d70747960681b604482015260640161097d565b60008a61ffff16116115e25760405162461bcd60e51b815260206004820152602160248201527f696e76616c69642076616c506572426c6f636b5461726765745f20616d6f756e6044820152601d60fa1b606482015260840161097d565b60008961ffff16116116405760405162461bcd60e51b815260206004820152602160248201527f696e76616c6964206e6f646552616e646f6d4d696e436f756e7420616d6f756e6044820152601d60fa1b606482015260840161097d565b60008861ffff16116116a95760405162461bcd60e51b815260206004820152602c60248201527f696e76616c6964206e6f646552616e646f6d46696c74657250696e677352657160448201526b1d5a5c995908185b5bdd5b9d60a21b606482015260840161097d565b8a61010060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508960ff60146101000a81548161ffff021916908361ffff1602179055508860ff60166101000a81548161ffff021916908361ffff1602179055508760ff60186101000a81548161ffff021916908361ffff160217905550606460fc81905550606460fd81905550606460fe819055508660ff60026101000a81548161ffff021916908361ffff1602179055508560ff60046101000a81548161ffff021916908361ffff1602179055508560ff60066101000a81548161ffff021916908361ffff1602179055508260ff60086101000a81548161ffff021916908361ffff1602179055508460ff600a6101000a81548161ffff021916908361ffff1602179055508360ff600c6101000a81548161ffff021916908361ffff1602179055508360ff600e6101000a81548161ffff021916908361ffff1602179055508160ff60106101000a81548161ffff021916908361ffff160217905550604260ff60006101000a81548161ffff021916908361ffff160217905550600060ff60126101000a81548161ffff021916908361ffff16021790555080156118aa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b6118c0613560565b6118ca6000613785565b565b60655433906001600160a01b0316811461193a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161097d565b610d6c81613785565b606061010380548060200260200160405190810160405280929190818152602001828054801561199c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161197e575b5050505050905090565b61010254606090600090815b81811015611a3257600061010282815481106119d0576119d06157bb565b60009182526020808320909101546001600160a01b03168083526101059091526040909120600881015491925090611a0a9060ff1661379e565b15611a1d5784611a19816157d1565b9550505b50508080611a2a906157d1565b9150506119b2565b5060008267ffffffffffffffff811115611a4e57611a4e6150d7565b604051908082528060200260200182016040528015611a9457816020015b604080518082019091526000815260606020820152815260200190600190039081611a6c5790505b5090506000805b83811015611bec5760006101028281548110611ab957611ab96157bb565b60009182526020808320909101546001600160a01b03168083526101059091526040909120600881015491925090611af39060ff1661379e565b611afe575050611bda565b6040805180820190915260018201546001600160a01b03168152600382018054602083019190611b2d90615781565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5990615781565b8015611ba65780601f10611b7b57610100808354040283529160200191611ba6565b820191906000526020600020905b815481529060010190602001808311611b8957829003601f168201915b5050505050815250858580611bba906157d1565b965081518110611bcc57611bcc6157bb565b602002602001018190525050505b80611be4816157d1565b915050611a9b565b5090949350505050565b6101038181548110611c0757600080fd5b6000918252602090912001546001600160a01b0316905081565b606061010280548060200260200160405190810160405280929190818152602001828054801561199c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161197e575050505050905090565b6001600160a01b038116611ccd5760405162461bcd60e51b8152602060048201526012602482015271656d707479206e6f6465206164647265737360701b604482015260640161097d565b6001600160a01b03808216600090815261010560205260409020805490911615611d475760405162461bcd60e51b815260206004820152602560248201527f61206e6f64652077697468207075624b657920697320616c7265616479206465604482015264199a5b995960da1b606482015260840161097d565b6000846002811115611d5b57611d5b614efd565b03611e0d5760fc54851015611dbc5760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220564e4f446044820152604560f81b606482015260840161097d565b61010280546001810182556000919091527f93bdaa6a4190909b7c3fbe8d42169ffe1cab19f51dfc8db24c71abf849eced4a0180546001600160a01b0319166001600160a01b038416179055611fd9565b6001846002811115611e2157611e21614efd565b03611ed35760fd54851015611e825760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220534e4f446044820152604560f81b606482015260840161097d565b61010380546001810182556000919091527f02c297ab74aad0aede3a1895c857b1f2c71e6a203feb727bec95ac752998cb780180546001600160a01b0319166001600160a01b038416179055611fd9565b6002846002811115611ee757611ee7614efd565b03611f995760fe54851015611f485760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e7420636f6c6c61746572616c20666f7220414e4f446044820152604560f81b606482015260840161097d565b61010480546001810182556000919091527f4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe0180546001600160a01b0319166001600160a01b038416179055611fd9565b60405162461bcd60e51b815260206004820152601560248201527403ab739bab83837b93a32b2103737b232aa3cb8329605d1b604482015260640161097d565b84156120c25761010054604051636eb1769f60e11b81523360048201523060248201526000916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561202f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120539190615685565b9050858110156120c05760405162461bcd60e51b815260206004820152603260248201527f5f6e6f6465546f6b656e732063616e6e6f74206265207472616e736665727265604482015271642c20636865636b20616c6c6f77616e636560701b606482015260840161097d565b505b6120ca614cca565b3381526001600160a01b0383166020820152604081018560028111156120f2576120f2614efd565b9081600281111561210557612105614efd565b90525060608101869052608081018490526001600160a01b0380841660009081526101056020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549190951692811683178555928501518594919390926001600160a81b031990911617600160a01b83600281111561218d5761218d614efd565b021790555060608201516002820155608082015160038201906121b09082615830565b5060a0820151805160048301805460208085015161ffff908116620100000263ffffffff199093169416939093171781556040830151805191926121fc92600587019290910190614d3e565b5060608201518051612218916002840191602090910190614df6565b5060808201518051612234916003840191602090910190614d3e565b50505060c082015160088201805460ff1916600183600481111561225a5761225a614efd565b0217905550508615905061233e57610100546040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e4919061569e565b61233e5760405162461bcd60e51b815260206004820152602560248201527f6661696c656420746f207472616e7366657220746f6b656e7320746f20636f6e6044820152641d1c9858dd60da1b606482015260840161097d565b85610106600082825461235191906158f0565b909155506000905085600281111561236b5761236b614efd565b0361237d576123786137d8565b612465565b600185600281111561239157612391614efd565b0361246557610101546001600160a01b03166123ef5760405162461bcd60e51b815260206004820152601b60248201527f6e6f2073746f7261676520636f6e747261637420646566696e65640000000000604482015260640161097d565b610101546040516327657c7360e21b81526001600160a01b038581166004830152909116908190639d95f1cc906024016020604051808303816000875af115801561243e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124629190615914565b50505b826001600160a01b0316336001600160a01b03167f67bd55f864dcc77d483ff7567de0889142417ef6d0299753cfd80e4c72ddc5548789886040516124ac9392919061592f565b60405180910390a3505050505050565b3360009081526101056020526040902060018101546001600160a01b03166125195760405162461bcd60e51b815260206004820152601060248201526f34b73b30b634b2103932b837b93a32b960811b604482015260640161097d565b600080835167ffffffffffffffff811115612536576125366150d7565b60405190808252806020026020018201604052801561255f578160200160208202803683370190505b50905060005b84518110156126ee57600073__$7aaf162b34d2533b02434bde51cad0c5c5$__6336de68108888858151811061259d5761259d6157bb565b60200260200101516040518363ffffffff1660e01b81526004016125c2929190615955565b602060405180830381865af41580156125df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612603919061597a565b6001600160a01b03808216600090815261010560205260409020600181015492935091166126325750506126dc565b6000805b8681101561268b57836001600160a01b031686828151811061265a5761265a6157bb565b60200260200101516001600160a01b031603612679576001915061268b565b80612683816157d1565b915050612636565b50801561269a575050506126dc565b8285876126a6816157d1565b9850815181106126b8576126b86157bb565b60200260200101906001600160a01b031690816001600160a01b0316815250505050505b806126e6816157d1565b915050612565565b5083518210156127a45760008267ffffffffffffffff811115612713576127136150d7565b60405190808252806020026020018201604052801561273c578160200160208202803683370190505b50905060005b838110156127a05782818151811061275c5761275c6157bb565b6020026020010151828281518110612776576127766157bb565b6001600160a01b039092166020928302919091019091015280612798816157d1565b915050612742565b5090505b60008660028111156127b8576127b8614efd565b036128d1576000806000878060200190518101906127d691906159ae565b9194509250905060ff83166001146128005760405162461bcd60e51b815260040161097d906159f5565b6001600160a01b03808216600090815261010560205260409020600181015490911661283e5760405162461bcd60e51b815260040161097d90615a2c565b60006001820154600160a01b900460ff16600281111561286057612860614efd565b146128a65760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220564e6f64657360501b604482015260640161097d565b6128c78460ff1660038111156128be576128be614efd565b88878487613918565b5050505050612b2b565b60018660028111156128e5576128e5614efd565b03612a0357600080600080888060200190518101906129049190615a6e565b9296509094509250905060ff84166002146129315760405162461bcd60e51b815260040161097d906159f5565b6001600160a01b03808316600090815261010560205260409020600181015490911661296f5760405162461bcd60e51b815260040161097d90615a2c565b600180820154600160a01b900460ff16600281111561299057612990614efd565b146129d65760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220534e6f64657360501b604482015260640161097d565b6129f88560ff1660038111156129ee576129ee614efd565b8988848887613a84565b505050505050612b2b565b6002866002811115612a1757612a17614efd565b03612b2b5760008060008088806020019051810190612a369190615a6e565b9296509094509250905060ff8416600314612a635760405162461bcd60e51b815260040161097d906159f5565b6001600160a01b038083166000908152610105602052604090206001810154909116612aa15760405162461bcd60e51b815260040161097d90615a2c565b60026001820154600160a01b900460ff166002811115612ac357612ac3614efd565b14612b095760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220414e6f64657360501b604482015260640161097d565b6118aa8560ff166003811115612b2157612b21614efd565b8988848887613bf2565b505050505050565b612b3b613560565b6101025461ffff82161115612b925760405162461bcd60e51b815260206004820152601c60248201527f696e636f72726563742076616c506572426c6f636b5461726765745f00000000604482015260640161097d565b60ff805461ffff60a01b1916600160a01b61ffff848116918202929092179283905560408051600160901b909404909216835260208301527f81512b84dc2b38f82b4999b5512a14df033b165371fa51776cce559212bf0a44910160405180910390a150565b6101028181548110611c0757600080fd5b6000612c13613560565b60008211612c635760405162461bcd60e51b815260206004820152601960248201527f616d6f756e742073686f756c6420626520706f73697469766500000000000000604482015260640161097d565b826001600160a01b0316846001600160a01b031603612cd35760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616e73666572206265747765656e2073616d652061646460448201526572657373657360d01b606482015260840161097d565b6001600160a01b03831615801590612cf257506001600160a01b038416155b15612dcb5781610107541015612d1a5760405162461bcd60e51b815260040161097d90615ac4565b6001600160a01b038084166000908152610105602052604090208054909116612d775760405162461bcd60e51b815260206004820152600f60248201526e6d697373696e6720746f206e6f646560881b604482015260640161097d565b826101076000828254612d8a91906156d6565b92505081905550826101066000828254612da491906158f0565b9250508190555082816002016000828254612dbf91906158f0565b90915550612fd1915050565b6001600160a01b03841615801590612dea57506001600160a01b038316155b15612eba576001600160a01b038085166000908152610105602052604090208054909116612e4e5760405162461bcd60e51b81526020600482015260116024820152706d697373696e672066726f6d206e6f646560781b604482015260640161097d565b8281600201541015612e725760405162461bcd60e51b815260040161097d90615ac4565b82816002016000828254612e8691906156d6565b92505081905550826101066000828254612ea091906156d6565b92505081905550826101076000828254612dbf91906158f0565b6001600160a01b038085166000908152610105602052604090208054909116612f195760405162461bcd60e51b81526020600482015260116024820152706d697373696e672066726f6d206e6f646560781b604482015260640161097d565b8281600201541015612f3d5760405162461bcd60e51b815260040161097d90615ac4565b6001600160a01b038085166000908152610105602052604090208054909116612f9a5760405162461bcd60e51b815260206004820152600f60248201526e6d697373696e6720746f206e6f646560881b604482015260640161097d565b83826002016000828254612fae91906156d6565b9250508190555083816002016000828254612fc991906158f0565b909155505050505b5060019392505050565b612fe3613560565b6001600160a01b0381166130265760405162461bcd60e51b815260206004820152600a60248201526932b6b83a3c9030b2323960b11b604482015260640161097d565b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b613051613560565b6101025461ffff8316106130a05760405162461bcd60e51b8152602060048201526016602482015275189859081b9bd91954985b991bdb535a5b90dbdd5b9d60521b604482015260640161097d565b6101025461ffff8216106130f65760405162461bcd60e51b815260206004820152601860248201527f626164206e6f646552616e646f6d50696e67436f756e745f0000000000000000604482015260640161097d565b60ff805463ffffffff60b01b1916600160b01b61ffff85811691820261ffff60c01b191692909217600160c01b928516928302179092556040805192835260208301919091527fcd481667fa77e513c517493174075f0471ec1fe24d57af644377cd1a2572d13d910160405180910390a15050565b613173613560565b606580546001600160a01b0383166001600160a01b031990911681179091556131a46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b606061010480548060200260200160405190810160405280929190818152602001828054801561199c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161197e575050505050905090565b6101048181548110611c0757600080fd5b600281015461010054825460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905260009392919091169063a9059cbb906044016020604051808303816000875af11580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d2919061569e565b61332c5760405162461bcd60e51b815260206004820152602560248201527f6661696c656420746f20747261736665722066756e6473206261636b20746f2060448201526437bbb732b960d91b606482015260840161097d565b6000836002018190555080610106600082825461334991906156d6565b90915550600090506001840154600160a01b900460ff16600281111561337157613371614efd565b036133bb57613384600584016000614e4b565b613392600684016000614e70565b60018301546133ad90610102906001600160a01b0316613d53565b506133b66137d8565b610c8a565b600180840154600160a01b900460ff1660028111156133dc576133dc614efd565b036134ed57610101546001600160a01b031661343a5760405162461bcd60e51b815260206004820152601b60248201527f6e6f2073746f7261676520636f6e747261637420646566696e65640000000000604482015260640161097d565b61010154600184015460405163b2b99ec960e01b81526001600160a01b039182166004820152911690819063b2b99ec990602401600060405180830381600087803b15801561348857600080fd5b505af115801561349c573d6000803e3d6000fd5b506134af92505050600585016000614e4b565b6134bd600685016000614e70565b6134cb600785016000614e4b565b60018401546134e690610103906001600160a01b0316613d53565b5050610c8a565b60026001840154600160a01b900460ff16600281111561350f5761350f614efd565b03610c8a57613522600584016000614e4b565b613530600684016000614e70565b61353e600784016000614e4b565b600183015461355990610104906001600160a01b0316613d53565b5092915050565b6033546001600160a01b031633146118ca5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161097d565b610d6c613560565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156135fa576135f583613e7f565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613654575060408051601f3d908101601f1916820190925261365191810190615685565b60015b6136b75760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161097d565b600080516020615cca83398151915281146137265760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161097d565b506135f5838383613f1b565b600054610100900460ff166118ca5760405162461bcd60e51b815260040161097d90615b0b565b600054610100900460ff166137805760405162461bcd60e51b815260040161097d90615b0b565b6118ca335b606580546001600160a01b0319169055610d6c81613f40565b600060048260048111156137b4576137b4614efd565b14806137d1575060038260048111156137cf576137cf614efd565b145b1592915050565b61010254600090815b8181101561386157600061010282815481106137ff576137ff6157bb565b60009182526020808320909101546001600160a01b031680835261010590915260409091206008810154919250906138399060ff1661379e565b1561384c578461384881615b56565b9550505b50508080613859906157d1565b9150506137e1565b5060ff54829061ffff600160a01b9091048116908216811015613882578091505b60ff5461ffff808316600160901b90920416111561389f57600080fd5b60ff5461ffff838116600160901b90920416146139125760ff805461ffff60901b1916600160901b61ffff858116918202929092179092556040805192835290831660208301527f81512b84dc2b38f82b4999b5512a14df033b165371fa51776cce559212bf0a44910160405180910390a15b50505050565b6000806001840154600160a01b900460ff16600281111561393b5761393b614efd565b146139815760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220564e6f64657360501b604482015260640161097d565b60ff5460649061399f9061ffff80821691600160901b900416615b77565b6139a99190615bb3565b61ffff16845110156139cd5760405162461bcd60e51b815260040161097d90615bd4565b600883015460ff1660048160048111156139e9576139e9614efd565b1480613a0657506003816004811115613a0457613a04614efd565b145b15613a15576000915050613a7b565b613a2487878688876000613f92565b60ff54600485015461ffff620100009092048216911610613a4957613a4986856147d3565b60ff546004850154600160501b90910461ffff908116620100009092041610613a7557613a7584614a1c565b60009150505b95945050505050565b6000600180850154600160a01b900460ff166002811115613aa757613aa7614efd565b14613aed5760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220534e6f64657360501b604482015260640161097d565b60ff54606490613b0b9061ffff80821691600160901b900416615b77565b613b159190615bb3565b61ffff1685511015613b395760405162461bcd60e51b815260040161097d90615bd4565b600884015460ff166004816004811115613b5557613b55614efd565b1480613b7257506003816004811115613b7057613b70614efd565b145b15613b81576000915050613be8565b613b8f888887898888613f92565b60ff54600486015461ffff6401000000009092048216911610613bb657613bb687866147d3565b60ff546004860154600160601b90910461ffff908116620100009092041610613be257613be285614a1c565b60009150505b9695505050505050565b600060026001850154600160a01b900460ff166002811115613c1657613c16614efd565b14613c5c5760405162461bcd60e51b81526020600482015260166024820152757265706f7274206f6e6c7920666f7220414e6f64657360501b604482015260640161097d565b60ff54606490613c7a9061ffff80821691600160901b900416615b77565b613c849190615bb3565b61ffff1685511015613ca85760405162461bcd60e51b815260040161097d90615bd4565b600884015460ff166004816004811115613cc457613cc4614efd565b1480613ce157506003816004811115613cdf57613cdf614efd565b145b15613cf0576000915050613be8565b613cfe888887898888613f92565b60ff54600486015461ffff66010000000000009092048216911610613d2757613d2787866147d3565b60ff546004860154600160701b90910461ffff908116620100009092041610613be257613be285614a1c565b8154600090815b81811015613e7457836001600160a01b0316858281548110613d7e57613d7e6157bb565b6000918252602090912001546001600160a01b031603613e6257613da36001836156d6565b8114613e245784613db56001846156d6565b81548110613dc557613dc56157bb565b9060005260206000200160009054906101000a90046001600160a01b0316858281548110613df557613df56157bb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b84805480613e3457613e34615c02565b600082815260209020810160001990810180546001600160a01b03191690550190555060019150610c8a9050565b80613e6c816157d1565b915050613d5a565b506000949350505050565b6001600160a01b0381163b613eec5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161097d565b600080516020615cca83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613f2483614aa8565b600082511180613f315750805b156135f5576139128383614ae8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008460040160010180548060200260200160405190810160405280929190818152602001828054801561401757602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f01049283019260010382029150808411613fd45790505b505083519394506000925050505b818110156140ac5782818151811061403f5761403f6157bb565b60200260200101516001600160801b0316856001600160801b03160361409a5760405162461bcd60e51b815260206004820152601060248201526f626c6f636b206973206e6f74206e657760801b604482015260640161097d565b806140a4816157d1565b915050614025565b50600180870154600160a01b900460ff1660028111156140ce576140ce614efd565b0361429657826001600160801b031660000361412c5760405162461bcd60e51b815260206004820152601760248201527f73746f72616765206b6579206973207265717569726564000000000000000000604482015260640161097d565b6000866004016003018054806020026020016040519081016040528092919081815260200182805480156141b157602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f0104928301926001038202915080841161416e5790505b505083519394506000925050505b8181101561424c578281815181106141d9576141d96157bb565b60200260200101516001600160801b0316866001600160801b03160361423a5760405162461bcd60e51b815260206004820152601660248201527573746f72616765206b6579206973206e6f74206e657760501b604482015260640161097d565b80614244816157d1565b9150506141bf565b505050600786018054600180820183556000928352602090922060028204018054929091166010026101000a6001600160801b038181021990931692861602919091179055614483565b60026001870154600160a01b900460ff1660028111156142b8576142b8614efd565b0361448357826001600160801b03166000036143165760405162461bcd60e51b815260206004820152601860248201527f617263686976616c206b65792069732072657175697265640000000000000000604482015260640161097d565b60008660040160030180548060200260200160405190810160405280929190818152602001828054801561439b57602002820191906000526020600020906000905b82829054906101000a90046001600160801b03166001600160801b031681526020019060100190602082600f010492830192600103820291508084116143585790505b505083519394506000925050505b8181101561443d578281815181106143c3576143c36157bb565b60200260200101516001600160801b0316866001600160801b03160361442b5760405162461bcd60e51b815260206004820152601760248201527f617263686976616c206b6579206973206e6f74206e6577000000000000000000604482015260640161097d565b80614435816157d1565b9150506143a9565b505050600786018054600180820183556000928352602090922060028204018054929091166010026101000a6001600160801b0381810219909316928616029190911790555b60048601805461ffff1690600061449983615b56565b825461010092830a61ffff818102199092169290911602179091556005880180546001818101835560009283526020808420600284040180549390921660100290940a6001600160801b0381810219909316928a16029190911790556006890180546040805182860281018601909152818152929450919290919083018282801561454d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161452f575b505083519394506000925050505b87518110156146515760005b8281101561463e57838181518110614581576145816157bb565b60200260200101516001600160a01b03168983815181106145a4576145a46157bb565b60200260200101516001600160a01b03161480156145ee575060006001600160a01b03168983815181106145da576145da6157bb565b60200260200101516001600160a01b031614155b1561462c576000898381518110614607576146076157bb565b60200260200101906001600160a01b031690816001600160a01b03168152505061463e565b80614636816157d1565b915050614567565b5080614649816157d1565b91505061455b565b5060005b87518110156146fe576000888281518110614672576146726157bb565b6020026020010151905060006001600160a01b0316816001600160a01b0316146146eb57896004016002018983815181106146af576146af6157bb565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790555b50806146f6816157d1565b915050614655565b506000600889015460ff16600481111561471a5761471a614efd565b0361472f5760088801805460ff191660011790555b600180890154908a01546040517f19d5f3972073c7002111a82b2a44db11e739567a002445f2e3db8ab96fe6645f9261477a926001600160a01b03918216929116908b908f90615c18565b60405180910390a16001880154600889015460028a01546040516001600160a01b0390931692600080516020615d11833981519152926147bf9260ff9091169161566a565b60405180910390a250505050505050505050565b60ff5460009081906147f1908490600160401b900461ffff16614b14565b600685018054604080516020808402820181019092528281529496509294506000939283018282801561484d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161482f575b5050505050905060008083118015614866575060008251115b156149105781516148779084615c65565b905060005b825181101561490e576000610105600085848151811061489e5761489e6157bb565b6020908102919091018101516001600160a01b039081168352908201929092526040016000208054909250166148d457506148fc565b828160020160008282546148e891906158f0565b909155506148f8905083866156d6565b9450505b80614906816157d1565b91505061487c565b505b8286600201600082825461492491906158f0565b909155506149389050600686016000614e70565b6000600886015460ff16600481111561495357614953614efd565b148061497757506001600886015460ff16600481111561497557614975614efd565b145b1561498c5760088501805460ff191660021790555b60048501805461ffff191680825562010000900461ffff169060026149b083615b56565b91906101000a81548161ffff021916908361ffff160217905550508460010160009054906101000a90046001600160a01b03166001600160a01b0316600080516020615d11833981519152600286604051614a0c92919061566a565b60405180910390a2505050505050565b60ff546000908190614a3a908490600160801b900461ffff16614b14565b9092509050614a488361324e565b5060048301805463ffff00001916905560088301805460ff1916600390811790915560018401546040516001600160a01b0390911691600080516020615d1183398151915291614a9b919060009061566a565b60405180910390a2505050565b614ab181613e7f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060614b0d8383604051806060016040528060278152602001615cea60279139614bb6565b9392505050565b60008060648363ffffffff161115614b6e5760405162461bcd60e51b815260206004820181905260248201527f70657263656e746167652073686f756c6420626520696e205b302c203130305d604482015260640161097d565b60028401546064614b7f8582615c79565b614b8f9063ffffffff1683615c96565b614b999190615c65565b9250614ba583826156d6565b600286018490559150509250929050565b6060600080856001600160a01b031685604051614bd39190615cad565b600060405180830381855af49150503d8060008114614c0e576040519150601f19603f3d011682016040523d82523d6000602084013e614c13565b606091505b5091509150613be88683838760608315614c8e578251600003614c87576001600160a01b0385163b614c875760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161097d565b5081614c98565b614c988383614ca0565b949350505050565b815115614cb05781518083602001fd5b8060405162461bcd60e51b815260040161097d9190615657565b6040805160e081018252600080825260208201819052909182019081526020016000815260200160608152602001614d326040518060a00160405280600061ffff168152602001600061ffff1681526020016060815260200160608152602001606081525090565b81526020016000905290565b82805482825590600052602060002090600101600290048101928215614de65791602002820160005b83821115614db157835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f01049283019260010302614d67565b8015614de45782816101000a8154906001600160801b030219169055601001602081600f01049283019260010302614db1565b505b50614df2929150614e8a565b5090565b828054828255906000526020600020908101928215614de6579160200282015b82811115614de657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614e16565b508054600082556001016002900490600052602060002090810190610d6c9190614e8a565b5080546000825590600052602060002090810190610d6c91905b5b80821115614df25760008155600101614e8b565b6001600160a01b0381168114610d6c57600080fd5b600060208284031215614ec657600080fd5b8135614b0d81614e9f565b60008060408385031215614ee457600080fd5b8235614eef81614e9f565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60038110614f2357614f23614efd565b9052565b60005b83811015614f42578181015183820152602001614f2a565b50506000910152565b60008151808452614f63816020860160208601614f27565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015614fb05781516001600160801b031687529582019590820190600101614f8b565b509495945050505050565b600061ffff8083511684526020818185015116818601526040840151915060a06040860152614fed60a0860183614f77565b60608581015187830391880191909152805180835290830193506000918301905b808310156150375784516001600160a01b0316825293830193600192909201919083019061500e565b506080860151935086810360808801526150518185614f77565b979650505050505050565b60058110614f2357614f23614efd565b6001600160a01b03888116825287166020820152600061508f6040830188614f13565b85606083015260e060808301526150a960e0830186614f4b565b82810360a08401526150bb8186614fbb565b9150506150cb60c083018461505c565b98975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615116576151166150d7565b604052919050565b600067ffffffffffffffff831115615138576151386150d7565b61514b601f8401601f19166020016150ed565b905082815283838301111561515f57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261518757600080fd5b614b0d8383356020850161511e565b600080604083850312156151a957600080fd5b82356151b481614e9f565b9150602083013567ffffffffffffffff8111156151d057600080fd5b6151dc85828601615176565b9150509250929050565b60208152600060018060a01b0380845116602084015280602085015116604084015250604083015161521b6060840182614f13565b5060608301516080830152608083015160e060a0840152615240610100840182614f4b565b905060a0840151601f198483030160c085015261525d8282614fbb565b91505060c084015161527260e085018261505c565b509392505050565b803561ffff8116811461528c57600080fd5b919050565b60008060008060008060008060008060006101608c8e0312156152b357600080fd5b6152bc8c61527a565b9a5060208c01356152cc81614e9f565b99506152da60408d0161527a565b98506152e860608d0161527a565b97506152f660808d0161527a565b965061530460a08d0161527a565b955061531260c08d0161527a565b945061532060e08d0161527a565b935061532f6101008d0161527a565b925061533e6101208d0161527a565b915061534d6101408d0161527a565b90509295989b509295989b9093969950565b600081518084526020808501945080840160005b83811015614fb05781516001600160a01b031687529582019590820190600101615373565b602081526000614b0d602083018461535f565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561541a57888303603f19018552815180516001600160a01b0316845287015187840187905261540787850182614f4b565b95880195935050908601906001016153d2565b509098975050505050505050565b60006020828403121561543a57600080fd5b5035919050565b80356003811061528c57600080fd5b6000806000806080858703121561546657600080fd5b8435935061547660208601615441565b9250604085013567ffffffffffffffff81111561549257600080fd5b8501601f810187136154a357600080fd5b6154b28782356020840161511e565b92505060608501356154c381614e9f565b939692955090935050565b6000806000606084860312156154e357600080fd5b6154ec84615441565b925060208085013567ffffffffffffffff8082111561550a57600080fd5b61551688838901615176565b9450604087013591508082111561552c57600080fd5b818701915087601f83011261554057600080fd5b813581811115615552576155526150d7565b8060051b6155618582016150ed565b918252838101850191858101908b84111561557b57600080fd5b86860192505b838310156155b7578235858111156155995760008081fd5b6155a78d89838a0101615176565b8352509186019190860190615581565b809750505050505050509250925092565b6000602082840312156155da57600080fd5b614b0d8261527a565b6000806000606084860312156155f857600080fd5b833561560381614e9f565b9250602084013561561381614e9f565b929592945050506040919091013590565b6000806040838503121561563757600080fd5b6156408361527a565b915061564e6020840161527a565b90509250929050565b602081526000614b0d6020830184614f4b565b60408101615678828561505c565b8260208301529392505050565b60006020828403121561569757600080fd5b5051919050565b6000602082840312156156b057600080fd5b81518015158114614b0d57600080fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c8a57610c8a6156c0565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600181811c9082168061579557607f821691505b6020821081036157b557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016157e3576157e36156c0565b5060010190565b601f8211156135f557600081815260208120601f850160051c810160208610156158115750805b601f850160051c820191505b81811015612b2b5782815560010161581d565b815167ffffffffffffffff81111561584a5761584a6150d7565b61585e816158588454615781565b846157ea565b602080601f831160018114615893576000841561587b5750858301515b600019600386901b1c1916600185901b178555612b2b565b600085815260208120601f198616915b828110156158c2578886015182559484019460019091019084016158a3565b50858210156158e05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610c8a57610c8a6156c0565b805160ff8116811461528c57600080fd5b60006020828403121561592657600080fd5b614b0d82615903565b6159398185614f13565b826020820152606060408201526000613a7b6060830184614f4b565b6040815260006159686040830185614f4b565b8281036020840152613a7b8185614f4b565b60006020828403121561598c57600080fd5b8151614b0d81614e9f565b80516001600160801b038116811461528c57600080fd5b6000806000606084860312156159c357600080fd5b6159cc84615903565b92506159da60208501615997565b915060408401516159ea81614e9f565b809150509250925092565b6020808252601c908201527f7265706f727420616374696f6e206f6e6c7920737570706f7274656400000000604082015260600190565b60208082526022908201527f746172676574206e6f64652077616c6c657420646f6573206e6f742065786973604082015261747360f01b606082015260800190565b60008060008060808587031215615a8457600080fd5b615a8d85615903565b9350615a9b60208601615997565b92506040850151615aab81614e9f565b9150615ab960608601615997565b905092959194509250565b60208082526027908201527f66726f6d206e6f64652073686f756c64206861766520656e6f75676820636f6c6040820152661b185d195c985b60ca1b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600061ffff808316818103615b6d57615b6d6156c0565b6001019392505050565b61ffff818116838216028082169190828114615b9557615b956156c0565b505092915050565b634e487b7160e01b600052601260045260246000fd5b600061ffff80841680615bc857615bc8615b9d565b92169190910492915050565b60208082526014908201527373696720636f756e7420697320746f6f206c6f7760601b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b03858116825284166020820152608060408201819052600090615c449083018561535f565b905060048310615c5657615c56614efd565b82606083015295945050505050565b600082615c7457615c74615b9d565b500490565b63ffffffff828116828216039080821115613559576135596156c0565b8082028115828204841417610c8a57610c8a6156c0565b60008251615cbf818460208701614f27565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564fadfb6f5325606e6d04ae4ed3649c7c96949cd874f7cb927bef9ed701ba15a3ea2646970667358221220beb32ccf0f0f8f8b9f6c4e855142246eba8bc3ac1020838a0bc35319b12bd9cd64736f6c63430008110033", "linkReferences": { "contracts/SigUtil.sol": { "SigUtil": [ { "length": 20, - "start": 10373 + "start": 9663 } ] } @@ -1153,7 +1166,7 @@ "SigUtil": [ { "length": 20, - "start": 10296 + "start": 9586 } ] } diff --git a/package-lock.json b/package-lock.json index 63ab6f9..093df1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,11 +23,13 @@ "@pushprotocol/node-core": "^0.0.8", "@solana/web3.js": "^1.95.4", "@types/bs58": "^4.0.4", + "@types/mysql": "^2.15.26", "bs58": "^6.0.0", "crypto-js": "^4.2.0", "ethereum-cryptography": "^3.0.0", "ethers": "^5.7.2", "google-protobuf": "^3.21.4", + "mysql": "^2.18.1", "node-schedule": "^2.1.1", "object-hash": "^3.0.0", "patch-package": "^8.0.0", @@ -3502,6 +3504,14 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mysql": { + "version": "2.15.26", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "22.8.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.2.tgz", @@ -4612,6 +4622,14 @@ "node": ">= 10.0.0" } }, + "node_modules/bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -10048,6 +10066,39 @@ "dev": true, "license": "ISC" }, + "node_modules/mysql": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "dependencies": { + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mysql/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/mysql/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -11916,6 +11967,14 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", diff --git a/package.json b/package.json index 692fff9..028be77 100644 --- a/package.json +++ b/package.json @@ -67,11 +67,13 @@ "@pushprotocol/node-core": "^0.0.8", "@solana/web3.js": "^1.95.4", "@types/bs58": "^4.0.4", + "@types/mysql": "^2.15.26", "bs58": "^6.0.0", "crypto-js": "^4.2.0", "ethereum-cryptography": "^3.0.0", "ethers": "^5.7.2", "google-protobuf": "^3.21.4", + "mysql": "^2.18.1", "node-schedule": "^2.1.1", "object-hash": "^3.0.0", "patch-package": "^8.0.0", diff --git a/src/utilz/blockUtil.ts b/src/utilz/blockUtil.ts index d79fde4..cfd04b8 100644 --- a/src/utilz/blockUtil.ts +++ b/src/utilz/blockUtil.ts @@ -15,14 +15,14 @@ import { ArrayUtil } from './arrayUtil' import { BitUtil } from './bitUtil' import { ChainUtil } from './chainUtil' import { Check } from './check' -import DateUtil from './dateUtil' +import { DateUtil } from './dateUtil' import { EnvLoader } from './envLoader' -import { EthUtil } from './EthUtil' +import { EthUtil } from './ethUtil' import { HashUtil } from './hashUtil' import { NumUtil } from './numUtil' import { SolUtil } from './solUtil' import { StarkNetUtil } from './starkNetUtil' -import StrUtil from './strUtil' +import {StrUtil} from './strUtil' import { WinstonUtil } from './winstonUtil' import { PushSdkUtil } from './pushSdkUtil' @@ -535,4 +535,4 @@ export class CheckR { static ok(): CheckR { return {success: true, err: ''} } -} +} \ No newline at end of file diff --git a/src/utilz/chainUtil.ts b/src/utilz/chainUtil.ts index 9b551e1..aa63428 100644 --- a/src/utilz/chainUtil.ts +++ b/src/utilz/chainUtil.ts @@ -1,6 +1,7 @@ import {StrUtil} from './strUtil' import {Check} from "./check"; import {BitUtil} from "./bitUtil"; +import { Tuple } from './tuple'; export class ChainUtil { diff --git a/src/utilz/tuple.ts b/src/utilz/tuple.ts index b0f12b8..5df10ab 100644 --- a/src/utilz/tuple.ts +++ b/src/utilz/tuple.ts @@ -1 +1 @@ -type Tuple = [A, undefined?] | [undefined, B]; \ No newline at end of file +export type Tuple = [A, undefined?] | [undefined, B]; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 6115699..a025788 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,14 @@ { + "ts-node": { + "transpileOnly": true + }, "compilerOptions": { "outDir": "./dist", "target": "ES2017", "module": "commonjs", - "lib": ["es2017", "dom"], + "lib": ["es2017", "dom", "esnext.asynciterable"], + "typeRoots": ["./node_modules/@types", "./src/types", "./src/generated"], + "allowSyntheticDefaultImports": true, "esModuleInterop": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, @@ -18,6 +23,6 @@ "sourceMap": true, // Enable source maps for better error tracking "types": ["jest", "node"], // Add 'node' types for compatibility }, - "include": ["src/**/*", "src/generated/**/*"], // Ensure generated files are included + "include": ["./src/**/*", "./src/generated/**/*"], // Ensure generated files are included "exclude": ["node_modules", "dist"] -} +} \ No newline at end of file