60806040525f80546001600160a01b03191633179055348015610020575f80fd5b5060405161102038038061102083398101604081905261003f91610064565b600180546001600160a01b0319166001600160a01b0392909216919091179055610091565b5f60208284031215610074575f80fd5b81516001600160a01b038116811461008a575f80fd5b9392505050565b610f828061009e5f395ff3fe608060405234801561000f575f80fd5b50600436106100fb575f3560e01c806342966c681161009357806395d89b411161006357806395d89b4114610238578063a9059cbb14610240578063be45fd6214610253578063dd62ed3e14610266575f80fd5b806342966c68146101cd5780635a3b7e42146101e057806370a08231146101ff578063938b5f3214610227575f80fd5b806318160ddd116100ce57806318160ddd1461017957806323b872dd1461018b578063313ce5671461019e57806340c10f19146101b8575f80fd5b806301ffc9a7146100ff57806302d05d3f1461012757806306fdde0314610151578063095ea7b314610166575b5f80fd5b61011261010d366004610b56565b61029e565b60405190151581526020015b60405180910390f35b5f54610139906001600160a01b031681565b6040516001600160a01b03909116815260200161011e565b610159610325565b60405161011e9190610bc5565b610112610174366004610bf2565b610398565b6003545b60405190815260200161011e565b610112610199366004610c1a565b610457565b6101a66105b1565b60405160ff909116815260200161011e565b6101cb6101c6366004610bf2565b61061c565b005b6101cb6101db366004610c53565b6106ed565b60408051808201909152600381526232323360e81b6020820152610159565b61017d61020d366004610c6a565b6001600160a01b03165f9081526004602052604090205490565b6001546001600160a01b0316610139565b6101596107b8565b61011261024e366004610bf2565b61084a565b610112610261366004610c83565b6109cb565b61017d610274366004610d03565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b5f6001600160e01b03198216634a17459160e11b14806102ce57506001600160e01b031982166336372b0760e01b145b806102e957506001600160e01b03198216633ed8c78560e01b145b8061030457506001600160e01b03198216630ddef4e160e41b145b8061031f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600154604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301925f9291908290030181865afa15801561036c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526103939190810190610d48565b905090565b5f6001600160a01b0383166103f45760405162461bcd60e51b815260206004820152601760248201527f4552432d3232333a205370656e646572206572726f722e00000000000000000060448201526064015b60405180910390fd5b335f8181526002602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6001600160a01b0383165f9081526002602090815260408083203384529091528120548211156104c95760405162461bcd60e51b815260206004820181905260248201527f4552432d3232333a20496e73756666696369656e7420616c6c6f77616e63652e60448201526064016103eb565b6001600160a01b0384165f90815260046020526040812080548492906104f0908490610e04565b90915550506001600160a01b0384165f90815260026020908152604080832033845290915281208054849290610527908490610e04565b90915550506001600160a01b0383165f9081526004602052604081208054849290610553908490610e17565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161059f91815260200190565b60405180910390a35060019392505050565b6001546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156105f8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103939190610e2a565b5f546001600160a01b031633146106a55760405162461bcd60e51b815260206004820152604160248201527f5772617070657220546f6b656e3a204f6e6c79207468652063726561746f722060448201527f636f6e74726163742063616e206d696e74207772617070657220746f6b656e736064820152601760f91b608482015260a4016103eb565b6001600160a01b0382165f90815260046020526040812080548392906106cc908490610e17565b925050819055508060035f8282546106e49190610e17565b90915550505050565b5f546001600160a01b0316331461077a5760405162461bcd60e51b8152602060048201526044602482018190527f5772617070657220546f6b656e3a204f6e6c79207468652063726561746f7220908201527f636f6e74726163742063616e2064657374726f79207772617070657220746f6b60648201526332b7399760e11b608482015260a4016103eb565b335f9081526004602052604081208054839290610798908490610e04565b925050819055508060035f8282546107b09190610e04565b909155505050565b600154604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301925f9291908290030181865afa1580156107ff573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108269190810190610d48565b6040516020016108369190610e4a565b604051602081830303815290604052905090565b60408051808201825260048082525f60208084018290523382529190915291822054610877908490610e04565b335f90815260046020526040808220929092556001600160a01b038616815220546108a3908490610e17565b6001600160a01b0385165f90815260046020526040902055833b15610934576040516344a1f60160e11b81526001600160a01b03851690638943ec02906108f290339087908690600401610e70565b6020604051808303815f875af115801561090e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109329190610e9f565b505b836001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c168584604051610979929190610eba565b60405180910390a36040518381526001600160a01b0385169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060019392505050565b335f908152600460205260408120546109e5908590610e04565b335f90815260046020526040808220929092556001600160a01b03871681522054610a11908590610e17565b6001600160a01b0386165f90815260046020526040902055843b15610aa4576040516344a1f60160e11b81526001600160a01b03861690638943ec0290610a62903390889088908890600401610f02565b6020604051808303815f875af1158015610a7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa29190610e9f565b505b846001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16868686604051610aeb93929190610f33565b60405180910390a36040518481526001600160a01b0386169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3506001949350505050565b6001600160e01b031981168114610b53575f80fd5b50565b5f60208284031215610b66575f80fd5b8135610b7181610b3e565b9392505050565b5f5b83811015610b92578181015183820152602001610b7a565b50505f910152565b5f8151808452610bb1816020860160208601610b78565b601f01601f19169290920160200192915050565b602081525f610b716020830184610b9a565b80356001600160a01b0381168114610bed575f80fd5b919050565b5f8060408385031215610c03575f80fd5b610c0c83610bd7565b946020939093013593505050565b5f805f60608486031215610c2c575f80fd5b610c3584610bd7565b9250610c4360208501610bd7565b9150604084013590509250925092565b5f60208284031215610c63575f80fd5b5035919050565b5f60208284031215610c7a575f80fd5b610b7182610bd7565b5f805f8060608587031215610c96575f80fd5b610c9f85610bd7565b935060208501359250604085013567ffffffffffffffff80821115610cc2575f80fd5b818701915087601f830112610cd5575f80fd5b813581811115610ce3575f80fd5b886020828501011115610cf4575f80fd5b95989497505060200194505050565b5f8060408385031215610d14575f80fd5b610d1d83610bd7565b9150610d2b60208401610bd7565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610d58575f80fd5b815167ffffffffffffffff80821115610d6f575f80fd5b818401915084601f830112610d82575f80fd5b815181811115610d9457610d94610d34565b604051601f8201601f19908116603f01168101908382118183101715610dbc57610dbc610d34565b81604052828152876020848701011115610dd4575f80fd5b610de5836020830160208801610b78565b979650505050505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561031f5761031f610df0565b8082018082111561031f5761031f610df0565b5f60208284031215610e3a575f80fd5b815160ff81168114610b71575f80fd5b5f8251610e5b818460208701610b78565b6232323360e81b920191825250600301919050565b60018060a01b0384168152826020820152606060408201525f610e966060830184610b9a565b95945050505050565b5f60208284031215610eaf575f80fd5b8151610b7181610b3e565b828152604060208201525f610ed26040830184610b9a565b949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60018060a01b0385168152836020820152606060408201525f610f29606083018486610eda565b9695505050505050565b838152604060208201525f610e96604083018486610eda56fea264697066735822122033f247b6096f8270fdfdd0603d2f54b7b77c374b94f2edccb137845652a5885d64736f6c63430008180033000000000000000000000000723fe0a6415a25ec74cf0c4cf33f600f001d1aec