60806040523480156200001157600080fd5b5060405162002ad938038062002ad9833981016040819052620000349162000302565b6000620000428382620003fb565b506001620000518282620003fb565b506200005f336000620000a8565b6200006c336001620000a8565b62000079336002620000a8565b62000086336003620000a8565b62000093336004620000a8565b620000a0336005620000a8565b5050620004ef565b6001600160a01b038216620001045760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064015b60405180910390fd5b6000818152600260205260409020546001600160a01b0316156200016b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401620000fb565b6001600160a01b038216600090815260036020526040812080546001929062000196908490620004c7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a460408051828152600160208201526001600160a01b0384169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026557600080fd5b81516001600160401b03808211156200028257620002826200023d565b604051601f8301601f19908116603f01168101908282118183101715620002ad57620002ad6200023d565b81604052838152602092508683858801011115620002ca57600080fd5b600091505b83821015620002ee5785820183015181830184015290820190620002cf565b600093810190920192909252949350505050565b600080604083850312156200031657600080fd5b82516001600160401b03808211156200032e57600080fd5b6200033c8683870162000253565b935060208501519150808211156200035357600080fd5b50620003628582860162000253565b9150509250929050565b600181811c908216806200038157607f821691505b602082108103620003a257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003f657600081815260208120601f850160051c81016020861015620003d15750805b601f850160051c820191505b81811015620003f257828155600101620003dd565b5050505b505050565b81516001600160401b038111156200041757620004176200023d565b6200042f816200042884546200036c565b84620003a8565b602080601f8311600181146200046757600084156200044e5750858301515b600019600386901b1c1916600185901b178555620003f2565b600085815260208120601f198616915b82811015620004985788860151825594840194600190910190840162000477565b5085821015620004b75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620004e957634e487b7160e01b600052601160045260246000fd5b92915050565b6125da80620004ff6000396000f3fe608060405234801561001057600080fd5b50600436106101815760003560e01c806342966c68116100d8578063a22cb4651161008c578063c87b56dd11610066578063c87b56dd14610330578063e985e9c514610343578063f242432a1461037f57600080fd5b8063a22cb465146102f7578063a9059cbb1461030a578063b88d4fde1461031d57600080fd5b80636352211e116100bd5780636352211e146102c957806370a08231146102dc57806395d89b41146102ef57600080fd5b806342966c68146102965780634e1273f4146102a957600080fd5b80630e89341c1161013a5780632eb2c2d6116101145780632eb2c2d61461025d57806340c10f191461027057806342842e0e1461028357600080fd5b80630e89341c1461022457806320bccdd51461023757806323b872dd1461024a57600080fd5b806306fdde031161016b57806306fdde03146101cf578063081812fc146101e4578063095ea7b31461020f57600080fd5b8062fdd58e1461018657806301ffc9a7146101ac575b600080fd5b610199610194366004611e6f565b610392565b6040519081526020015b60405180910390f35b6101bf6101ba366004611eaf565b61044c565b60405190151581526020016101a3565b6101d761054f565b6040516101a39190611f1c565b6101f76101f2366004611f2f565b6105e1565b6040516001600160a01b0390911681526020016101a3565b61022261021d366004611e6f565b610676565b005b6101d7610232366004611f2f565b6107a7565b6101bf610245366004611f48565b6107c8565b610222610258366004611f48565b6108a2565b61022261026b3660046120ca565b61098a565b61022261027e366004611e6f565b610c99565b610222610291366004611f48565b610ca7565b6102226102a4366004611f2f565b610cc2565b6102bc6102b7366004612174565b610d49565b6040516101a3919061226f565b6101f76102d7366004611f2f565b610e87565b6101996102ea366004612282565b610f12565b6101d7610fac565b61022261030536600461229d565b610fbb565b610222610318366004611e6f565b610fc6565b61022261032b3660046122d9565b61108a565b6101d761033e366004611f2f565b611173565b6101bf610351366004612341565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61022261038d366004612374565b61125c565b60006001600160a01b0383166104155760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b826001600160a01b031661042883610e87565b6001600160a01b03161461043d576000610440565b60015b60ff1690505b92915050565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104af57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806104e357506001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000145b8061051757506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061044657507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610446565b60606000805461055e906123d9565b80601f016020809104026020016040519081016040528092919081815260200182805461058a906123d9565b80156105d75780601f106105ac576101008083540402835291602001916105d7565b820191906000526020600020905b8154815290600101906020018083116105ba57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661065a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161040c565b506000908152600460205260409020546001600160a01b031690565b600061068182610e87565b9050806001600160a01b0316836001600160a01b03160361070a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161040c565b336001600160a01b038216148061072657506107268133610351565b6107985760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161040c565b6107a283836113ac565b505050565b60606040518060600160405280602f8152602001612551602f913992915050565b6040516001600160a01b03848116602483015283166044820152606481018290526000908190309060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052516108569190612413565b600060405180830381855af49150503d8060008114610891576040519150601f19603f3d011682016040523d82523d6000602084013e610896565b606091505b50909695505050505050565b6108ad335b82611427565b6109135760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161040c565b61091e83838361151e565b816001600160a01b0316836001600160a01b03166109393390565b6001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6284600160405161097d929190918252602082015260400190565b60405180910390a4505050565b8151835114610a015760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d61746368000000000000000000000000000000000000000000000000606482015260840161040c565b6001600160a01b038416610a7d5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161040c565b6001600160a01b0384163b15610afb5760405162461bcd60e51b815260206004820152602860248201527f6e6f7420737570706f7274206261746368207472616e7366657220746f20612060448201527f636f6e7472616374000000000000000000000000000000000000000000000000606482015260840161040c565b3360005b8451811015610c39576000858281518110610b1c57610b1c61242f565b602002602001015190506000858381518110610b3a57610b3a61242f565b60200260200101519050610b4e8483611427565b610bc05760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000606482015260840161040c565b80600114610c1b5760405162461bcd60e51b815260206004820152602260248201527f7468697320697320646567726164656420455243313135352c206f6e6c79204e604482015261119560f21b606482015260840161040c565b610c2689898461151e565b505080610c329061245b565b9050610aff565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610c89929190612474565b60405180910390a4505050505050565b610ca382826116f8565b5050565b61091e8383836040518060200160405280600081525061108a565b610ccb336108a7565b610d3d5760405162461bcd60e51b815260206004820152602960248201527f7472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f7665640000000000000000000000000000000000000000000000606482015260840161040c565b610d4681611712565b50565b60608151835114610dc25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d617463680000000000000000000000000000000000000000000000606482015260840161040c565b6000835167ffffffffffffffff811115610dde57610dde611f84565b604051908082528060200260200182016040528015610e07578160200160208202803683370190505b50905060005b8451811015610e7f57610e52858281518110610e2b57610e2b61242f565b6020026020010151858381518110610e4557610e4561242f565b6020026020010151610392565b828281518110610e6457610e6461242f565b6020908102919091010152610e788161245b565b9050610e0d565b509392505050565b6000818152600260205260408120546001600160a01b0316806104465760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e0000000000000000000000000000000000000000000000606482015260840161040c565b60006001600160a01b038216610f905760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f206164647265737300000000000000000000000000000000000000000000606482015260840161040c565b506001600160a01b031660009081526003602052604090205490565b60606001805461055e906123d9565b610ca3338383611804565b33610fd18183611427565b6110375760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161040c565b61104281848461151e565b60408051838152600160208201526001600160a01b03808616929084169182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910161097d565b6110943383611427565b6110fa5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161040c565b611106848484846118d2565b826001600160a01b0316846001600160a01b03166111213390565b6001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62856001604051611165929190918252602082015260400190565b60405180910390a450505050565b6000818152600260205260409020546060906001600160a01b03166112005760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000606482015260840161040c565b600061120a611956565b9050600081511161122a5760405180602001604052806000815250611255565b8061123484611976565b6040516020016112459291906124a2565b6040516020818303038152906040525b9392505050565b816001146112b75760405162461bcd60e51b815260206004820152602260248201527f7468697320697320646567726164656420455243313135352c206f6e6c79204e604482015261119560f21b606482015260840161040c565b6112c13384611427565b6113335760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000606482015260840161040c565b61133f858585846118d2565b836001600160a01b0316856001600160a01b031661135a3390565b6001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161139d929190918252602082015260400190565b60405180910390a45050505050565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906113ee82610e87565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166114a05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161040c565b60006114ab83610e87565b9050806001600160a01b0316846001600160a01b031614806114f257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806115165750836001600160a01b031661150b846105e1565b6001600160a01b0316145b949350505050565b826001600160a01b031661153182610e87565b6001600160a01b0316146115ad5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e6572000000000000000000000000000000000000000000000000000000606482015260840161040c565b6001600160a01b0382166116285760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161040c565b6116336000826113ac565b6001600160a01b038316600090815260036020526040812080546001929061165c9084906124d1565b90915550506001600160a01b038216600090815260036020526040812080546001929061168a9084906124e4565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ca3828260405180602001604052806000815250611a16565b600061171d82610e87565b905061172a6000836113ac565b6001600160a01b03811660009081526003602052604081208054600192906117539084906124d1565b9091555050600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a460408051838152600160208201526000916001600160a01b0384169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a45050565b816001600160a01b0316836001600160a01b0316036118655760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161040c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6118dd84848461151e565b6118e984848484611a94565b6119505760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161040c565b50505050565b606060405180606001604052806025815260200161258060259139905090565b6060600061198383611be0565b600101905060008167ffffffffffffffff8111156119a3576119a3611f84565b6040519080825280601f01601f1916602001820160405280156119cd576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846119d757509392505050565b611a208383611cc2565b611a2d6000848484611a94565b6107a25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161040c565b60006001600160a01b0384163b15611bd557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ad89033908990889088906004016124f7565b6020604051808303816000875af1925050508015611b13575060408051601f3d908101601f19168201909252611b1091810190612533565b60015b611bbb573d808015611b41576040519150601f19603f3d011682016040523d82523d6000602084013e611b46565b606091505b508051600003611bb35760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161040c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611516565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611c29577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611c55576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611c7357662386f26fc10000830492506010015b6305f5e1008310611c8b576305f5e100830492506008015b6127108310611c9f57612710830492506004015b60648310611cb1576064830492506002015b600a83106104465760010192915050565b6001600160a01b038216611d185760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161040c565b6000818152600260205260409020546001600160a01b031615611d7d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161040c565b6001600160a01b0382166000908152600360205260408120805460019290611da69084906124e4565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a460408051828152600160208201526001600160a01b0384169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291016117f8565b80356001600160a01b0381168114611e6a57600080fd5b919050565b60008060408385031215611e8257600080fd5b611e8b83611e53565b946020939093013593505050565b6001600160e01b031981168114610d4657600080fd5b600060208284031215611ec157600080fd5b813561125581611e99565b60005b83811015611ee7578181015183820152602001611ecf565b50506000910152565b60008151808452611f08816020860160208601611ecc565b601f01601f19169290920160200192915050565b6020815260006112556020830184611ef0565b600060208284031215611f4157600080fd5b5035919050565b600080600060608486031215611f5d57600080fd5b611f6684611e53565b9250611f7460208501611e53565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611fc357611fc3611f84565b604052919050565b600067ffffffffffffffff821115611fe557611fe5611f84565b5060051b60200190565b600082601f83011261200057600080fd5b8135602061201561201083611fcb565b611f9a565b82815260059290921b8401810191818101908684111561203457600080fd5b8286015b8481101561204f5780358352918301918301612038565b509695505050505050565b600082601f83011261206b57600080fd5b813567ffffffffffffffff81111561208557612085611f84565b612098601f8201601f1916602001611f9a565b8181528460208386010111156120ad57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156120e257600080fd5b6120eb86611e53565b94506120f960208701611e53565b9350604086013567ffffffffffffffff8082111561211657600080fd5b61212289838a01611fef565b9450606088013591508082111561213857600080fd5b61214489838a01611fef565b9350608088013591508082111561215a57600080fd5b506121678882890161205a565b9150509295509295909350565b6000806040838503121561218757600080fd5b823567ffffffffffffffff8082111561219f57600080fd5b818501915085601f8301126121b357600080fd5b813560206121c361201083611fcb565b82815260059290921b840181019181810190898411156121e257600080fd5b948201945b83861015612207576121f886611e53565b825294820194908201906121e7565b9650508601359250508082111561221d57600080fd5b5061222a85828601611fef565b9150509250929050565b600081518084526020808501945080840160005b8381101561226457815187529582019590820190600101612248565b509495945050505050565b6020815260006112556020830184612234565b60006020828403121561229457600080fd5b61125582611e53565b600080604083850312156122b057600080fd5b6122b983611e53565b9150602083013580151581146122ce57600080fd5b809150509250929050565b600080600080608085870312156122ef57600080fd5b6122f885611e53565b935061230660208601611e53565b925060408501359150606085013567ffffffffffffffff81111561232957600080fd5b6123358782880161205a565b91505092959194509250565b6000806040838503121561235457600080fd5b61235d83611e53565b915061236b60208401611e53565b90509250929050565b600080600080600060a0868803121561238c57600080fd5b61239586611e53565b94506123a360208701611e53565b93506040860135925060608601359150608086013567ffffffffffffffff8111156123cd57600080fd5b6121678882890161205a565b600181811c908216806123ed57607f821691505b60208210810361240d57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251612425818460208701611ecc565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161246d5761246d612445565b5060010190565b6040815260006124876040830185612234565b82810360208401526124998185612234565b95945050505050565b600083516124b4818460208801611ecc565b8351908301906124c8818360208801611ecc565b01949350505050565b8181038181111561044657610446612445565b8082018082111561044657610446612445565b60006001600160a01b038087168352808616602084015250836040830152608060608301526125296080830184611ef0565b9695505050505050565b60006020828403121561254557600080fd5b815161125581611e9956fe68747470733a2f2f74686c7563792e6769746c61622e696f2f64657674696e792f313135352f7b69647d2e6a736f6e68747470733a2f2f74686c7563792e6769746c61622e696f2f64657674696e792f3732312fa2646970667358221220a55e710d3433a39b6640b1a8d13890e693c9c39e6df119259ec5606a6bc1f80964736f6c63430008110033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000011546573744552433732314d6978313135350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004544d697800000000000000000000000000000000000000000000000000000000