{
  "_format": "hh-sol-artifact-1",
  "contractName": "LPManualWhitelist",
  "sourceName": "contracts/LPManualWhitelist.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IPolicyPool",
          "name": "policyPool_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "provider",
          "type": "address"
        }
      ],
      "name": "InvalidProvider",
      "type": "error"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "deposit",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "withdraw",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "sendTransfer",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "receiveTransfer",
              "type": "uint8"
            }
          ],
          "internalType": "struct LPManualWhitelist.WhitelistStatus",
          "name": "newStatus",
          "type": "tuple"
        }
      ],
      "name": "InvalidWhitelistStatus",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoZeroPolicyPool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPolicyPool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UpgradeCannotChangePolicyPool",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "deposit",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "withdraw",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "sendTransfer",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "receiveTransfer",
              "type": "uint8"
            }
          ],
          "indexed": false,
          "internalType": "struct LPManualWhitelist.WhitelistStatus",
          "name": "whitelisted",
          "type": "tuple"
        }
      ],
      "name": "LPWhitelistStatusChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IEToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "acceptsDeposit",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IEToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "providerFrom",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "providerTo",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "acceptsTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IEToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "acceptsWithdrawal",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currency",
      "outputs": [
        {
          "internalType": "contract IERC20Metadata",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWhitelistDefaults",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "deposit",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "withdraw",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "sendTransfer",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "receiveTransfer",
              "type": "uint8"
            }
          ],
          "internalType": "struct LPManualWhitelist.WhitelistStatus",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "deposit",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "withdraw",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "sendTransfer",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "receiveTransfer",
              "type": "uint8"
            }
          ],
          "internalType": "struct LPManualWhitelist.WhitelistStatus",
          "name": "defaultStatus",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "policyPool",
      "outputs": [
        {
          "internalType": "contract IPolicyPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "deposit",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "withdraw",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "sendTransfer",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "receiveTransfer",
              "type": "uint8"
            }
          ],
          "internalType": "struct LPManualWhitelist.WhitelistStatus",
          "name": "newStatus",
          "type": "tuple"
        }
      ],
      "name": "setWhitelistDefaults",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "deposit",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "withdraw",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "sendTransfer",
              "type": "uint8"
            },
            {
              "internalType": "enum LPManualWhitelist.WhitelistOptions",
              "name": "receiveTransfer",
              "type": "uint8"
            }
          ],
          "internalType": "struct LPManualWhitelist.WhitelistStatus",
          "name": "newStatus",
          "type": "tuple"
        }
      ],
      "name": "whitelistAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c060405230608052348015610013575f5ffd5b5060405161166038038061166083398101604081905261003291610126565b806001600160a01b03811661005a57604051636b23cf0160e01b815260040160405180910390fd5b610062610074565b6001600160a01b031660a05250610153565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100c45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101235780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610136575f5ffd5b81516001600160a01b038116811461014c575f5ffd5b9392505050565b60805160a0516114d06101905f395f81816101240152818161063d0152610bca01525f818161081801528181610841015261098801526114d05ff3fe6080604052600436106100bf575f3560e01c8063896ce44c1161007c578063ad3cb1cc11610057578063ad3cb1cc1461020f578063cf273ca61461024c578063e5a6b10f1461026b578063ed716bf41461027f575f5ffd5b8063896ce44c146101b25780639051c763146101d1578063aa2f92fb146101f0575f5ffd5b806301ffc9a7146100c357806337ee20dd146100f75780634d15eb03146101165780634f1ef2861461015c57806352d1902d146101715780635fcdca3714610193575b5f5ffd5b3480156100ce575f5ffd5b506100e26100dd366004610ede565b6102a0565b60405190151581526020015b60405180910390f35b348015610102575f5ffd5b506100e2610111366004610f19565b6102cb565b348015610121575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016100ee565b61016f61016a366004610f9c565b61033b565b005b34801561017c575f5ffd5b5061018561035a565b6040519081526020016100ee565b34801561019e575f5ffd5b506100e26101ad366004611043565b610375565b3480156101bd575f5ffd5b5061016f6101cc3660046110a7565b610471565b3480156101dc575f5ffd5b506100e26101eb366004610f19565b6104c3565b3480156101fb575f5ffd5b5061016f61020a3660046110db565b610522565b34801561021a575f5ffd5b5061023f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100ee91906110f5565b348015610257575f5ffd5b5061016f6102663660046110db565b61061b565b348015610276575f5ffd5b5061014461063a565b34801561028a575f5ffd5b506102936106c0565b6040516100ee91906111a1565b5f6102aa826107d8565b806102c557506001600160e01b0319821663f8722d8960e01b145b92915050565b6001600160a01b0382165f9081526032602052604081205460ff16818160028111156102f9576102f961112a565b0361031a57505f805260326020525f51602061145b5f395f51905f525460ff165b60015b81600281111561032f5761032f61112a565b149150505b9392505050565b61034361080d565b61034c826108b3565b61035682826108bc565b5050565b5f61036361097d565b505f51602061147b5f395f51905f5290565b6001600160a01b0383165f9081526032602052604081205462010000900460ff16818160028111156103a9576103a961112a565b036103d057505f805260326020525f51602061145b5f395f51905f525462010000900460ff165b60018160028111156103e4576103e461112a565b146103f2575f915050610469565b506001600160a01b0383165f908152603260205260408120546301000000900460ff16908160028111156104285761042861112a565b0361045057505f805260326020525f51602061145b5f395f51905f52546301000000900460ff165b60018160028111156104645761046461112a565b149150505b949350505050565b816001600160a01b0381166104aa57604051639627159960e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b50610356826104be368490038401846111bb565b6109c6565b6001600160a01b0382165f90815260326020526040812054610100900460ff16818160028111156104f6576104f661112a565b0361031a57505f805260326020525f51602061145b5f395f51905f5254610100900460ff16600161031d565b5f61052b610ac2565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156105525750825b90505f8267ffffffffffffffff16600114801561056e5750303b155b90508115801561057c575080155b1561059a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105c457845460ff60401b1916600160401b1785555b6105cd86610aea565b831561061357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61062481610b03565b6106375f6104be368490038401846111bb565b50565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610697573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bb9190611240565b905090565b6106e76040805160808101909152805f81526020015f81526020015f81526020015f905290565b5f8052603260205260408051608081019091525f51602061145b5f395f51905f528054829060ff1660028111156107205761072061112a565b60028111156107315761073161112a565b81528154602090910190610100900460ff1660028111156107545761075461112a565b60028111156107655761076561112a565b8152815460209091019062010000900460ff1660028111156107895761078961112a565b600281111561079a5761079a61112a565b815281546020909101906301000000900460ff1660028111156107bf576107bf61112a565b60028111156107d0576107d061112a565b905250919050565b5f6001600160e01b031982166301ffc9a760e01b14806102c557506001600160e01b03198216634d15eb0360e01b1492915050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061089357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108875f51602061147b5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156108b15760405163703e46dd60e11b815260040160405180910390fd5b565b61063781610bc8565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610916575060408051601f3d908101601f191682019092526109139181019061125b565b60015b61093e57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016104a1565b5f51602061147b5f395f51905f52811461096e57604051632a87526960e21b8152600481018290526024016104a1565b6109788383610c79565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108b15760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b0382165f9081526032602052604090208151815483929190829060ff191660018360028111156109ff576109ff61112a565b021790555060208201518154829061ff001916610100836002811115610a2757610a2761112a565b021790555060408201518154829062ff0000191662010000836002811115610a5157610a5161112a565b021790555060608201518154829063ff00000019166301000000836002811115610a7d57610a7d61112a565b02179055509050507f95d7a6740c7954755644347f27cbf1bebf7d02a83371922a49d04ddce4757c2a8282604051610ab6929190611272565b60405180910390a15050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102c5565b610af2610cce565b610afa610cf3565b61063781610cfb565b5f610b11602083018361128f565b6002811115610b2257610b2261112a565b14158015610b5057505f610b3c604083016020840161128f565b6002811115610b4d57610b4d61112a565b14155b8015610b7c57505f610b68606083016040840161128f565b6002811115610b7957610b7961112a565b14155b8015610ba857505f610b94608083016060840161128f565b6002811115610ba557610ba561112a565b14155b819061035657604051637a94d59760e01b81526004016104a19190611313565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c529190611240565b6001600160a01b0316146106375760405163d2b3d33f60e01b815260040160405180910390fd5b610c8282610d6c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610cc6576109788282610dcf565b610356610e6f565b610cd6610e8e565b6108b157604051631afcd79f60e31b815260040160405180910390fd5b6108b1610cce565b610d03610cce565b610d0c81610b03565b5f80526032602052805f51602061145b5f395f51905f52610d2d828261139b565b9050507f95d7a6740c7954755644347f27cbf1bebf7d02a83371922a49d04ddce4757c2a5f82604051610d6192919061143d565b60405180910390a150565b806001600160a01b03163b5f03610da157604051634c9c8ce360e01b81526001600160a01b03821660048201526024016104a1565b5f51602061147b5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610ddc8484610ea7565b9050808015610dfd57505f3d1180610dfd57505f846001600160a01b03163b115b15610e1257610e0a610eba565b9150506102c5565b8015610e3c57604051639996b31560e01b81526001600160a01b03851660048201526024016104a1565b3d15610e4f57610e4a610ed3565b610e68565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b34156108b15760405163b398979f60e01b815260040160405180910390fd5b5f610e97610ac2565b54600160401b900460ff16919050565b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f60208284031215610eee575f5ffd5b81356001600160e01b031981168114610334575f5ffd5b6001600160a01b0381168114610637575f5ffd5b5f5f5f60608486031215610f2b575f5ffd5b8335610f3681610f05565b92506020840135610f4681610f05565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610f9457610f94610f57565b604052919050565b5f5f60408385031215610fad575f5ffd5b8235610fb881610f05565b9150602083013567ffffffffffffffff811115610fd3575f5ffd5b8301601f81018513610fe3575f5ffd5b803567ffffffffffffffff811115610ffd57610ffd610f57565b611010601f8201601f1916602001610f6b565b818152866020838501011115611024575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215611056575f5ffd5b843561106181610f05565b9350602085013561107181610f05565b9250604085013561108181610f05565b9396929550929360600135925050565b5f608082840312156110a1575f5ffd5b50919050565b5f5f60a083850312156110b8575f5ffd5b82356110c381610f05565b91506110d28460208501611091565b90509250929050565b5f608082840312156110eb575f5ffd5b6103348383611091565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52602160045260245ffd5b6003811061115a57634e487b7160e01b5f52602160045260245ffd5b9052565b61116982825161113e565b602081015161117b602084018261113e565b50604081015161118e604084018261113e565b506060810151610978606084018261113e565b608081016102c5828461115e565b60038110610637575f5ffd5b5f60808284031280156111cc575f5ffd5b506040516080810167ffffffffffffffff811182821017156111f0576111f0610f57565b60405282356111fe816111af565b8152602083013561120e816111af565b60208201526040830135611221816111af565b60408201526060830135611234816111af565b60608201529392505050565b5f60208284031215611250575f5ffd5b815161033481610f05565b5f6020828403121561126b575f5ffd5b5051919050565b6001600160a01b038316815260a08101610334602083018461115e565b5f6020828403121561129f575f5ffd5b8135610334816111af565b80356112b5816111af565b6112bf838261113e565b5060208101356112ce816111af565b6112db602084018261113e565b5060408101356112ea816111af565b6112f7604084018261113e565b506060810135611306816111af565b610978606084018261113e565b608081016102c582846112aa565b5f81356102c5816111af565b6003821061134957634e487b7160e01b5f52602160045260245ffd5b805462ff00008360101b1662ff0000198216178255505050565b6003821061137f57634e487b7160e01b5f52602160045260245ffd5b805463ff0000008360181b1663ff000000198216178255505050565b81356113a6816111af565b600381106113c257634e487b7160e01b5f52602160045260245ffd5b815460ff821691508160ff19821617835560208401356113e1816111af565b600381106113fd57634e487b7160e01b5f52602160045260245ffd5b61ff008160081b168361ffff1984161717845550505061142861142260408401611321565b8261132d565b61035661143760608401611321565b82611363565b6001600160a01b038316815260a0810161033460208301846112aa56fe00bcd6ff29ae71d399fb597d99792fa72d0863bd723b9ab11f79d0b8d8ac5bc8360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220847a7730fa59d13c51189897b2f7145c2935ab4c07eb9f03a0e84b7f2110060564736f6c634300081e0033",
  "deployedBytecode": "0x6080604052600436106100bf575f3560e01c8063896ce44c1161007c578063ad3cb1cc11610057578063ad3cb1cc1461020f578063cf273ca61461024c578063e5a6b10f1461026b578063ed716bf41461027f575f5ffd5b8063896ce44c146101b25780639051c763146101d1578063aa2f92fb146101f0575f5ffd5b806301ffc9a7146100c357806337ee20dd146100f75780634d15eb03146101165780634f1ef2861461015c57806352d1902d146101715780635fcdca3714610193575b5f5ffd5b3480156100ce575f5ffd5b506100e26100dd366004610ede565b6102a0565b60405190151581526020015b60405180910390f35b348015610102575f5ffd5b506100e2610111366004610f19565b6102cb565b348015610121575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016100ee565b61016f61016a366004610f9c565b61033b565b005b34801561017c575f5ffd5b5061018561035a565b6040519081526020016100ee565b34801561019e575f5ffd5b506100e26101ad366004611043565b610375565b3480156101bd575f5ffd5b5061016f6101cc3660046110a7565b610471565b3480156101dc575f5ffd5b506100e26101eb366004610f19565b6104c3565b3480156101fb575f5ffd5b5061016f61020a3660046110db565b610522565b34801561021a575f5ffd5b5061023f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100ee91906110f5565b348015610257575f5ffd5b5061016f6102663660046110db565b61061b565b348015610276575f5ffd5b5061014461063a565b34801561028a575f5ffd5b506102936106c0565b6040516100ee91906111a1565b5f6102aa826107d8565b806102c557506001600160e01b0319821663f8722d8960e01b145b92915050565b6001600160a01b0382165f9081526032602052604081205460ff16818160028111156102f9576102f961112a565b0361031a57505f805260326020525f51602061145b5f395f51905f525460ff165b60015b81600281111561032f5761032f61112a565b149150505b9392505050565b61034361080d565b61034c826108b3565b61035682826108bc565b5050565b5f61036361097d565b505f51602061147b5f395f51905f5290565b6001600160a01b0383165f9081526032602052604081205462010000900460ff16818160028111156103a9576103a961112a565b036103d057505f805260326020525f51602061145b5f395f51905f525462010000900460ff165b60018160028111156103e4576103e461112a565b146103f2575f915050610469565b506001600160a01b0383165f908152603260205260408120546301000000900460ff16908160028111156104285761042861112a565b0361045057505f805260326020525f51602061145b5f395f51905f52546301000000900460ff165b60018160028111156104645761046461112a565b149150505b949350505050565b816001600160a01b0381166104aa57604051639627159960e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b50610356826104be368490038401846111bb565b6109c6565b6001600160a01b0382165f90815260326020526040812054610100900460ff16818160028111156104f6576104f661112a565b0361031a57505f805260326020525f51602061145b5f395f51905f5254610100900460ff16600161031d565b5f61052b610ac2565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156105525750825b90505f8267ffffffffffffffff16600114801561056e5750303b155b90508115801561057c575080155b1561059a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105c457845460ff60401b1916600160401b1785555b6105cd86610aea565b831561061357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61062481610b03565b6106375f6104be368490038401846111bb565b50565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610697573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bb9190611240565b905090565b6106e76040805160808101909152805f81526020015f81526020015f81526020015f905290565b5f8052603260205260408051608081019091525f51602061145b5f395f51905f528054829060ff1660028111156107205761072061112a565b60028111156107315761073161112a565b81528154602090910190610100900460ff1660028111156107545761075461112a565b60028111156107655761076561112a565b8152815460209091019062010000900460ff1660028111156107895761078961112a565b600281111561079a5761079a61112a565b815281546020909101906301000000900460ff1660028111156107bf576107bf61112a565b60028111156107d0576107d061112a565b905250919050565b5f6001600160e01b031982166301ffc9a760e01b14806102c557506001600160e01b03198216634d15eb0360e01b1492915050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061089357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108875f51602061147b5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156108b15760405163703e46dd60e11b815260040160405180910390fd5b565b61063781610bc8565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610916575060408051601f3d908101601f191682019092526109139181019061125b565b60015b61093e57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016104a1565b5f51602061147b5f395f51905f52811461096e57604051632a87526960e21b8152600481018290526024016104a1565b6109788383610c79565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108b15760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b0382165f9081526032602052604090208151815483929190829060ff191660018360028111156109ff576109ff61112a565b021790555060208201518154829061ff001916610100836002811115610a2757610a2761112a565b021790555060408201518154829062ff0000191662010000836002811115610a5157610a5161112a565b021790555060608201518154829063ff00000019166301000000836002811115610a7d57610a7d61112a565b02179055509050507f95d7a6740c7954755644347f27cbf1bebf7d02a83371922a49d04ddce4757c2a8282604051610ab6929190611272565b60405180910390a15050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102c5565b610af2610cce565b610afa610cf3565b61063781610cfb565b5f610b11602083018361128f565b6002811115610b2257610b2261112a565b14158015610b5057505f610b3c604083016020840161128f565b6002811115610b4d57610b4d61112a565b14155b8015610b7c57505f610b68606083016040840161128f565b6002811115610b7957610b7961112a565b14155b8015610ba857505f610b94608083016060840161128f565b6002811115610ba557610ba561112a565b14155b819061035657604051637a94d59760e01b81526004016104a19190611313565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c529190611240565b6001600160a01b0316146106375760405163d2b3d33f60e01b815260040160405180910390fd5b610c8282610d6c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610cc6576109788282610dcf565b610356610e6f565b610cd6610e8e565b6108b157604051631afcd79f60e31b815260040160405180910390fd5b6108b1610cce565b610d03610cce565b610d0c81610b03565b5f80526032602052805f51602061145b5f395f51905f52610d2d828261139b565b9050507f95d7a6740c7954755644347f27cbf1bebf7d02a83371922a49d04ddce4757c2a5f82604051610d6192919061143d565b60405180910390a150565b806001600160a01b03163b5f03610da157604051634c9c8ce360e01b81526001600160a01b03821660048201526024016104a1565b5f51602061147b5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f610ddc8484610ea7565b9050808015610dfd57505f3d1180610dfd57505f846001600160a01b03163b115b15610e1257610e0a610eba565b9150506102c5565b8015610e3c57604051639996b31560e01b81526001600160a01b03851660048201526024016104a1565b3d15610e4f57610e4a610ed3565b610e68565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b34156108b15760405163b398979f60e01b815260040160405180910390fd5b5f610e97610ac2565b54600160401b900460ff16919050565b5f5f5f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f60208284031215610eee575f5ffd5b81356001600160e01b031981168114610334575f5ffd5b6001600160a01b0381168114610637575f5ffd5b5f5f5f60608486031215610f2b575f5ffd5b8335610f3681610f05565b92506020840135610f4681610f05565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610f9457610f94610f57565b604052919050565b5f5f60408385031215610fad575f5ffd5b8235610fb881610f05565b9150602083013567ffffffffffffffff811115610fd3575f5ffd5b8301601f81018513610fe3575f5ffd5b803567ffffffffffffffff811115610ffd57610ffd610f57565b611010601f8201601f1916602001610f6b565b818152866020838501011115611024575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215611056575f5ffd5b843561106181610f05565b9350602085013561107181610f05565b9250604085013561108181610f05565b9396929550929360600135925050565b5f608082840312156110a1575f5ffd5b50919050565b5f5f60a083850312156110b8575f5ffd5b82356110c381610f05565b91506110d28460208501611091565b90509250929050565b5f608082840312156110eb575f5ffd5b6103348383611091565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52602160045260245ffd5b6003811061115a57634e487b7160e01b5f52602160045260245ffd5b9052565b61116982825161113e565b602081015161117b602084018261113e565b50604081015161118e604084018261113e565b506060810151610978606084018261113e565b608081016102c5828461115e565b60038110610637575f5ffd5b5f60808284031280156111cc575f5ffd5b506040516080810167ffffffffffffffff811182821017156111f0576111f0610f57565b60405282356111fe816111af565b8152602083013561120e816111af565b60208201526040830135611221816111af565b60408201526060830135611234816111af565b60608201529392505050565b5f60208284031215611250575f5ffd5b815161033481610f05565b5f6020828403121561126b575f5ffd5b5051919050565b6001600160a01b038316815260a08101610334602083018461115e565b5f6020828403121561129f575f5ffd5b8135610334816111af565b80356112b5816111af565b6112bf838261113e565b5060208101356112ce816111af565b6112db602084018261113e565b5060408101356112ea816111af565b6112f7604084018261113e565b506060810135611306816111af565b610978606084018261113e565b608081016102c582846112aa565b5f81356102c5816111af565b6003821061134957634e487b7160e01b5f52602160045260245ffd5b805462ff00008360101b1662ff0000198216178255505050565b6003821061137f57634e487b7160e01b5f52602160045260245ffd5b805463ff0000008360181b1663ff000000198216178255505050565b81356113a6816111af565b600381106113c257634e487b7160e01b5f52602160045260245ffd5b815460ff821691508160ff19821617835560208401356113e1816111af565b600381106113fd57634e487b7160e01b5f52602160045260245ffd5b61ff008160081b168361ffff1984161717845550505061142861142260408401611321565b8261132d565b61035661143760608401611321565b82611363565b6001600160a01b038316815260a0810161033460208301846112aa56fe00bcd6ff29ae71d399fb597d99792fa72d0863bd723b9ab11f79d0b8d8ac5bc8360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220847a7730fa59d13c51189897b2f7145c2935ab4c07eb9f03a0e84b7f2110060564736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
