{
    "_format": "hh-sol-artifact-1",
    "contractName": "PermissionedExchange",
    "sourceName": "contracts/PermissionedExchange.sol",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "orderId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "tokenGiveBalance",
                    "type": "uint256"
                }
            ],
            "name": "ExchangeOrderChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "orderId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGive",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGet",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGive",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGet",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "expireDate",
                    "type": "uint256"
                }
            ],
            "name": "ExchangeOrderSent",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "orderId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGive",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGive",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGet",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGet",
                    "type": "uint256"
                }
            ],
            "name": "OrderSettled",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "name",
                    "type": "string"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "value",
                    "type": "bytes"
                }
            ],
            "name": "Parameter",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "QuotaAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "orderId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGive",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGive",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGet",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGet",
                    "type": "uint256"
                }
            ],
            "name": "Trade",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "accumulatedTrades",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_orderId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_amount",
                    "type": "uint256"
                }
            ],
            "name": "addLiquidity",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_token",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_account",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_amount",
                    "type": "uint256"
                }
            ],
            "name": "addQuota",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_orderId",
                    "type": "uint256"
                }
            ],
            "name": "cancelOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_tokenGive",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_tokenGet",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_amountGive",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_amountGet",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_expireDate",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_tokenGiveBalance",
                    "type": "uint256"
                }
            ],
            "name": "createPairOrders",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "exchangeController",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract ISettings",
                    "name": "_settings",
                    "type": "address"
                },
                {
                    "internalType": "address[]",
                    "name": "_controllers",
                    "type": "address[]"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "nextOrderId",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "orders",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "tokenGive",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "tokenGet",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountGive",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amountGet",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "expireDate",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "pairOrderId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenGiveBalance",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_tokenGive",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_tokenGet",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_amountGive",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_amountGet",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_expireDate",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_pairId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_tokenGiveBalance",
                    "type": "uint256"
                }
            ],
            "name": "sendOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "newValue",
                    "type": "uint256"
                }
            ],
            "name": "setAccumulatedTrades",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_controller",
                    "type": "address"
                },
                {
                    "internalType": "bool",
                    "name": "_isController",
                    "type": "bool"
                }
            ],
            "name": "setController",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract ISettings",
                    "name": "_settings",
                    "type": "address"
                }
            ],
            "name": "setSettings",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_limit",
                    "type": "uint256"
                }
            ],
            "name": "setTradeLimitation",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_limit",
                    "type": "uint256"
                }
            ],
            "name": "setTradeLimitationPerAccount",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "settings",
            "outputs": [
                {
                    "internalType": "contract ISettings",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_orderId",
                    "type": "uint256"
                }
            ],
            "name": "settleExpiredOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_orderId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_amount",
                    "type": "uint256"
                }
            ],
            "name": "trade",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "tradeLimitation",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "tradeLimitationPerAccount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "tradeQuota",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b50611fbb806100206000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063946d9204116100c3578063cd82f2541161007c578063cd82f25414610391578063e06174e4146103a4578063e0dba60f146103b7578063e20be69a146103ca578063e9168ed7146103dd578063f2fde38b146103f057600080fd5b8063946d92041461028e5780639cd441da146102a1578063a01d3c2c146102b4578063a85c38ef146102c7578063bda8b2cb14610375578063c7ff0dd11461038857600080fd5b806351db53011161011557806351db5301146101ff578063573f4fac14610212578063624592d314610245578063715018a61461025857806372be6036146102605780638da5cb5b1461026957600080fd5b80630b2176431461015d578063139dd10c146101725780631ad31c32146101a557806325a1c4fc146101b85780632a58b330146101e3578063514fcac7146101ec575b600080fd5b61017061016b366004611a39565b610403565b005b610192610180366004611a67565b606b6020526000908152604090205481565b6040519081526020015b60405180910390f35b6101706101b3366004611a8b565b6106d2565b6101926101c6366004611acc565b606760209081526000928352604080842090915290825290205481565b61019260665481565b6101706101fa366004611a39565b6107aa565b61017061020d366004611b05565b61093a565b610235610220366004611a67565b60686020526000908152604090205460ff1681565b604051901515815260200161019c565b610170610253366004611b67565b610b33565b610170610bb6565b610192606c5481565b6033546001600160a01b03165b6040516001600160a01b03909116815260200161019c565b61017061029c366004611bc0565b610bca565b6101706102af366004611c48565b610ded565b6101706102c2366004611a67565b610ede565b6103266102d5366004611a39565b606960205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b0396871697958716969495939490921692909188565b604080516001600160a01b03998a168152978916602089015287019590955260608601939093529416608084015260a083019390935260c082019290925260e08101919091526101000161019c565b610170610383366004611c6a565b610f08565b610192606a5481565b61017061039f366004611a39565b610f2c565b606554610276906001600160a01b031681565b6101706103c5366004611ca4565b610f7a565b6101706103d8366004611c48565b610fad565b6101706103eb366004611a39565b61156d565b6101706103fe366004611a67565b6115b0565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e569919061043490600590600401611cd2565b602060405180830381865afa158015610451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104759190611cfa565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af11580156104b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d89190611d17565b156105175760405162461bcd60e51b815260040161050e906020808252600490820152634730313960e01b604082015260600190565b60405180910390fd5b600081815260696020908152604080832081516101008101835281546001600160a01b03908116825260018301548116948201949094526002820154928101929092526003810154606083015260048101549092166080820152600582015460a08201819052600683015460c083015260079092015460e082015291036105c85760405162461bcd60e51b8152602060048201526005602482015264504530303960d81b604482015260640161050e565b428160a00151106106035760405162461bcd60e51b8152602060048201526005602482015264050453031360dc1b604482015260640161050e565b60e08101511561062e57608081015160e0820151825161062e926001600160a01b0390911691611629565b817f2b138817dd4425ac819009a689da85237b30f99cbe0f2b159e06b6d1feefdf6b82600001518360400151846020015185606001516040516106749493929190611d34565b60405180910390a250600090815260696020526040812080546001600160a01b031990811682556001820180548216905560028201839055600382018390556004820180549091169055600581018290556006810182905560070155565b3360009081526068602052604090205460ff16151560011461071e5760405162461bcd60e51b8152602060048201526005602482015264504530303160d81b604482015260640161050e565b6001600160a01b03808416600090815260676020908152604080832093861683529290529081208054839290610755908490611d74565b9091555050604080516001600160a01b038086168252841660208201529081018290527ffa76b448db31db5f4ba945387d5f1405adf98453f39b2699648556e8ccc3733c9060600160405180910390a1505050565b600081815260696020908152604080832081516101008101835281546001600160a01b03908116825260018301548116948201949094526002820154928101929092526003810154606083015260048101549092166080820152600582015460a08201819052600683015460c083015260079092015460e0820152910361085b5760405162461bcd60e51b8152602060048201526005602482015264504530303960d81b604482015260640161050e565b80608001516001600160a01b0316336001600160a01b0316146108a85760405162461bcd60e51b8152602060048201526005602482015264504530313160d81b604482015260640161050e565b60e0810151156108d357608081015160e082015182516108d3926001600160a01b0390911691611629565b60c08101511561062e5760c0810151600090815260696020526040812060060155817f2b138817dd4425ac819009a689da85237b30f99cbe0f2b159e06b6d1feefdf6b82600001518360400151846020015185606001516040516106749493929190611d34565b610942611691565b4283116109795760405162461bcd60e51b8152602060048201526005602482015264282298181960d91b604482015260640161050e565b6000851180156109895750600084115b6109bd5760405162461bcd60e51b8152602060048201526005602482015264504530303360d81b604482015260640161050e565b80156109d8576109d86001600160a01b0388163330846116eb565b60408051610100810182526001600160a01b03808a16825288811660208084019182528385018a8152606085018a8152336080870181815260a088018c815260c089018c815260e08a018c81526066805460009081526069909952978c90209a518b54908b166001600160a01b0319918216178c55985160018c018054918c16918b16919091179055955160028b0155935160038a015590516004890180549190981696169590951790955592516005860155915160068501559051600790930192909255905491517f291fe7b7effb8442ef421f6392e3caf152b74849a1e3fa333704f74f0fc474b891610b0a918b908b908b908b908b906001600160a01b03968716815294861660208601529290941660408401526060830152608082019290925260a081019190915260c00190565b60405180910390a2600160666000828254610b259190611d74565b909155505050505050505050565b610b3b611691565b60008111610b735760405162461bcd60e51b815260206004820152600560248201526414114c0c0d60da1b604482015260640161050e565b610b9086868686866066546001610b8a9190611d74565b8761093a565b610bae85878587866001606654610ba79190611d8c565b600061093a565b505050505050565b610bbe611691565b610bc86000611723565b565b600054610100900460ff1615808015610bea5750600054600160ff909116105b80610c045750303b158015610c04575060005460ff166001145b610c675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161050e565b6000805460ff191660011790558015610c8a576000805461ff0019166101001790555b610c92611775565b606580546001600160a01b0319166001600160a01b038616179055600160665560005b82811015610d2457600160686000868685818110610cd557610cd5611da3565b9050602002016020810190610cea9190611a67565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d1c81611db9565b915050610cb5565b506040805160006020820152600080516020611f66833981519152910160408051601f1981840301815290829052610d5b91611e2a565b60405180910390a16040805160006020820152600080516020611f66833981519152910160408051601f1981840301815290829052610d9991611e63565b60405180910390a18015610de7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df5611691565b600082815260696020526040902060058101544210610e3e5760405162461bcd60e51b8152602060048201526005602482015264282298181b60d91b604482015260640161050e565b60008211610e765760405162461bcd60e51b8152602060048201526005602482015264504530303760d81b604482015260640161050e565b8054610e8d906001600160a01b03163330856116eb565b818160070154610e9d9190611d74565b6007820181905560405190815283907f118f4b4dbdbf807b6217cfa59d78d8cfab88f8e0e95ca48ce4ca4d6a8d38a0c79060200160405180910390a2505050565b610ee6611691565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b610f10611691565b6001600160a01b039091166000908152606b6020526040902055565b610f34611691565b606a8190556040805160208101839052600080516020611f66833981519152910160408051601f1981840301815290829052610f6f91611e2a565b60405180910390a150565b610f82611691565b6001600160a01b03919091166000908152606860205260409020805460ff1916911515919091179055565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e5699190610fde90600590600401611cd2565b602060405180830381865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190611cfa565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af115801561105e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110829190611d17565b156110b85760405162461bcd60e51b815260040161050e906020808252600490820152634730313960e01b604082015260600190565b600082815260696020526040808220606554915163f4e5699160e01b815290926001600160a01b039092169163f4e56991916110f79190600401611cd2565b602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190611cfa565b60018201546001600160a01b039182169116036111ae5760018101546001600160a01b031660009081526067602090815260408083203384529091529020548211156111ae5760405162461bcd60e51b8152602060048201526005602482015264504530303560d81b604482015260640161050e565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e56991906111df90600090600401611cd2565b602060405180830381865afa1580156111fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112209190611cfa565b81546001600160a01b039182169116036112d457606a5482111561126e5760405162461bcd60e51b8152602060048201526005602482015264282298189960d91b604482015260640161050e565b336000908152606b6020526040902054611289908390611d74565b336000908152606b60205260409020819055606c5410156112d45760405162461bcd60e51b8152602060048201526005602482015264504530313360d81b604482015260640161050e565b4281600501541161130f5760405162461bcd60e51b8152602060048201526005602482015264282298181b60d91b604482015260640161050e565b600081600301548383600201546113269190611eaa565b6113309190611ec9565b90506000811161136a5760405162461bcd60e51b8152602060048201526005602482015264504530303760d81b604482015260640161050e565b81600701548111156113a65760405162461bcd60e51b81526020600482015260056024820152640a08a6060760db1b604482015260640161050e565b808260070160008282546113ba9190611d8c565b909155505060655460405163f4e5699160e01b81526001600160a01b039091169063f4e56991906113f090600090600401611cd2565b602060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114319190611cfa565b60018301546001600160a01b039182169116036114855760018201546001600160a01b031660009081526067602090815260408083203384529091528120805485929061147f908490611d8c565b90915550505b6006820154156114dd5760018201546114a9906001600160a01b03163330866116eb565b60068201546000908152606960205260408120600781018054919286926114d1908490611d74565b90915550611500915050565b60048201546001830154611500916001600160a01b0391821691339116866116eb565b8154611516906001600160a01b03163383611629565b6001820154825460405186927f4465a1ea13ec5b120dfbf8b07f5daf0d4b8b46ec105693522630237f721a085b9261155f926001600160a01b0392831692899216908790611d34565b60405180910390a250505050565b611575611691565b606c8190556040805160208101839052600080516020611f66833981519152910160408051601f1981840301815290829052610f6f91611e63565b6115b8611691565b6001600160a01b03811661161d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161050e565b61162681611723565b50565b6040516001600160a01b03831660248201526044810182905261168c90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526117a4565b505050565b6033546001600160a01b03163314610bc85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050e565b6040516001600160a01b0380851660248301528316604482015260648101829052610de79085906323b872dd60e01b90608401611655565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661179c5760405162461bcd60e51b815260040161050e90611eeb565b610bc8611879565b60006117f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118a99092919063ffffffff16565b905080516000148061181a57508080602001905181019061181a9190611d17565b61168c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161050e565b600054610100900460ff166118a05760405162461bcd60e51b815260040161050e90611eeb565b610bc833611723565b60606118b884846000856118c0565b949350505050565b6060824710156119215760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161050e565b600080866001600160a01b0316858760405161193d9190611f36565b60006040518083038185875af1925050503d806000811461197a576040519150601f19603f3d011682016040523d82523d6000602084013e61197f565b606091505b50915091506119908783838761199b565b979650505050505050565b60608315611a0a578251600003611a03576001600160a01b0385163b611a035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161050e565b50816118b8565b6118b88383815115611a1f5781518083602001fd5b8060405162461bcd60e51b815260040161050e9190611f52565b600060208284031215611a4b57600080fd5b5035919050565b6001600160a01b038116811461162657600080fd5b600060208284031215611a7957600080fd5b8135611a8481611a52565b9392505050565b600080600060608486031215611aa057600080fd5b8335611aab81611a52565b92506020840135611abb81611a52565b929592945050506040919091013590565b60008060408385031215611adf57600080fd5b8235611aea81611a52565b91506020830135611afa81611a52565b809150509250929050565b600080600080600080600060e0888a031215611b2057600080fd5b8735611b2b81611a52565b96506020880135611b3b81611a52565b96999698505050506040850135946060810135946080820135945060a0820135935060c0909101359150565b60008060008060008060c08789031215611b8057600080fd5b8635611b8b81611a52565b95506020870135611b9b81611a52565b95989597505050506040840135936060810135936080820135935060a0909101359150565b600080600060408486031215611bd557600080fd5b8335611be081611a52565b9250602084013567ffffffffffffffff80821115611bfd57600080fd5b818601915086601f830112611c1157600080fd5b813581811115611c2057600080fd5b8760208260051b8501011115611c3557600080fd5b6020830194508093505050509250925092565b60008060408385031215611c5b57600080fd5b50508035926020909101359150565b60008060408385031215611c7d57600080fd5b8235611c8881611a52565b946020939093013593505050565b801515811461162657600080fd5b60008060408385031215611cb757600080fd5b8235611cc281611a52565b91506020830135611afa81611c96565b6020810160158310611cf457634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215611d0c57600080fd5b8151611a8481611a52565b600060208284031215611d2957600080fd5b8151611a8481611c96565b6001600160a01b039485168152602081019390935292166040820152606081019190915260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611d8757611d87611d5e565b500190565b600082821015611d9e57611d9e611d5e565b500390565b634e487b7160e01b600052603260045260246000fd5b600060018201611dcb57611dcb611d5e565b5060010190565b60005b83811015611ded578181015183820152602001611dd5565b83811115610de75750506000910152565b60008151808452611e16816020860160208601611dd2565b601f01601f19169290920160200192915050565b60408152600f60408201526e3a3930b232a634b6b4ba30ba34b7b760891b6060820152608060208201526000611a846080830184611dfe565b60408152601960408201527f74726164654c696d69746174696f6e5065724163636f756e74000000000000006060820152608060208201526000611a846080830184611dfe565b6000816000190483118215151615611ec457611ec4611d5e565b500290565b600082611ee657634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251611f48818460208701611dd2565b9190910192915050565b602081526000611a846020830184611dfe56fe63c3003ba148ae22ef0cecea7dab164660fafd04037d699677e4478e17ef7b1ba26469706673582212202c7763f2fae9b4987885fb6d2304fb14cd864d0179593d4a494ef4793aa3c63364736f6c634300080f0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063946d9204116100c3578063cd82f2541161007c578063cd82f25414610391578063e06174e4146103a4578063e0dba60f146103b7578063e20be69a146103ca578063e9168ed7146103dd578063f2fde38b146103f057600080fd5b8063946d92041461028e5780639cd441da146102a1578063a01d3c2c146102b4578063a85c38ef146102c7578063bda8b2cb14610375578063c7ff0dd11461038857600080fd5b806351db53011161011557806351db5301146101ff578063573f4fac14610212578063624592d314610245578063715018a61461025857806372be6036146102605780638da5cb5b1461026957600080fd5b80630b2176431461015d578063139dd10c146101725780631ad31c32146101a557806325a1c4fc146101b85780632a58b330146101e3578063514fcac7146101ec575b600080fd5b61017061016b366004611a39565b610403565b005b610192610180366004611a67565b606b6020526000908152604090205481565b6040519081526020015b60405180910390f35b6101706101b3366004611a8b565b6106d2565b6101926101c6366004611acc565b606760209081526000928352604080842090915290825290205481565b61019260665481565b6101706101fa366004611a39565b6107aa565b61017061020d366004611b05565b61093a565b610235610220366004611a67565b60686020526000908152604090205460ff1681565b604051901515815260200161019c565b610170610253366004611b67565b610b33565b610170610bb6565b610192606c5481565b6033546001600160a01b03165b6040516001600160a01b03909116815260200161019c565b61017061029c366004611bc0565b610bca565b6101706102af366004611c48565b610ded565b6101706102c2366004611a67565b610ede565b6103266102d5366004611a39565b606960205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b0396871697958716969495939490921692909188565b604080516001600160a01b03998a168152978916602089015287019590955260608601939093529416608084015260a083019390935260c082019290925260e08101919091526101000161019c565b610170610383366004611c6a565b610f08565b610192606a5481565b61017061039f366004611a39565b610f2c565b606554610276906001600160a01b031681565b6101706103c5366004611ca4565b610f7a565b6101706103d8366004611c48565b610fad565b6101706103eb366004611a39565b61156d565b6101706103fe366004611a67565b6115b0565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e569919061043490600590600401611cd2565b602060405180830381865afa158015610451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104759190611cfa565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af11580156104b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d89190611d17565b156105175760405162461bcd60e51b815260040161050e906020808252600490820152634730313960e01b604082015260600190565b60405180910390fd5b600081815260696020908152604080832081516101008101835281546001600160a01b03908116825260018301548116948201949094526002820154928101929092526003810154606083015260048101549092166080820152600582015460a08201819052600683015460c083015260079092015460e082015291036105c85760405162461bcd60e51b8152602060048201526005602482015264504530303960d81b604482015260640161050e565b428160a00151106106035760405162461bcd60e51b8152602060048201526005602482015264050453031360dc1b604482015260640161050e565b60e08101511561062e57608081015160e0820151825161062e926001600160a01b0390911691611629565b817f2b138817dd4425ac819009a689da85237b30f99cbe0f2b159e06b6d1feefdf6b82600001518360400151846020015185606001516040516106749493929190611d34565b60405180910390a250600090815260696020526040812080546001600160a01b031990811682556001820180548216905560028201839055600382018390556004820180549091169055600581018290556006810182905560070155565b3360009081526068602052604090205460ff16151560011461071e5760405162461bcd60e51b8152602060048201526005602482015264504530303160d81b604482015260640161050e565b6001600160a01b03808416600090815260676020908152604080832093861683529290529081208054839290610755908490611d74565b9091555050604080516001600160a01b038086168252841660208201529081018290527ffa76b448db31db5f4ba945387d5f1405adf98453f39b2699648556e8ccc3733c9060600160405180910390a1505050565b600081815260696020908152604080832081516101008101835281546001600160a01b03908116825260018301548116948201949094526002820154928101929092526003810154606083015260048101549092166080820152600582015460a08201819052600683015460c083015260079092015460e0820152910361085b5760405162461bcd60e51b8152602060048201526005602482015264504530303960d81b604482015260640161050e565b80608001516001600160a01b0316336001600160a01b0316146108a85760405162461bcd60e51b8152602060048201526005602482015264504530313160d81b604482015260640161050e565b60e0810151156108d357608081015160e082015182516108d3926001600160a01b0390911691611629565b60c08101511561062e5760c0810151600090815260696020526040812060060155817f2b138817dd4425ac819009a689da85237b30f99cbe0f2b159e06b6d1feefdf6b82600001518360400151846020015185606001516040516106749493929190611d34565b610942611691565b4283116109795760405162461bcd60e51b8152602060048201526005602482015264282298181960d91b604482015260640161050e565b6000851180156109895750600084115b6109bd5760405162461bcd60e51b8152602060048201526005602482015264504530303360d81b604482015260640161050e565b80156109d8576109d86001600160a01b0388163330846116eb565b60408051610100810182526001600160a01b03808a16825288811660208084019182528385018a8152606085018a8152336080870181815260a088018c815260c089018c815260e08a018c81526066805460009081526069909952978c90209a518b54908b166001600160a01b0319918216178c55985160018c018054918c16918b16919091179055955160028b0155935160038a015590516004890180549190981696169590951790955592516005860155915160068501559051600790930192909255905491517f291fe7b7effb8442ef421f6392e3caf152b74849a1e3fa333704f74f0fc474b891610b0a918b908b908b908b908b906001600160a01b03968716815294861660208601529290941660408401526060830152608082019290925260a081019190915260c00190565b60405180910390a2600160666000828254610b259190611d74565b909155505050505050505050565b610b3b611691565b60008111610b735760405162461bcd60e51b815260206004820152600560248201526414114c0c0d60da1b604482015260640161050e565b610b9086868686866066546001610b8a9190611d74565b8761093a565b610bae85878587866001606654610ba79190611d8c565b600061093a565b505050505050565b610bbe611691565b610bc86000611723565b565b600054610100900460ff1615808015610bea5750600054600160ff909116105b80610c045750303b158015610c04575060005460ff166001145b610c675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161050e565b6000805460ff191660011790558015610c8a576000805461ff0019166101001790555b610c92611775565b606580546001600160a01b0319166001600160a01b038616179055600160665560005b82811015610d2457600160686000868685818110610cd557610cd5611da3565b9050602002016020810190610cea9190611a67565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d1c81611db9565b915050610cb5565b506040805160006020820152600080516020611f66833981519152910160408051601f1981840301815290829052610d5b91611e2a565b60405180910390a16040805160006020820152600080516020611f66833981519152910160408051601f1981840301815290829052610d9991611e63565b60405180910390a18015610de7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df5611691565b600082815260696020526040902060058101544210610e3e5760405162461bcd60e51b8152602060048201526005602482015264282298181b60d91b604482015260640161050e565b60008211610e765760405162461bcd60e51b8152602060048201526005602482015264504530303760d81b604482015260640161050e565b8054610e8d906001600160a01b03163330856116eb565b818160070154610e9d9190611d74565b6007820181905560405190815283907f118f4b4dbdbf807b6217cfa59d78d8cfab88f8e0e95ca48ce4ca4d6a8d38a0c79060200160405180910390a2505050565b610ee6611691565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b610f10611691565b6001600160a01b039091166000908152606b6020526040902055565b610f34611691565b606a8190556040805160208101839052600080516020611f66833981519152910160408051601f1981840301815290829052610f6f91611e2a565b60405180910390a150565b610f82611691565b6001600160a01b03919091166000908152606860205260409020805460ff1916911515919091179055565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e5699190610fde90600590600401611cd2565b602060405180830381865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190611cfa565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af115801561105e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110829190611d17565b156110b85760405162461bcd60e51b815260040161050e906020808252600490820152634730313960e01b604082015260600190565b600082815260696020526040808220606554915163f4e5699160e01b815290926001600160a01b039092169163f4e56991916110f79190600401611cd2565b602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190611cfa565b60018201546001600160a01b039182169116036111ae5760018101546001600160a01b031660009081526067602090815260408083203384529091529020548211156111ae5760405162461bcd60e51b8152602060048201526005602482015264504530303560d81b604482015260640161050e565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e56991906111df90600090600401611cd2565b602060405180830381865afa1580156111fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112209190611cfa565b81546001600160a01b039182169116036112d457606a5482111561126e5760405162461bcd60e51b8152602060048201526005602482015264282298189960d91b604482015260640161050e565b336000908152606b6020526040902054611289908390611d74565b336000908152606b60205260409020819055606c5410156112d45760405162461bcd60e51b8152602060048201526005602482015264504530313360d81b604482015260640161050e565b4281600501541161130f5760405162461bcd60e51b8152602060048201526005602482015264282298181b60d91b604482015260640161050e565b600081600301548383600201546113269190611eaa565b6113309190611ec9565b90506000811161136a5760405162461bcd60e51b8152602060048201526005602482015264504530303760d81b604482015260640161050e565b81600701548111156113a65760405162461bcd60e51b81526020600482015260056024820152640a08a6060760db1b604482015260640161050e565b808260070160008282546113ba9190611d8c565b909155505060655460405163f4e5699160e01b81526001600160a01b039091169063f4e56991906113f090600090600401611cd2565b602060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114319190611cfa565b60018301546001600160a01b039182169116036114855760018201546001600160a01b031660009081526067602090815260408083203384529091528120805485929061147f908490611d8c565b90915550505b6006820154156114dd5760018201546114a9906001600160a01b03163330866116eb565b60068201546000908152606960205260408120600781018054919286926114d1908490611d74565b90915550611500915050565b60048201546001830154611500916001600160a01b0391821691339116866116eb565b8154611516906001600160a01b03163383611629565b6001820154825460405186927f4465a1ea13ec5b120dfbf8b07f5daf0d4b8b46ec105693522630237f721a085b9261155f926001600160a01b0392831692899216908790611d34565b60405180910390a250505050565b611575611691565b606c8190556040805160208101839052600080516020611f66833981519152910160408051601f1981840301815290829052610f6f91611e63565b6115b8611691565b6001600160a01b03811661161d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161050e565b61162681611723565b50565b6040516001600160a01b03831660248201526044810182905261168c90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526117a4565b505050565b6033546001600160a01b03163314610bc85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050e565b6040516001600160a01b0380851660248301528316604482015260648101829052610de79085906323b872dd60e01b90608401611655565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661179c5760405162461bcd60e51b815260040161050e90611eeb565b610bc8611879565b60006117f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118a99092919063ffffffff16565b905080516000148061181a57508080602001905181019061181a9190611d17565b61168c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161050e565b600054610100900460ff166118a05760405162461bcd60e51b815260040161050e90611eeb565b610bc833611723565b60606118b884846000856118c0565b949350505050565b6060824710156119215760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161050e565b600080866001600160a01b0316858760405161193d9190611f36565b60006040518083038185875af1925050503d806000811461197a576040519150601f19603f3d011682016040523d82523d6000602084013e61197f565b606091505b50915091506119908783838761199b565b979650505050505050565b60608315611a0a578251600003611a03576001600160a01b0385163b611a035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161050e565b50816118b8565b6118b88383815115611a1f5781518083602001fd5b8060405162461bcd60e51b815260040161050e9190611f52565b600060208284031215611a4b57600080fd5b5035919050565b6001600160a01b038116811461162657600080fd5b600060208284031215611a7957600080fd5b8135611a8481611a52565b9392505050565b600080600060608486031215611aa057600080fd5b8335611aab81611a52565b92506020840135611abb81611a52565b929592945050506040919091013590565b60008060408385031215611adf57600080fd5b8235611aea81611a52565b91506020830135611afa81611a52565b809150509250929050565b600080600080600080600060e0888a031215611b2057600080fd5b8735611b2b81611a52565b96506020880135611b3b81611a52565b96999698505050506040850135946060810135946080820135945060a0820135935060c0909101359150565b60008060008060008060c08789031215611b8057600080fd5b8635611b8b81611a52565b95506020870135611b9b81611a52565b95989597505050506040840135936060810135936080820135935060a0909101359150565b600080600060408486031215611bd557600080fd5b8335611be081611a52565b9250602084013567ffffffffffffffff80821115611bfd57600080fd5b818601915086601f830112611c1157600080fd5b813581811115611c2057600080fd5b8760208260051b8501011115611c3557600080fd5b6020830194508093505050509250925092565b60008060408385031215611c5b57600080fd5b50508035926020909101359150565b60008060408385031215611c7d57600080fd5b8235611c8881611a52565b946020939093013593505050565b801515811461162657600080fd5b60008060408385031215611cb757600080fd5b8235611cc281611a52565b91506020830135611afa81611c96565b6020810160158310611cf457634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215611d0c57600080fd5b8151611a8481611a52565b600060208284031215611d2957600080fd5b8151611a8481611c96565b6001600160a01b039485168152602081019390935292166040820152606081019190915260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611d8757611d87611d5e565b500190565b600082821015611d9e57611d9e611d5e565b500390565b634e487b7160e01b600052603260045260246000fd5b600060018201611dcb57611dcb611d5e565b5060010190565b60005b83811015611ded578181015183820152602001611dd5565b83811115610de75750506000910152565b60008151808452611e16816020860160208601611dd2565b601f01601f19169290920160200192915050565b60408152600f60408201526e3a3930b232a634b6b4ba30ba34b7b760891b6060820152608060208201526000611a846080830184611dfe565b60408152601960408201527f74726164654c696d69746174696f6e5065724163636f756e74000000000000006060820152608060208201526000611a846080830184611dfe565b6000816000190483118215151615611ec457611ec4611d5e565b500290565b600082611ee657634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251611f48818460208701611dd2565b9190910192915050565b602081526000611a846020830184611dfe56fe63c3003ba148ae22ef0cecea7dab164660fafd04037d699677e4478e17ef7b1ba26469706673582212202c7763f2fae9b4987885fb6d2304fb14cd864d0179593d4a494ef4793aa3c63364736f6c634300080f0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
