{
  "_format": "hh-sol-artifact-1",
  "contractName": "GenericDistributionHelper",
  "sourceName": "contracts/reserve/GenericDistributionHelper.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "name": "FEE_LIMIT",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "INVALID_CHAINID",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "reason",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountToSell",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountOutMinimum",
          "type": "uint256"
        }
      ],
      "name": "BuyNativeFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "distributed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "startingBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "incomingAmount",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "bps",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "chainId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "enum GenericDistributionHelper.TransferType",
              "name": "transferType",
              "type": "uint8"
            }
          ],
          "indexed": false,
          "internalType": "struct GenericDistributionHelper.DistributionRecipient[]",
          "name": "distributionRecipients",
          "type": "tuple[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gdSoldForGas",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "nativeBoughtForGas",
          "type": "uint256"
        }
      ],
      "name": "Distribution",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "bps",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "chainId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "enum GenericDistributionHelper.TransferType",
              "name": "transferType",
              "type": "uint8"
            }
          ],
          "indexed": false,
          "internalType": "struct GenericDistributionHelper.DistributionRecipient",
          "name": "recipient",
          "type": "tuple"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "RecipientAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "bps",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "chainId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "enum GenericDistributionHelper.TransferType",
              "name": "transferType",
              "type": "uint8"
            }
          ],
          "indexed": false,
          "internalType": "struct GenericDistributionHelper.DistributionRecipient",
          "name": "recipient",
          "type": "tuple"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "RecipientUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GUARDIAN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ROUTER",
      "outputs": [
        {
          "internalType": "contract ISwapRouter",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "STATIC_ORACLE",
      "outputs": [
        {
          "internalType": "contract IStaticOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "bps",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "chainId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "enum GenericDistributionHelper.TransferType",
              "name": "transferType",
              "type": "uint8"
            }
          ],
          "internalType": "struct GenericDistributionHelper.DistributionRecipient",
          "name": "_recipient",
          "type": "tuple"
        }
      ],
      "name": "addOrUpdateRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxAmountToSell",
          "type": "uint256"
        }
      ],
      "name": "calcGDToSell",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "gdToSell",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minReceived",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dao",
      "outputs": [
        {
          "internalType": "contract Controller",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "distributionRecipients",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "bps",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "chainId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "enum GenericDistributionHelper.TransferType",
          "name": "transferType",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeSettings",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "maxFee",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "minBalanceForFees",
          "type": "uint128"
        },
        {
          "internalType": "uint8",
          "name": "percentageToSellForFee",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "maxSlippage",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gasToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBridge",
      "outputs": [
        {
          "internalType": "contract IMessagePassingBridge",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract INameService",
          "name": "_ns",
          "type": "address"
        },
        {
          "internalType": "contract IStaticOracle",
          "name": "_oracle",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_gasToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_reserveToken",
          "type": "address"
        },
        {
          "internalType": "contract ISwapRouter",
          "name": "_router",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "maxFee",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "minBalanceForFees",
              "type": "uint128"
            },
            {
              "internalType": "uint8",
              "name": "percentageToSellForFee",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "maxSlippage",
              "type": "uint8"
            }
          ],
          "internalType": "struct GenericDistributionHelper.FeeSettings",
          "name": "_feeData",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nameService",
      "outputs": [
        {
          "internalType": "contract INameService",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "internalType": "contract IGoodDollar",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "onDistribution",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reserveToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "maxFee",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "minBalanceForFees",
              "type": "uint128"
            },
            {
              "internalType": "uint8",
              "name": "percentageToSellForFee",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "maxSlippage",
              "type": "uint8"
            }
          ],
          "internalType": "struct GenericDistributionHelper.FeeSettings",
          "name": "_feeData",
          "type": "tuple"
        }
      ],
      "name": "setFeeSettings",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_reserveToken",
          "type": "address"
        }
      ],
      "name": "setReserveToken",
      "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": [],
      "name": "updateAvatar",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b50608051613af261004c600039600081816108bc015281816108fc01528181610c1c01528181610c5c0152610cd40152613af26000f3fe60806040526004361061016c5760003560e01c806301ffc9a7146101785780630fffbaf3146101ad57806312adcebf146101cf5780631b3c90a8146101f05780631c6603ba14610207578063248a9ca31461027957806324ea54f4146102a75780632f2ff15d146102c957806332fe7b26146102e9578063346ef41b1461030a57806336568abe1461033a5780633659cfe61461035a5780633d34a2671461037a5780633e6326fc146103af5780634162169f146103cf5780634f1ef286146103ef57806352d1902d146104025780635aef7de61461041757806384f2b3841461043757806386d97a1a146104575780639010d07c1461047757806391d1485414610497578063a217fddf146104b7578063a88ced46146104cc578063a8ba3890146104ec578063b875d49c1461050c578063c91d59fe1461052c578063ca15c8731461054d578063d547741f1461056d578063e1758bd81461058d578063f4325d67146105a257600080fd5b3661017357005b600080fd5b34801561018457600080fd5b50610198610193366004612ed3565b6105c3565b60405190151581526020015b60405180910390f35b3480156101b957600080fd5b506101c26105ee565b6040516101a49190612efd565b3480156101db57600080fd5b50610166546101c2906001600160a01b031681565b3480156101fc57600080fd5b50610205610684565b005b34801561021357600080fd5b506101645461016554610245916001600160801b0380821692600160801b909204169060ff8082169161010090041684565b604080516001600160801b03958616815294909316602085015260ff918216928401929092521660608201526080016101a4565b34801561028557600080fd5b50610299610294366004612f11565b6107ab565b6040519081526020016101a4565b3480156102b357600080fd5b50610299600080516020613a9d83398151915281565b3480156102d557600080fd5b506102056102e4366004612f3f565b6107c0565b3480156102f557600080fd5b50610167546101c2906001600160a01b031681565b34801561031657600080fd5b5061032a610325366004612f11565b6107e1565b6040516101a49493929190612fa7565b34801561034657600080fd5b50610205610355366004612f3f565b61082f565b34801561036657600080fd5b50610205610375366004612fd8565b6108b2565b34801561038657600080fd5b5061039a610395366004612f11565b61097a565b604080519283526020830191909152016101a4565b3480156103bb57600080fd5b506067546101c2906001600160a01b031681565b3480156103db57600080fd5b506065546101c2906001600160a01b031681565b6102056103fd36600461305c565b610c12565b34801561040e57600080fd5b50610299610cc7565b34801561042357600080fd5b506066546101c2906001600160a01b031681565b34801561044357600080fd5b50610205610452366004612fd8565b610d76565b34801561046357600080fd5b50610205610472366004613120565b610d97565b34801561048357600080fd5b506101c261049236600461318b565b611058565b3480156104a357600080fd5b506101986104b2366004612f3f565b611078565b3480156104c357600080fd5b50610299600081565b3480156104d857600080fd5b506102056104e736600461323b565b6110a3565b3480156104f857600080fd5b50610205610507366004612f11565b61129a565b34801561051857600080fd5b506102056105273660046132bb565b6115d2565b34801561053857600080fd5b50610168546101c2906001600160a01b031681565b34801561055957600080fd5b50610299610568366004612f11565b611638565b34801561057957600080fd5b50610205610588366004612f3f565b611650565b34801561059957600080fd5b506101c261166c565b3480156105ae57600080fd5b50610169546101c2906001600160a01b031681565b60006001600160e01b03198216635a05180f60e01b14806105e857506105e8826116b8565b92915050565b60675460405163bf40fac160e01b81526020600482015260126024820152711354109094925111d157d0d3d395149050d560721b60448201526000916001600160a01b03169063bf40fac1906064015b602060405180830381865afa15801561065b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067f91906132d7565b905090565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156106e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070b91906132d7565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015610765573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078991906132d7565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600090815260fe602052604090206001015490565b6107c9826107ab565b6107d2816116ed565b6107dc83836116f7565b505050565b61016281815481106107f257600080fd5b60009182526020909120015463ffffffff8082169250600160201b82041690600160401b81046001600160a01b031690600160e01b900460ff1684565b6001600160a01b03811633146108a45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6108ae828261171a565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108fa5760405162461bcd60e51b815260040161089b906132f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661092c61173d565b6001600160a01b0316146109525760405162461bcd60e51b815260040161089b9061332e565b61095b81611759565b6040805160008082526020820190925261097791839190611761565b50565b610164546000908190819047906109a290600160801b90046001600160801b0316600361337e565b6001600160801b03166109b591906133a9565b610166546101685461016954604051630757bc8160e01b81529394506000936001600160a01b0393841693630757bc81936109fd938893918316921690603c906004016133bc565b600060405180830381865afa158015610a1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a42919081019061347b565b5061016654610169549192506001600160a01b0390811691630757bc8191849116610a6b61166c565b603c6040518563ffffffff1660e01b8152600401610a8c94939291906133bc565b600060405180830381865afa158015610aa9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ad1919081019061347b565b508094505081925084841115610c0b57610166548594506000906001600160a01b0316630757bc8186610b0261166c565b610169546040516001600160e01b031960e086901b168152610b359392916001600160a01b031690603c906004016133bc565b600060405180830381865afa158015610b52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b7a919081019061347b565b50610166546101695461016854604051630757bc8160e01b81529394506001600160a01b0392831693630757bc8193610bc193879390821692911690603c906004016133bc565b600060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c06919081019061347b565b509350505b5050915091565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c5a5760405162461bcd60e51b815260040161089b906132f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c8c61173d565b6001600160a01b031614610cb25760405162461bcd60e51b815260040161089b9061332e565b610cbb82611759565b6108ae82826001611761565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d625760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b606482015260840161089b565b50600080516020613a568339815191525b90565b600080516020613a9d833981519152610d8e816116ed565b6108ae826118cc565b6000610da2816116ed565b600082606001516002811115610dba57610dba612f6f565b14158015610dd2575046826020015163ffffffff1614155b15610df05760405163029b6e5760e41b815260040160405180910390fd5b60005b61016254811015610f495782604001516001600160a01b03166101628281548110610e2057610e206134c2565b600091825260209091200154600160401b90046001600160a01b031603610f3757826101628281548110610e5657610e566134c2565b60009182526020918290208351910180549284015160408501516001600160a01b0316600160401b02600160401b600160e01b031963ffffffff928316600160201b026001600160401b031990961692909416919091179390931791821683178155606084015190929091839160ff60e01b1916600160401b600160e81b031990911617600160e01b836002811115610ef157610ef1612f6f565b02179055509050507fd26d9de175cfca2c3e0cad9d09c85f0ce6c7fa5257382d00dc26dc5fb25cd8df8382604051610f2a9291906134d8565b60405180910390a1505050565b80610f4181613529565b915050610df3565b50610162546040517f2e65f65347b2e76218df0b7b6b594a3862c81e85706795e700237093c47a395791610f7f918591906134d8565b60405180910390a1610162805460018101825560009190915282517f29af0939a5988989bfee913a9ad10b9335cb63ebc9fd2b69e5f877d0455ac9199091018054602085015160408601516001600160a01b0316600160401b02600160401b600160e01b031963ffffffff928316600160201b026001600160401b031990941692909516919091179190911792831681178255606085015185939091839160ff60e01b19909116600160401b600160e81b031990911617600160e01b83600281111561104d5761104d612f6f565b021790555050505050565b60008281526101306020526040812061107190836119f2565b9392505050565b600091825260fe602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600054610100900460ff16158080156110c35750600054600160ff909116105b806110e457506110d2306119fe565b1580156110e4575060005460ff166001145b6111475760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161089b565b6000805460ff19166001179055801561116a576000805461ff0019166101001790555b611172611a0d565b61117b87611a7a565b606654611193906000906001600160a01b0316611a9d565b6066546111b890600080516020613a9d833981519152906001600160a01b0316611a9d565b61016680546001600160a01b038089166001600160a01b0319928316179092556101678054868416908316179055835160208501516001600160801b03908116600160801b029116176101645560408401516101658054606087015160ff9081166101000261ffff1990921693169290921791909117905561016880549288169290911691909117905561124b846118cc565b8015611291576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61016a546001036112ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161089b565b600161016a5560006112fd61166c565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016113289190612efd565b602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113699190613542565b90508060000361137957506115c9565b6101645460009081908190600160801b90046001600160801b03164710156114e957610165546064906113af9060ff168661355b565b6113b99190613572565b91506113c48261097a565b90925090506113d382856133a9565b93506113df8282611aa7565b61016854604051632e1a7d4d60e01b8152600481018390529194506001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561142757600080fd5b505af1925050508015611438575060015b6114e957611444613594565b806308c379a00361149357506114586135af565b806114635750611495565b600080516020613a168339815191528185600060405161148593929190613688565b60405180910390a1506114e9565b505b6040805160608082526014908201527315d15512081dda5d1a191c985dc819985a5b195960621b6080820152602081018590526000818301529051600080516020613a168339815191529181900360a00190a15b6000805b6101625481101561157f576000610162828154811061150e5761150e6134c2565b6000918252602090912001805490915063ffffffff161561156c578054600090612710906115429063ffffffff168a61355b565b61154c9190613572565b905061155881856136ad565b9350801561156a5761156a8282612371565b505b508061157781613529565b9150506114ed565b507fdbd53b67dd15f9594eee6de294654de25af4c2a14d79d76e47d08d83c8025f5d81868861016287896040516115bb969594939291906136c0565b60405180910390a150505050505b50600061016a55565b600080516020613a9d8339815191526115ea816116ed565b50805160208201516001600160801b03908116600160801b02911617610164556040810151610165805460609093015160ff9081166101000261ffff19909416921691909117919091179055565b6000818152610130602052604081206105e890612748565b611659826107ab565b611662816116ed565b6107dc838361171a565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640161063e565b60006001600160e01b03198216637965db0b60e01b14806105e857506301ffc9a760e01b6001600160e01b03198316146105e8565b6109778133612752565b61170182826127ab565b6000828152610130602052604090206107dc9082612831565b6117248282612846565b6000828152610130602052604090206107dc90826128ad565b600080516020613a56833981519152546001600160a01b031690565b6109776128c2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611794576107dc83612985565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156117ee575060408051601f3d908101601f191682019092526117eb91810190613542565b60015b6118515760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161089b565b600080516020613a5683398151915281146118c05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161089b565b506107dc838383612a1f565b61016980546001600160a01b0319166001600160a01b038381169182179092556101665490911690631c49cbb59061190261166c565b603c6040518463ffffffff1660e01b81526004016119229392919061376b565b6000604051808303816000875af1158015611941573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119699190810190613794565b50610166546101695461016854604051631c49cbb560e01b81526001600160a01b0393841693631c49cbb5936119ab9390821692911690603c9060040161376b565b6000604051808303816000875af11580156119ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ae9190810190613794565b60006110718383612a4a565b6001600160a01b03163b151590565b600054610100900460ff16611a785760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161089b565b565b606780546001600160a01b0319166001600160a01b038316179055610977610684565b6108ae82826116f7565b600082600003611ab9575060006105e8565b61016654610169546000916001600160a01b03908116916362d991199116611adf61166c565b6040518363ffffffff1660e01b8152600401611afc9291906137d0565b600060405180830381865afa158015611b19573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b419190810190613794565b6101665461016954610168546040516362d9911960e01b81529394506000936001600160a01b03938416936362d9911993611b8593908216929116906004016137d0565b600060405180830381865afa158015611ba2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bca9190810190613794565b9050815160001480611bdb57508051155b15611c3d57604080516060808252601290820152716e6f20706f6f6c7320617661696c61626c6560701b608082015260208101879052908101859052600080516020613a168339815191529060a00160405180910390a16000925050506105e8565b600081600081518110611c5257611c526134c2565b60200260200101516001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbb91906137ea565b6101685483519192506000916001600160a01b03909116906370a082319085908490611ce957611ce96134c2565b60200260200101516040518263ffffffff1660e01b8152600401611d0d9190612efd565b602060405180830381865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e9190613542565b905060015b8351811015611e8a576101685484516000916001600160a01b0316906370a0823190879085908110611d8757611d876134c2565b60200260200101516040518263ffffffff1660e01b8152600401611dab9190612efd565b602060405180830381865afa158015611dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dec9190613542565b905082811115611e7757809250848281518110611e0b57611e0b6134c2565b60200260200101516001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7491906137ea565b93505b5080611e8281613529565b915050611d53565b50600084600081518110611ea057611ea06134c2565b60200260200101516001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0991906137ea565b6101695486519192506000916001600160a01b03909116906370a082319088908490611f3757611f376134c2565b60200260200101516040518263ffffffff1660e01b8152600401611f5b9190612efd565b602060405180830381865afa158015611f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9c9190613542565b905060015b86518110156120d8576101695487516000916001600160a01b0316906370a08231908a9085908110611fd557611fd56134c2565b60200260200101516040518263ffffffff1660e01b8152600401611ff99190612efd565b602060405180830381865afa158015612016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203a9190613542565b9050828111156120c557809250878281518110612059576120596134c2565b60200260200101516001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c291906137ea565b93505b50806120d081613529565b915050611fa1565b506120e161166c565b6101675460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612115929116908d9060040161380f565b6020604051808303816000875af1158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190613828565b506101655460009060649061217590610100900460ff168261384a565b6121829060ff168b61355b565b61218c9190613572565b9050600060405180608001604052806121a361166c565b61016954610168546040516001600160601b0319606094851b811660208301526001600160e81b031960e88c811b8216603485015294861b82166037840152938d901b909316604b820152921b16604e82015260620160408051601f198184030181529181529082523060208301528181018e9052606090910184905261016754905163b858183f60e01b81529192506001600160a01b03169063b858183f90612251908490600401613863565b6020604051808303816000875af192505050801561228c575060408051601f3d908101601f1916820190925261228991810190613542565b60015b61236157612298613594565b806308c379a0036122f257506122ac6135af565b806122b757506122f4565b600080516020613a16833981519152818d856040516122d893929190613688565b60405180910390a1600099505050505050505050506105e8565b505b604080516060808252601c908201527b39bbb0b8103932bb32b93a32b2103bb4ba3437baba103932b0b9b7b760211b6080820152602081018d9052908101839052600080516020613a168339815191529060a00160405180910390a16000985050505050505050506105e8565b98506105e8975050505050505050565b60008254600160e01b900460ff16600281111561239057612390612f6f565b0361262a5761239d61166c565b6001600160a01b031663095ea7b36123b36105ee565b836040518363ffffffff1660e01b81526004016123d192919061380f565b6020604051808303816000875af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124149190613828565b50600061241f6105ee565b6001600160a01b03166305fead156124356105ee565b85546040516305b23a9960e41b8152600160201b90910463ffffffff1660048201526001600160a01b039190911690635b23a99090602401602060405180830381865afa15801561248a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ae91906138b1565b8554604051600160f01b602082015262061a8060228201523091600160401b90046001600160a01b03169087906000906042016040516020818303038152906040526040518763ffffffff1660e01b8152600401612511969594939291906138d5565b6040805180830381865afa15801561252d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125519190613926565b50610164549091506001600160801b031681118061256e57504781115b1561258f57604051634493514b60e11b81526004810182905260240161089b565b6125976105ee565b835460405163c56bbdd960e01b8152600160401b82046001600160a01b039081166004830152600160201b90920463ffffffff16602482015260448101859052608060648201526000608482015291169063c56bbdd990839060a4016000604051808303818588803b15801561260c57600080fd5b505af1158015612620573d6000803e3d6000fd5b5050505050505050565b60028254600160e01b900460ff16600281111561264957612649612f6f565b036126e15761265661166c565b8254604051630200057560e51b81526001600160a01b03600160401b90920482166004820152602481018490526060604482015260006064820152911690634000aea0906084015b6020604051808303816000875af11580156126bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dc9190613828565b60018254600160e01b900460ff16600281111561270057612700612f6f565b036108ae5761270d61166c565b825460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261269e92600160401b90910490911690859060040161380f565b60006105e8825490565b61275c8282611078565b6108ae5761276981612a74565b612774836020612a86565b60405160200161278592919061394a565b60408051601f198184030181529082905262461bcd60e51b825261089b916004016139b9565b6127b58282611078565b6108ae57600082815260fe602090815260408083206001600160a01b03851684529091529020805460ff191660011790556127ed3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611071836001600160a01b038416612c21565b6128508282611078565b156108ae57600082815260fe602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611071836001600160a01b038416612c70565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa15801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f91906132d7565b6001600160a01b031614611a785760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f64604482015260640161089b565b61298e816119fe565b6129f05760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161089b565b600080516020613a5683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612a2883612d63565b600082511180612a355750805b156107dc57612a448383612da3565b50505050565b6000826000018281548110612a6157612a616134c2565b9060005260206000200154905092915050565b60606105e86001600160a01b03831660145b60606000612a9583600261355b565b612aa09060026136ad565b6001600160401b03811115612ab757612ab7612ff5565b6040519080825280601f01601f191660200182016040528015612ae1576020820181803683370190505b509050600360fc1b81600081518110612afc57612afc6134c2565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612b2b57612b2b6134c2565b60200101906001600160f81b031916908160001a9053506000612b4f84600261355b565b612b5a9060016136ad565b90505b6001811115612bd2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612b8e57612b8e6134c2565b1a60f81b828281518110612ba457612ba46134c2565b60200101906001600160f81b031916908160001a90535060049490941c93612bcb816139cc565b9050612b5d565b5083156110715760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161089b565b6000818152600183016020526040812054612c68575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105e8565b5060006105e8565b60008181526001830160205260408120548015612d59576000612c946001836133a9565b8554909150600090612ca8906001906133a9565b9050818114612d0d576000866000018281548110612cc857612cc86134c2565b9060005260206000200154905080876000018481548110612ceb57612ceb6134c2565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612d1e57612d1e6139e3565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105e8565b60009150506105e8565b612d6c81612985565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060612dae836119fe565b612e095760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161089b565b600080846001600160a01b031684604051612e2491906139f9565b600060405180830381855af49150503d8060008114612e5f576040519150601f19603f3d011682016040523d82523d6000602084013e612e64565b606091505b5091509150612e8c8282604051806060016040528060278152602001613a7660279139612e95565b95945050505050565b60608315612ea4575081611071565b6110718383815115612eb95781518083602001fd5b8060405162461bcd60e51b815260040161089b91906139b9565b600060208284031215612ee557600080fd5b81356001600160e01b03198116811461107157600080fd5b6001600160a01b0391909116815260200190565b600060208284031215612f2357600080fd5b5035919050565b6001600160a01b038116811461097757600080fd5b60008060408385031215612f5257600080fd5b823591506020830135612f6481612f2a565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60038110612fa357634e487b7160e01b600052602160045260246000fd5b9052565b63ffffffff8581168252841660208201526001600160a01b038316604082015260808101612e8c6060830184612f85565b600060208284031215612fea57600080fd5b813561107181612f2a565b634e487b7160e01b600052604160045260246000fd5b608081016001600160401b038111828210171561302a5761302a612ff5565b60405250565b601f8201601f191681016001600160401b038111828210171561305557613055612ff5565b6040525050565b6000806040838503121561306f57600080fd5b823561307a81612f2a565b91506020838101356001600160401b038082111561309757600080fd5b818601915086601f8301126130ab57600080fd5b8135818111156130bd576130bd612ff5565b60405191506130d5601f8201601f1916850183613030565b80825287848285010111156130e957600080fd5b80848401858401376000848284010152508093505050509250929050565b803563ffffffff8116811461311b57600080fd5b919050565b60006080828403121561313257600080fd5b60405161313e8161300b565b61314783613107565b815261315560208401613107565b6020820152604083013561316881612f2a565b604082015260608301356003811061317f57600080fd5b60608201529392505050565b6000806040838503121561319e57600080fd5b50508035926020909101359150565b80356001600160801b038116811461311b57600080fd5b803560ff8116811461311b57600080fd5b6000608082840312156131e757600080fd5b6040516131f38161300b565b8091506131ff836131ad565b815261320d602084016131ad565b602082015261321e604084016131c4565b604082015261322f606084016131c4565b60608201525092915050565b600080600080600080610120878903121561325557600080fd5b863561326081612f2a565b9550602087013561327081612f2a565b9450604087013561328081612f2a565b9350606087013561329081612f2a565b925060808701356132a081612f2a565b91506132af8860a089016131d5565b90509295509295509295565b6000608082840312156132cd57600080fd5b61107183836131d5565b6000602082840312156132e957600080fd5b815161107181612f2a565b6020808252602c90820152600080516020613a3683398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020613a3683398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6001600160801b038181168382160280821691908281146133a1576133a1613368565b505092915050565b818103818111156105e8576105e8613368565b6001600160801b039490941684526001600160a01b0392831660208501529116604083015263ffffffff16606082015260800190565b600082601f83011261340357600080fd5b815160206001600160401b0382111561341e5761341e612ff5565b8160051b60405161343183830182613030565b9283528481018201928281018785111561344a57600080fd5b83870192505b8483101561347057825161346381612f2a565b8152918301918301613450565b509695505050505050565b6000806040838503121561348e57600080fd5b825160208401519092506001600160401b038111156134ac57600080fd5b6134b8858286016133f2565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b825163ffffffff9081168252602080850151909116908201526040808401516001600160a01b03169082015260608084015160a083019161351b90840182612f85565b508260808301529392505050565b60006001820161353b5761353b613368565b5060010190565b60006020828403121561355457600080fd5b5051919050565b80820281158282048414176105e8576105e8613368565b60008261358f57634e487b7160e01b600052601260045260246000fd5b500490565b600060033d1115610d735760046000803e5060005160e01c90565b600060443d10156135bd5790565b6040516003193d81016004833e81513d6001600160401b0380831160248401831017156135ec57505050505090565b82850191508151818111156136045750505050505090565b843d870101602082850101111561361e5750505050505090565b61362d60208286010187613030565b509095945050505050565b60005b8381101561365357818101518382015260200161363b565b50506000910152565b60008151808452613674816020860160208601613638565b601f01601f19169290920160200192915050565b60608152600061369b606083018661365c565b60208301949094525060400152919050565b808201808211156105e8576105e8613368565b600060c082018883526020888185015260408881860152606060c08187015283895480865260e0955085880191508a6000528460002060005b8281101561374a57815463ffffffff808216865281891c168886015280871c6001600160a01b031687860152613736868601828b1c60ff16612f85565b5060809390930192600191820191016136f9565b50505060808701989098525050505060a09091019190915250949350505050565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b6000602082840312156137a657600080fd5b81516001600160401b038111156137bc57600080fd5b6137c8848285016133f2565b949350505050565b6001600160a01b0392831681529116602082015260400190565b6000602082840312156137fc57600080fd5b815162ffffff8116811461107157600080fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561383a57600080fd5b8151801515811461107157600080fd5b60ff82811682821603908111156105e8576105e8613368565b60208152600082516080602084015261387f60a084018261365c565b905060018060a01b03602085015116604084015260408401516060840152606084015160808401528091505092915050565b6000602082840312156138c357600080fd5b815161ffff8116811461107157600080fd5b61ffff871681526001600160a01b0386811660208301528516604082015260608101849052821515608082015260c060a0820181905260009061391a9083018461365c565b98975050505050505050565b6000806040838503121561393957600080fd5b505080516020909101519092909150565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161397c816017850160208801613638565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516139ad816028840160208801613638565b01602801949350505050565b602081526000611071602083018461365c565b6000816139db576139db613368565b506000190190565b634e487b7160e01b600052603160045260246000fd5b60008251613a0b818460208701613638565b919091019291505056fe1c337a8467703b7dbf7a278074870cb1a1f993ef69d022192ba360567703098f46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220b3f1ec76dfb1ac5f46498de096ad109417124dc270cc9656e0ebe92cbc2e1ee664736f6c63430008130033",
  "deployedBytecode": "0x60806040526004361061016c5760003560e01c806301ffc9a7146101785780630fffbaf3146101ad57806312adcebf146101cf5780631b3c90a8146101f05780631c6603ba14610207578063248a9ca31461027957806324ea54f4146102a75780632f2ff15d146102c957806332fe7b26146102e9578063346ef41b1461030a57806336568abe1461033a5780633659cfe61461035a5780633d34a2671461037a5780633e6326fc146103af5780634162169f146103cf5780634f1ef286146103ef57806352d1902d146104025780635aef7de61461041757806384f2b3841461043757806386d97a1a146104575780639010d07c1461047757806391d1485414610497578063a217fddf146104b7578063a88ced46146104cc578063a8ba3890146104ec578063b875d49c1461050c578063c91d59fe1461052c578063ca15c8731461054d578063d547741f1461056d578063e1758bd81461058d578063f4325d67146105a257600080fd5b3661017357005b600080fd5b34801561018457600080fd5b50610198610193366004612ed3565b6105c3565b60405190151581526020015b60405180910390f35b3480156101b957600080fd5b506101c26105ee565b6040516101a49190612efd565b3480156101db57600080fd5b50610166546101c2906001600160a01b031681565b3480156101fc57600080fd5b50610205610684565b005b34801561021357600080fd5b506101645461016554610245916001600160801b0380821692600160801b909204169060ff8082169161010090041684565b604080516001600160801b03958616815294909316602085015260ff918216928401929092521660608201526080016101a4565b34801561028557600080fd5b50610299610294366004612f11565b6107ab565b6040519081526020016101a4565b3480156102b357600080fd5b50610299600080516020613a9d83398151915281565b3480156102d557600080fd5b506102056102e4366004612f3f565b6107c0565b3480156102f557600080fd5b50610167546101c2906001600160a01b031681565b34801561031657600080fd5b5061032a610325366004612f11565b6107e1565b6040516101a49493929190612fa7565b34801561034657600080fd5b50610205610355366004612f3f565b61082f565b34801561036657600080fd5b50610205610375366004612fd8565b6108b2565b34801561038657600080fd5b5061039a610395366004612f11565b61097a565b604080519283526020830191909152016101a4565b3480156103bb57600080fd5b506067546101c2906001600160a01b031681565b3480156103db57600080fd5b506065546101c2906001600160a01b031681565b6102056103fd36600461305c565b610c12565b34801561040e57600080fd5b50610299610cc7565b34801561042357600080fd5b506066546101c2906001600160a01b031681565b34801561044357600080fd5b50610205610452366004612fd8565b610d76565b34801561046357600080fd5b50610205610472366004613120565b610d97565b34801561048357600080fd5b506101c261049236600461318b565b611058565b3480156104a357600080fd5b506101986104b2366004612f3f565b611078565b3480156104c357600080fd5b50610299600081565b3480156104d857600080fd5b506102056104e736600461323b565b6110a3565b3480156104f857600080fd5b50610205610507366004612f11565b61129a565b34801561051857600080fd5b506102056105273660046132bb565b6115d2565b34801561053857600080fd5b50610168546101c2906001600160a01b031681565b34801561055957600080fd5b50610299610568366004612f11565b611638565b34801561057957600080fd5b50610205610588366004612f3f565b611650565b34801561059957600080fd5b506101c261166c565b3480156105ae57600080fd5b50610169546101c2906001600160a01b031681565b60006001600160e01b03198216635a05180f60e01b14806105e857506105e8826116b8565b92915050565b60675460405163bf40fac160e01b81526020600482015260126024820152711354109094925111d157d0d3d395149050d560721b60448201526000916001600160a01b03169063bf40fac1906064015b602060405180830381865afa15801561065b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067f91906132d7565b905090565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156106e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070b91906132d7565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015610765573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078991906132d7565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b600090815260fe602052604090206001015490565b6107c9826107ab565b6107d2816116ed565b6107dc83836116f7565b505050565b61016281815481106107f257600080fd5b60009182526020909120015463ffffffff8082169250600160201b82041690600160401b81046001600160a01b031690600160e01b900460ff1684565b6001600160a01b03811633146108a45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6108ae828261171a565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108fa5760405162461bcd60e51b815260040161089b906132f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661092c61173d565b6001600160a01b0316146109525760405162461bcd60e51b815260040161089b9061332e565b61095b81611759565b6040805160008082526020820190925261097791839190611761565b50565b610164546000908190819047906109a290600160801b90046001600160801b0316600361337e565b6001600160801b03166109b591906133a9565b610166546101685461016954604051630757bc8160e01b81529394506000936001600160a01b0393841693630757bc81936109fd938893918316921690603c906004016133bc565b600060405180830381865afa158015610a1a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a42919081019061347b565b5061016654610169549192506001600160a01b0390811691630757bc8191849116610a6b61166c565b603c6040518563ffffffff1660e01b8152600401610a8c94939291906133bc565b600060405180830381865afa158015610aa9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ad1919081019061347b565b508094505081925084841115610c0b57610166548594506000906001600160a01b0316630757bc8186610b0261166c565b610169546040516001600160e01b031960e086901b168152610b359392916001600160a01b031690603c906004016133bc565b600060405180830381865afa158015610b52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b7a919081019061347b565b50610166546101695461016854604051630757bc8160e01b81529394506001600160a01b0392831693630757bc8193610bc193879390821692911690603c906004016133bc565b600060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c06919081019061347b565b509350505b5050915091565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c5a5760405162461bcd60e51b815260040161089b906132f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c8c61173d565b6001600160a01b031614610cb25760405162461bcd60e51b815260040161089b9061332e565b610cbb82611759565b6108ae82826001611761565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d625760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b606482015260840161089b565b50600080516020613a568339815191525b90565b600080516020613a9d833981519152610d8e816116ed565b6108ae826118cc565b6000610da2816116ed565b600082606001516002811115610dba57610dba612f6f565b14158015610dd2575046826020015163ffffffff1614155b15610df05760405163029b6e5760e41b815260040160405180910390fd5b60005b61016254811015610f495782604001516001600160a01b03166101628281548110610e2057610e206134c2565b600091825260209091200154600160401b90046001600160a01b031603610f3757826101628281548110610e5657610e566134c2565b60009182526020918290208351910180549284015160408501516001600160a01b0316600160401b02600160401b600160e01b031963ffffffff928316600160201b026001600160401b031990961692909416919091179390931791821683178155606084015190929091839160ff60e01b1916600160401b600160e81b031990911617600160e01b836002811115610ef157610ef1612f6f565b02179055509050507fd26d9de175cfca2c3e0cad9d09c85f0ce6c7fa5257382d00dc26dc5fb25cd8df8382604051610f2a9291906134d8565b60405180910390a1505050565b80610f4181613529565b915050610df3565b50610162546040517f2e65f65347b2e76218df0b7b6b594a3862c81e85706795e700237093c47a395791610f7f918591906134d8565b60405180910390a1610162805460018101825560009190915282517f29af0939a5988989bfee913a9ad10b9335cb63ebc9fd2b69e5f877d0455ac9199091018054602085015160408601516001600160a01b0316600160401b02600160401b600160e01b031963ffffffff928316600160201b026001600160401b031990941692909516919091179190911792831681178255606085015185939091839160ff60e01b19909116600160401b600160e81b031990911617600160e01b83600281111561104d5761104d612f6f565b021790555050505050565b60008281526101306020526040812061107190836119f2565b9392505050565b600091825260fe602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600054610100900460ff16158080156110c35750600054600160ff909116105b806110e457506110d2306119fe565b1580156110e4575060005460ff166001145b6111475760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161089b565b6000805460ff19166001179055801561116a576000805461ff0019166101001790555b611172611a0d565b61117b87611a7a565b606654611193906000906001600160a01b0316611a9d565b6066546111b890600080516020613a9d833981519152906001600160a01b0316611a9d565b61016680546001600160a01b038089166001600160a01b0319928316179092556101678054868416908316179055835160208501516001600160801b03908116600160801b029116176101645560408401516101658054606087015160ff9081166101000261ffff1990921693169290921791909117905561016880549288169290911691909117905561124b846118cc565b8015611291576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61016a546001036112ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161089b565b600161016a5560006112fd61166c565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016113289190612efd565b602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113699190613542565b90508060000361137957506115c9565b6101645460009081908190600160801b90046001600160801b03164710156114e957610165546064906113af9060ff168661355b565b6113b99190613572565b91506113c48261097a565b90925090506113d382856133a9565b93506113df8282611aa7565b61016854604051632e1a7d4d60e01b8152600481018390529194506001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561142757600080fd5b505af1925050508015611438575060015b6114e957611444613594565b806308c379a00361149357506114586135af565b806114635750611495565b600080516020613a168339815191528185600060405161148593929190613688565b60405180910390a1506114e9565b505b6040805160608082526014908201527315d15512081dda5d1a191c985dc819985a5b195960621b6080820152602081018590526000818301529051600080516020613a168339815191529181900360a00190a15b6000805b6101625481101561157f576000610162828154811061150e5761150e6134c2565b6000918252602090912001805490915063ffffffff161561156c578054600090612710906115429063ffffffff168a61355b565b61154c9190613572565b905061155881856136ad565b9350801561156a5761156a8282612371565b505b508061157781613529565b9150506114ed565b507fdbd53b67dd15f9594eee6de294654de25af4c2a14d79d76e47d08d83c8025f5d81868861016287896040516115bb969594939291906136c0565b60405180910390a150505050505b50600061016a55565b600080516020613a9d8339815191526115ea816116ed565b50805160208201516001600160801b03908116600160801b02911617610164556040810151610165805460609093015160ff9081166101000261ffff19909416921691909117919091179055565b6000818152610130602052604081206105e890612748565b611659826107ab565b611662816116ed565b6107dc838361171a565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac19060640161063e565b60006001600160e01b03198216637965db0b60e01b14806105e857506301ffc9a760e01b6001600160e01b03198316146105e8565b6109778133612752565b61170182826127ab565b6000828152610130602052604090206107dc9082612831565b6117248282612846565b6000828152610130602052604090206107dc90826128ad565b600080516020613a56833981519152546001600160a01b031690565b6109776128c2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611794576107dc83612985565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156117ee575060408051601f3d908101601f191682019092526117eb91810190613542565b60015b6118515760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161089b565b600080516020613a5683398151915281146118c05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161089b565b506107dc838383612a1f565b61016980546001600160a01b0319166001600160a01b038381169182179092556101665490911690631c49cbb59061190261166c565b603c6040518463ffffffff1660e01b81526004016119229392919061376b565b6000604051808303816000875af1158015611941573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119699190810190613794565b50610166546101695461016854604051631c49cbb560e01b81526001600160a01b0393841693631c49cbb5936119ab9390821692911690603c9060040161376b565b6000604051808303816000875af11580156119ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ae9190810190613794565b60006110718383612a4a565b6001600160a01b03163b151590565b600054610100900460ff16611a785760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161089b565b565b606780546001600160a01b0319166001600160a01b038316179055610977610684565b6108ae82826116f7565b600082600003611ab9575060006105e8565b61016654610169546000916001600160a01b03908116916362d991199116611adf61166c565b6040518363ffffffff1660e01b8152600401611afc9291906137d0565b600060405180830381865afa158015611b19573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b419190810190613794565b6101665461016954610168546040516362d9911960e01b81529394506000936001600160a01b03938416936362d9911993611b8593908216929116906004016137d0565b600060405180830381865afa158015611ba2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bca9190810190613794565b9050815160001480611bdb57508051155b15611c3d57604080516060808252601290820152716e6f20706f6f6c7320617661696c61626c6560701b608082015260208101879052908101859052600080516020613a168339815191529060a00160405180910390a16000925050506105e8565b600081600081518110611c5257611c526134c2565b60200260200101516001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbb91906137ea565b6101685483519192506000916001600160a01b03909116906370a082319085908490611ce957611ce96134c2565b60200260200101516040518263ffffffff1660e01b8152600401611d0d9190612efd565b602060405180830381865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e9190613542565b905060015b8351811015611e8a576101685484516000916001600160a01b0316906370a0823190879085908110611d8757611d876134c2565b60200260200101516040518263ffffffff1660e01b8152600401611dab9190612efd565b602060405180830381865afa158015611dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dec9190613542565b905082811115611e7757809250848281518110611e0b57611e0b6134c2565b60200260200101516001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7491906137ea565b93505b5080611e8281613529565b915050611d53565b50600084600081518110611ea057611ea06134c2565b60200260200101516001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0991906137ea565b6101695486519192506000916001600160a01b03909116906370a082319088908490611f3757611f376134c2565b60200260200101516040518263ffffffff1660e01b8152600401611f5b9190612efd565b602060405180830381865afa158015611f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9c9190613542565b905060015b86518110156120d8576101695487516000916001600160a01b0316906370a08231908a9085908110611fd557611fd56134c2565b60200260200101516040518263ffffffff1660e01b8152600401611ff99190612efd565b602060405180830381865afa158015612016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203a9190613542565b9050828111156120c557809250878281518110612059576120596134c2565b60200260200101516001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c291906137ea565b93505b50806120d081613529565b915050611fa1565b506120e161166c565b6101675460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612115929116908d9060040161380f565b6020604051808303816000875af1158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190613828565b506101655460009060649061217590610100900460ff168261384a565b6121829060ff168b61355b565b61218c9190613572565b9050600060405180608001604052806121a361166c565b61016954610168546040516001600160601b0319606094851b811660208301526001600160e81b031960e88c811b8216603485015294861b82166037840152938d901b909316604b820152921b16604e82015260620160408051601f198184030181529181529082523060208301528181018e9052606090910184905261016754905163b858183f60e01b81529192506001600160a01b03169063b858183f90612251908490600401613863565b6020604051808303816000875af192505050801561228c575060408051601f3d908101601f1916820190925261228991810190613542565b60015b61236157612298613594565b806308c379a0036122f257506122ac6135af565b806122b757506122f4565b600080516020613a16833981519152818d856040516122d893929190613688565b60405180910390a1600099505050505050505050506105e8565b505b604080516060808252601c908201527b39bbb0b8103932bb32b93a32b2103bb4ba3437baba103932b0b9b7b760211b6080820152602081018d9052908101839052600080516020613a168339815191529060a00160405180910390a16000985050505050505050506105e8565b98506105e8975050505050505050565b60008254600160e01b900460ff16600281111561239057612390612f6f565b0361262a5761239d61166c565b6001600160a01b031663095ea7b36123b36105ee565b836040518363ffffffff1660e01b81526004016123d192919061380f565b6020604051808303816000875af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124149190613828565b50600061241f6105ee565b6001600160a01b03166305fead156124356105ee565b85546040516305b23a9960e41b8152600160201b90910463ffffffff1660048201526001600160a01b039190911690635b23a99090602401602060405180830381865afa15801561248a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ae91906138b1565b8554604051600160f01b602082015262061a8060228201523091600160401b90046001600160a01b03169087906000906042016040516020818303038152906040526040518763ffffffff1660e01b8152600401612511969594939291906138d5565b6040805180830381865afa15801561252d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125519190613926565b50610164549091506001600160801b031681118061256e57504781115b1561258f57604051634493514b60e11b81526004810182905260240161089b565b6125976105ee565b835460405163c56bbdd960e01b8152600160401b82046001600160a01b039081166004830152600160201b90920463ffffffff16602482015260448101859052608060648201526000608482015291169063c56bbdd990839060a4016000604051808303818588803b15801561260c57600080fd5b505af1158015612620573d6000803e3d6000fd5b5050505050505050565b60028254600160e01b900460ff16600281111561264957612649612f6f565b036126e15761265661166c565b8254604051630200057560e51b81526001600160a01b03600160401b90920482166004820152602481018490526060604482015260006064820152911690634000aea0906084015b6020604051808303816000875af11580156126bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dc9190613828565b60018254600160e01b900460ff16600281111561270057612700612f6f565b036108ae5761270d61166c565b825460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261269e92600160401b90910490911690859060040161380f565b60006105e8825490565b61275c8282611078565b6108ae5761276981612a74565b612774836020612a86565b60405160200161278592919061394a565b60408051601f198184030181529082905262461bcd60e51b825261089b916004016139b9565b6127b58282611078565b6108ae57600082815260fe602090815260408083206001600160a01b03851684529091529020805460ff191660011790556127ed3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611071836001600160a01b038416612c21565b6128508282611078565b156108ae57600082815260fe602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611071836001600160a01b038416612c70565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa15801561290b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292f91906132d7565b6001600160a01b031614611a785760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f64604482015260640161089b565b61298e816119fe565b6129f05760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161089b565b600080516020613a5683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612a2883612d63565b600082511180612a355750805b156107dc57612a448383612da3565b50505050565b6000826000018281548110612a6157612a616134c2565b9060005260206000200154905092915050565b60606105e86001600160a01b03831660145b60606000612a9583600261355b565b612aa09060026136ad565b6001600160401b03811115612ab757612ab7612ff5565b6040519080825280601f01601f191660200182016040528015612ae1576020820181803683370190505b509050600360fc1b81600081518110612afc57612afc6134c2565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612b2b57612b2b6134c2565b60200101906001600160f81b031916908160001a9053506000612b4f84600261355b565b612b5a9060016136ad565b90505b6001811115612bd2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612b8e57612b8e6134c2565b1a60f81b828281518110612ba457612ba46134c2565b60200101906001600160f81b031916908160001a90535060049490941c93612bcb816139cc565b9050612b5d565b5083156110715760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161089b565b6000818152600183016020526040812054612c68575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105e8565b5060006105e8565b60008181526001830160205260408120548015612d59576000612c946001836133a9565b8554909150600090612ca8906001906133a9565b9050818114612d0d576000866000018281548110612cc857612cc86134c2565b9060005260206000200154905080876000018481548110612ceb57612ceb6134c2565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612d1e57612d1e6139e3565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105e8565b60009150506105e8565b612d6c81612985565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060612dae836119fe565b612e095760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161089b565b600080846001600160a01b031684604051612e2491906139f9565b600060405180830381855af49150503d8060008114612e5f576040519150601f19603f3d011682016040523d82523d6000602084013e612e64565b606091505b5091509150612e8c8282604051806060016040528060278152602001613a7660279139612e95565b95945050505050565b60608315612ea4575081611071565b6110718383815115612eb95781518083602001fd5b8060405162461bcd60e51b815260040161089b91906139b9565b600060208284031215612ee557600080fd5b81356001600160e01b03198116811461107157600080fd5b6001600160a01b0391909116815260200190565b600060208284031215612f2357600080fd5b5035919050565b6001600160a01b038116811461097757600080fd5b60008060408385031215612f5257600080fd5b823591506020830135612f6481612f2a565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60038110612fa357634e487b7160e01b600052602160045260246000fd5b9052565b63ffffffff8581168252841660208201526001600160a01b038316604082015260808101612e8c6060830184612f85565b600060208284031215612fea57600080fd5b813561107181612f2a565b634e487b7160e01b600052604160045260246000fd5b608081016001600160401b038111828210171561302a5761302a612ff5565b60405250565b601f8201601f191681016001600160401b038111828210171561305557613055612ff5565b6040525050565b6000806040838503121561306f57600080fd5b823561307a81612f2a565b91506020838101356001600160401b038082111561309757600080fd5b818601915086601f8301126130ab57600080fd5b8135818111156130bd576130bd612ff5565b60405191506130d5601f8201601f1916850183613030565b80825287848285010111156130e957600080fd5b80848401858401376000848284010152508093505050509250929050565b803563ffffffff8116811461311b57600080fd5b919050565b60006080828403121561313257600080fd5b60405161313e8161300b565b61314783613107565b815261315560208401613107565b6020820152604083013561316881612f2a565b604082015260608301356003811061317f57600080fd5b60608201529392505050565b6000806040838503121561319e57600080fd5b50508035926020909101359150565b80356001600160801b038116811461311b57600080fd5b803560ff8116811461311b57600080fd5b6000608082840312156131e757600080fd5b6040516131f38161300b565b8091506131ff836131ad565b815261320d602084016131ad565b602082015261321e604084016131c4565b604082015261322f606084016131c4565b60608201525092915050565b600080600080600080610120878903121561325557600080fd5b863561326081612f2a565b9550602087013561327081612f2a565b9450604087013561328081612f2a565b9350606087013561329081612f2a565b925060808701356132a081612f2a565b91506132af8860a089016131d5565b90509295509295509295565b6000608082840312156132cd57600080fd5b61107183836131d5565b6000602082840312156132e957600080fd5b815161107181612f2a565b6020808252602c90820152600080516020613a3683398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020613a3683398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6001600160801b038181168382160280821691908281146133a1576133a1613368565b505092915050565b818103818111156105e8576105e8613368565b6001600160801b039490941684526001600160a01b0392831660208501529116604083015263ffffffff16606082015260800190565b600082601f83011261340357600080fd5b815160206001600160401b0382111561341e5761341e612ff5565b8160051b60405161343183830182613030565b9283528481018201928281018785111561344a57600080fd5b83870192505b8483101561347057825161346381612f2a565b8152918301918301613450565b509695505050505050565b6000806040838503121561348e57600080fd5b825160208401519092506001600160401b038111156134ac57600080fd5b6134b8858286016133f2565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b825163ffffffff9081168252602080850151909116908201526040808401516001600160a01b03169082015260608084015160a083019161351b90840182612f85565b508260808301529392505050565b60006001820161353b5761353b613368565b5060010190565b60006020828403121561355457600080fd5b5051919050565b80820281158282048414176105e8576105e8613368565b60008261358f57634e487b7160e01b600052601260045260246000fd5b500490565b600060033d1115610d735760046000803e5060005160e01c90565b600060443d10156135bd5790565b6040516003193d81016004833e81513d6001600160401b0380831160248401831017156135ec57505050505090565b82850191508151818111156136045750505050505090565b843d870101602082850101111561361e5750505050505090565b61362d60208286010187613030565b509095945050505050565b60005b8381101561365357818101518382015260200161363b565b50506000910152565b60008151808452613674816020860160208601613638565b601f01601f19169290920160200192915050565b60608152600061369b606083018661365c565b60208301949094525060400152919050565b808201808211156105e8576105e8613368565b600060c082018883526020888185015260408881860152606060c08187015283895480865260e0955085880191508a6000528460002060005b8281101561374a57815463ffffffff808216865281891c168886015280871c6001600160a01b031687860152613736868601828b1c60ff16612f85565b5060809390930192600191820191016136f9565b50505060808701989098525050505060a09091019190915250949350505050565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b6000602082840312156137a657600080fd5b81516001600160401b038111156137bc57600080fd5b6137c8848285016133f2565b949350505050565b6001600160a01b0392831681529116602082015260400190565b6000602082840312156137fc57600080fd5b815162ffffff8116811461107157600080fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561383a57600080fd5b8151801515811461107157600080fd5b60ff82811682821603908111156105e8576105e8613368565b60208152600082516080602084015261387f60a084018261365c565b905060018060a01b03602085015116604084015260408401516060840152606084015160808401528091505092915050565b6000602082840312156138c357600080fd5b815161ffff8116811461107157600080fd5b61ffff871681526001600160a01b0386811660208301528516604082015260608101849052821515608082015260c060a0820181905260009061391a9083018461365c565b98975050505050505050565b6000806040838503121561393957600080fd5b505080516020909101519092909150565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161397c816017850160208801613638565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516139ad816028840160208801613638565b01602801949350505050565b602081526000611071602083018461365c565b6000816139db576139db613368565b506000190190565b634e487b7160e01b600052603160045260246000fd5b60008251613a0b818460208701613638565b919091019291505056fe1c337a8467703b7dbf7a278074870cb1a1f993ef69d022192ba360567703098f46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220b3f1ec76dfb1ac5f46498de096ad109417124dc270cc9656e0ebe92cbc2e1ee664736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
