0x6080604052600436106102bb5760003560e01c806391d148541161016e578063cbf78f47116100cb578063dc92f8f01161007f578063e798784a11610064578063e798784a14610809578063edf26d9b14610829578063f2fde38b1461084957600080fd5b8063dc92f8f0146107de578063e76437ea146107f357600080fd5b8063d547741f116100b0578063d547741f14610788578063d616a25c146107a8578063dabc417a146107be57600080fd5b8063cbf78f4714610753578063ccb98ffc1461076857600080fd5b8063ad5c464811610122578063b6b9d02e11610107578063b6b9d02e146106e6578063b8df6de014610706578063bf431a051461072657600080fd5b8063ad5c46481461069e578063b5587657146106c657600080fd5b8063a217fddf11610153578063a217fddf14610647578063a39fac121461065c578063aa779a531461067157600080fd5b806391d14854146105e057806398ff76f61461063157600080fd5b806336eda2e11161021c5780635d467a56116101d057806369848c2f116101b557806369848c2f1461050357806378e979251461059057806382bfefc8146105a657600080fd5b80635d467a56146104c3578063646e66de146104e357600080fd5b806347e7ef241161020157806347e7ef241461046357806347ee03941461048b57806356df04eb146104ab57600080fd5b806336eda2e1146104235780633e0a322d1461044357600080fd5b80632ad29cee116102735780633197cbb6116102585780633197cbb6146103cb5780633544a864146103e157806336568abe1461040357600080fd5b80632ad29cee1461038b5780632f2ff15d146103ab57600080fd5b80631f85d8bc116102a45780631f85d8bc1461031757806323ce6aed14610337578063248a9ca31461035b57600080fd5b806301bf6648146102c057806301ffc9a7146102e2575b600080fd5b3480156102cc57600080fd5b506102e06102db36600461314d565b610869565b005b3480156102ee57600080fd5b506103026102fd366004613357565b610915565b60405190151581526020015b60405180910390f35b34801561032357600080fd5b506102e06103323660046133b2565b6109ae565b34801561034357600080fd5b5061034d60065481565b60405190815260200161030e565b34801561036757600080fd5b5061034d61037636600461331b565b60009081526020819052604090206001015490565b34801561039757600080fd5b506102e06103a636600461314d565b610c15565b3480156103b757600080fd5b506102e06103c6366004613334565b610d1d565b3480156103d757600080fd5b5061034d60055481565b3480156103ed57600080fd5b506103f6610d48565b60405161030e91906134b2565b34801561040f57600080fd5b506102e061041e366004613334565b610e02565b34801561042f57600080fd5b506102e061043e36600461331b565b610eb1565b34801561044f57600080fd5b506102e061045e36600461331b565b610f4e565b61047661047136600461319b565b610feb565b6040805192835260208301919091520161030e565b34801561049757600080fd5b506102e06104a636600461314d565b611281565b3480156104b757600080fd5b5061034d6305f5e10081565b3480156104cf57600080fd5b506102e06104de36600461331b565b611324565b3480156104ef57600080fd5b506102e06104fe36600461331b565b6113c1565b34801561050f57600080fd5b5061055b61051e36600461314d565b600b602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161030e565b34801561059c57600080fd5b5061034d60035481565b3480156105b257600080fd5b506105bb600081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105ec57600080fd5b506103026105fb366004613334565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561063d57600080fd5b5061034d60075481565b34801561065357600080fd5b5061034d600081565b34801561066857600080fd5b506103f661145e565b34801561067d57600080fd5b5061034d61068c36600461314d565b600a6020526000908152604090205481565b3480156106aa57600080fd5b506105bb73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156106d257600080fd5b506102e06106e136600461320f565b6114cd565b3480156106f257600080fd5b506102e061070136600461314d565b6115a5565b34801561071257600080fd5b506102e061072136600461320f565b6116fd565b34801561073257600080fd5b506009546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561075f57600080fd5b50600c5461034d565b34801561077457600080fd5b506102e061078336600461331b565b6117d5565b34801561079457600080fd5b506102e06107a3366004613334565b611872565b3480156107b457600080fd5b5061034d60045481565b3480156107ca57600080fd5b5061034d6107d9366004613168565b611898565b3480156107ea57600080fd5b506102e0611b69565b3480156107ff57600080fd5b5061034d60085481565b34801561081557600080fd5b506102e06108243660046131c5565b611c30565b34801561083557600080fd5b506105bb61084436600461331b565b611db5565b34801561085557600080fd5b506102e061086436600461314d565b611dec565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16610906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610911600d82611f5a565b5050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806109a857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600254610100900460ff166109c95760025460ff16156109cd565b303b155b610a59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108fd565b600254610100900460ff16158015610a9857600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16610b30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b60038890556004879055600586905560068590556008849055600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040516000907fdf1e840bea3b758df0b2119a3815ecb553e993c4f96ce378c1d8d92b8778fded908290a373ffffffffffffffffffffffffffffffffffffffff821615610bdc57610bdc82611dec565b8015610c0b57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050505050505050565b60095473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f20464f5242494444454e0000000000000000000000000000000000000000000060448201526064016108fd565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fdf1e840bea3b758df0b2119a3815ecb553e993c4f96ce378c1d8d92b8778fded90600090a350565b600082815260208190526040902060010154610d398133611f83565b610d438383612053565b505050565b6060610d54600d612143565b67ffffffffffffffff811115610d6c57610d6c61372b565b604051908082528060200260200182016040528015610d95578160200160208202803683370190505b50905060005b610da5600d612143565b811015610dfe57610db7600d8261214d565b828281518110610dc957610dc96136fc565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152610df781613665565b9050610d9b565b5090565b73ffffffffffffffffffffffffffffffffffffffff81163314610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108fd565b6109118282612159565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600455565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600355565b6000806002600154141561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108fd565b60026001556003544210156110cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6e6f742044726f702074696d650000000000000000000000000000000000000060448201526064016108fd565b60055415806110dd57506005544211155b611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6e6f742044726f702074696d650000000000000000000000000000000000000060448201526064016108fd565b6004544211806111595750611159600d33612210565b6111bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f44726f70207768697465206c6973742074696d6500000000000000000000000060448201526064016108fd565b73ffffffffffffffffffffffffffffffffffffffff84161561120f576111e5848461223f565b915061120f3360095473ffffffffffffffffffffffffffffffffffffffff878116929116856127cb565b34156112745761123373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23461223f565b6009549091506112599073ffffffffffffffffffffffffffffffffffffffff16826128ad565b80341115611274576112743361126f83346135ed565b6128ad565b6001805590939092509050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b610911600d826129b7565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff166113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600655565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600855565b6060600c8054806020026020016040519081016040528092919081815260200182805480156114c357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611498575b5050505050905090565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b60005b815181101561091157611593828281518110611586576115866136fc565b6020026020010151611281565b8061159d81613665565b915050611568565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1661163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b80610911336040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a082319060240160206040518083038186803b1580156116a757600080fd5b505afa1580156116bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116df9190613399565b73ffffffffffffffffffffffffffffffffffffffff841691906129d9565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b60005b8151811015610911576117c38282815181106117b6576117b66136fc565b6020026020010151610869565b806117cd81613665565b915050611798565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1661186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600555565b60008281526020819052604090206001015461188e8133611f83565b610d438383612159565b600060035442101580156118ae57506004544211155b80156118c257506118c0600d83612210565b155b156118cf575060006109a8565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b6020908152604091829020825160e081018452815481526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a0820181905260069092015460c0820152906119565760009150506109a8565b600061196f600754600654612a2f90919063ffffffff16565b905080611981576000925050506109a8565b606082015182516000916119959190612a2f565b9050806119a857600093505050506109a8565b6119b3600d86612210565b15806119c0575060045442115b80156119cf575060c083015115155b15611abf5760c0830151600090611a9890611a926305f5e100846370a08231335b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240160206040518083038186803b158015611a5457600080fd5b505afa158015611a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8c9190613399565b90612a3b565b90612a47565b9050818111611aa75780611aa9565b815b915081611abd5760009450505050506109a8565b505b80836040015111611ad4578260400151611ad6565b805b73ffffffffffffffffffffffffffffffffffffffff86166000908152600a60205260408120546008549293509091611b0d91612a2f565b9050828111611b1c5780611b1e565b825b925082611b325760009450505050506109a8565b60a0840151600090611b4c90611a92866305f5e100612a3b565b9050808311611b5b5782611b5d565b805b98975050505050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b60405133904780156108fc02916000818181858888f19350505050158015611c2d573d6000803e3d6000fd5b50565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600b6020526040902080548614611cf9578581555b84816001015414611d0c57600181018590555b83816002015414611d1f57600281018490555b82816005015414611d3257600581018390555b81816006015414611d4557600681018290555b6040805187815260208101879052908101859052606081018490526080810183905273ffffffffffffffffffffffffffffffffffffffff8816907fd6a94994bf20def57e38152684f72dd3215f37076c1bcc9286b7aafc207cbcf79060a00160405180910390a250505050505050565b600c8181548110611dc557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611e84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b73ffffffffffffffffffffffffffffffffffffffff8116611f27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108fd565b73ffffffffffffffffffffffffffffffffffffffff81163314611c2d57611f4f600033612159565b611c2d600082612a53565b6000611f7c8373ffffffffffffffffffffffffffffffffffffffff8416612a5d565b9392505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661091157611fd98173ffffffffffffffffffffffffffffffffffffffff166014612b50565b611fe4836020612b50565b604051602001611ff5929190613431565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526108fd9160040161350c565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109115760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556120e53390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006109a8825490565b6000611f7c8383612d93565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156109115760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611f7c565b60008082116122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6e656564205f616d6f756e74203e20300000000000000000000000000000000060448201526064016108fd565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b60205260409020600581015461233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f44726f70204e4f5420535550504f5254205448495320544f4b454e000000000060448201526064016108fd565b6000612353600754600654612a2f90919063ffffffff16565b9050806123bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f44726f702049532053544f50000000000000000000000000000000000000000060448201526064016108fd565b600382015482546000916123d09190612a2f565b905080612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f546f6b656e2053544f500000000000000000000000000000000000000000000060448201526064016108fd565b6004544211801561244d5750600683015415155b8015612457575060005b156124f857600683015460009061247c90611a926305f5e100846370a08231336119f0565b905081811161248b578061248d565b815b9150816124f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f7420546f6b656e000000000000000000000000000000000000000000000060448201526064016108fd565b505b8083600201541161250d57826002015461250f565b805b336000908152600a6020526040812054600854929350909161253091612a2f565b905082811161253f5780612541565b825b9250826125aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f557365722053544f50000000000000000000000000000000000000000000000060448201526064016108fd565b8582116125b757816125b9565b855b955060006125dc6305f5e100611a9287600501548a612a3b90919063ffffffff16565b90508381111561260757506005840154839061260090611a92836305f5e100612a3b565b955061268c565b336000908152600a602052604090205487965061268c57846001015486101561268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d494e2044726f7020414d4f554e54000000000000000000000000000000000060448201526064016108fd565b6007546126999082612dbd565b60075560048501546126ab9082612dbd565b600486015560038501546126bf9087612dbd565b6003860155336000908152600a602052604090205461273357600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555b336000908152600a602052604090205461274d9082612dbd565b336000908152600a60205260409020556006546007541061276d57426005555b6040805187815260208101839052339173ffffffffffffffffffffffffffffffffffffffff8b16917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3505050505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526128a79085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612dc9565b50505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516128e49190613415565b60006040518083038185875af1925050503d8060008114612921576040519150601f19603f3d011682016040523d82523d6000602084013e612926565b606091505b5050905080610d43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201527f4c4544000000000000000000000000000000000000000000000000000000000060648201526084016108fd565b6000611f7c8373ffffffffffffffffffffffffffffffffffffffff8416612ed5565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610d439084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612825565b6000611f7c82846135ed565b6000611f7c82846135b0565b6000611f7c8284613575565b6109118282612053565b60008181526001830160205260408120548015612b46576000612a816001836135ed565b8554909150600090612a95906001906135ed565b9050818114612afa576000866000018281548110612ab557612ab56136fc565b9060005260206000200154905080876000018481548110612ad857612ad86136fc565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b0b57612b0b6136cd565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109a8565b60009150506109a8565b60606000612b5f8360026135b0565b612b6a90600261355d565b67ffffffffffffffff811115612b8257612b8261372b565b6040519080825280601f01601f191660200182016040528015612bac576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612be357612be36136fc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612c4657612c466136fc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612c828460026135b0565b612c8d90600161355d565b90505b6001811115612d2a577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612cce57612cce6136fc565b1a60f81b828281518110612ce457612ce46136fc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612d2381613630565b9050612c90565b508315611f7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108fd565b6000826000018281548110612daa57612daa6136fc565b9060005260206000200154905092915050565b6000611f7c828461355d565b6000612e2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612f249092919063ffffffff16565b805190915015610d435780806020019051810190612e4991906132f9565b610d43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108fd565b6000818152600183016020526040812054612f1c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109a8565b5060006109a8565b6060612f338484600085612f3b565b949350505050565b606082471015612fcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108fd565b73ffffffffffffffffffffffffffffffffffffffff85163b61304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108fd565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130749190613415565b60006040518083038185875af1925050503d80600081146130b1576040519150601f19603f3d011682016040523d82523d6000602084013e6130b6565b606091505b50915091506130c68282866130d1565b979650505050505050565b606083156130e0575081611f7c565b8251156130f05782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd919061350c565b803573ffffffffffffffffffffffffffffffffffffffff8116811461314857600080fd5b919050565b60006020828403121561315f57600080fd5b611f7c82613124565b6000806040838503121561317b57600080fd5b61318483613124565b915061319260208401613124565b90509250929050565b600080604083850312156131ae57600080fd5b6131b783613124565b946020939093013593505050565b60008060008060008060c087890312156131de57600080fd5b6131e787613124565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b6000602080838503121561322257600080fd5b823567ffffffffffffffff8082111561323a57600080fd5b818501915085601f83011261324e57600080fd5b8135818111156132605761326061372b565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156132a3576132a361372b565b604052828152858101935084860182860187018a10156132c257600080fd5b600095505b838610156132ec576132d881613124565b8552600195909501949386019386016132c7565b5098975050505050505050565b60006020828403121561330b57600080fd5b81518015158114611f7c57600080fd5b60006020828403121561332d57600080fd5b5035919050565b6000806040838503121561334757600080fd5b8235915061319260208401613124565b60006020828403121561336957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b6000602082840312156133ab57600080fd5b5051919050565b600080600080600080600060e0888a0312156133cd57600080fd5b87359650602088013595506040880135945060608801359350608088013592506133f960a08901613124565b915061340760c08901613124565b905092959891949750929550565b60008251613427818460208701613604565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613469816017850160208801613604565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516134a6816028840160208801613604565b01602801949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561350057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016134ce565b50909695505050505050565b602081526000825180602084015261352b816040850160208701613604565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156135705761357061369e565b500190565b6000826135ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135e8576135e861369e565b500290565b6000828210156135ff576135ff61369e565b500390565b60005b8381101561361f578181015183820152602001613607565b838111156128a75750506000910152565b60008161363f5761363f61369e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136975761369761369e565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212209b91c52611f8a8a3281d032182885def6b626d0d2fa2602f53018d771b64acc864736f6c63430008070033
0x60806040523480156200001157600080fd5b50600180556200002360003362000029565b620000d9565b62000035828262000039565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000035576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620000953390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61379080620000e96000396000f3fe6080604052600436106102bb5760003560e01c806391d148541161016e578063cbf78f47116100cb578063dc92f8f01161007f578063e798784a11610064578063e798784a14610809578063edf26d9b14610829578063f2fde38b1461084957600080fd5b8063dc92f8f0146107de578063e76437ea146107f357600080fd5b8063d547741f116100b0578063d547741f14610788578063d616a25c146107a8578063dabc417a146107be57600080fd5b8063cbf78f4714610753578063ccb98ffc1461076857600080fd5b8063ad5c464811610122578063b6b9d02e11610107578063b6b9d02e146106e6578063b8df6de014610706578063bf431a051461072657600080fd5b8063ad5c46481461069e578063b5587657146106c657600080fd5b8063a217fddf11610153578063a217fddf14610647578063a39fac121461065c578063aa779a531461067157600080fd5b806391d14854146105e057806398ff76f61461063157600080fd5b806336eda2e11161021c5780635d467a56116101d057806369848c2f116101b557806369848c2f1461050357806378e979251461059057806382bfefc8146105a657600080fd5b80635d467a56146104c3578063646e66de146104e357600080fd5b806347e7ef241161020157806347e7ef241461046357806347ee03941461048b57806356df04eb146104ab57600080fd5b806336eda2e1146104235780633e0a322d1461044357600080fd5b80632ad29cee116102735780633197cbb6116102585780633197cbb6146103cb5780633544a864146103e157806336568abe1461040357600080fd5b80632ad29cee1461038b5780632f2ff15d146103ab57600080fd5b80631f85d8bc116102a45780631f85d8bc1461031757806323ce6aed14610337578063248a9ca31461035b57600080fd5b806301bf6648146102c057806301ffc9a7146102e2575b600080fd5b3480156102cc57600080fd5b506102e06102db36600461314d565b610869565b005b3480156102ee57600080fd5b506103026102fd366004613357565b610915565b60405190151581526020015b60405180910390f35b34801561032357600080fd5b506102e06103323660046133b2565b6109ae565b34801561034357600080fd5b5061034d60065481565b60405190815260200161030e565b34801561036757600080fd5b5061034d61037636600461331b565b60009081526020819052604090206001015490565b34801561039757600080fd5b506102e06103a636600461314d565b610c15565b3480156103b757600080fd5b506102e06103c6366004613334565b610d1d565b3480156103d757600080fd5b5061034d60055481565b3480156103ed57600080fd5b506103f6610d48565b60405161030e91906134b2565b34801561040f57600080fd5b506102e061041e366004613334565b610e02565b34801561042f57600080fd5b506102e061043e36600461331b565b610eb1565b34801561044f57600080fd5b506102e061045e36600461331b565b610f4e565b61047661047136600461319b565b610feb565b6040805192835260208301919091520161030e565b34801561049757600080fd5b506102e06104a636600461314d565b611281565b3480156104b757600080fd5b5061034d6305f5e10081565b3480156104cf57600080fd5b506102e06104de36600461331b565b611324565b3480156104ef57600080fd5b506102e06104fe36600461331b565b6113c1565b34801561050f57600080fd5b5061055b61051e36600461314d565b600b602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161030e565b34801561059c57600080fd5b5061034d60035481565b3480156105b257600080fd5b506105bb600081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105ec57600080fd5b506103026105fb366004613334565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561063d57600080fd5b5061034d60075481565b34801561065357600080fd5b5061034d600081565b34801561066857600080fd5b506103f661145e565b34801561067d57600080fd5b5061034d61068c36600461314d565b600a6020526000908152604090205481565b3480156106aa57600080fd5b506105bb73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156106d257600080fd5b506102e06106e136600461320f565b6114cd565b3480156106f257600080fd5b506102e061070136600461314d565b6115a5565b34801561071257600080fd5b506102e061072136600461320f565b6116fd565b34801561073257600080fd5b506009546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561075f57600080fd5b50600c5461034d565b34801561077457600080fd5b506102e061078336600461331b565b6117d5565b34801561079457600080fd5b506102e06107a3366004613334565b611872565b3480156107b457600080fd5b5061034d60045481565b3480156107ca57600080fd5b5061034d6107d9366004613168565b611898565b3480156107ea57600080fd5b506102e0611b69565b3480156107ff57600080fd5b5061034d60085481565b34801561081557600080fd5b506102e06108243660046131c5565b611c30565b34801561083557600080fd5b506105bb61084436600461331b565b611db5565b34801561085557600080fd5b506102e061086436600461314d565b611dec565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16610906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610911600d82611f5a565b5050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806109a857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600254610100900460ff166109c95760025460ff16156109cd565b303b155b610a59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108fd565b600254610100900460ff16158015610a9857600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16610b30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b60038890556004879055600586905560068590556008849055600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040516000907fdf1e840bea3b758df0b2119a3815ecb553e993c4f96ce378c1d8d92b8778fded908290a373ffffffffffffffffffffffffffffffffffffffff821615610bdc57610bdc82611dec565b8015610c0b57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050505050505050565b60095473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f20464f5242494444454e0000000000000000000000000000000000000000000060448201526064016108fd565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fdf1e840bea3b758df0b2119a3815ecb553e993c4f96ce378c1d8d92b8778fded90600090a350565b600082815260208190526040902060010154610d398133611f83565b610d438383612053565b505050565b6060610d54600d612143565b67ffffffffffffffff811115610d6c57610d6c61372b565b604051908082528060200260200182016040528015610d95578160200160208202803683370190505b50905060005b610da5600d612143565b811015610dfe57610db7600d8261214d565b828281518110610dc957610dc96136fc565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152610df781613665565b9050610d9b565b5090565b73ffffffffffffffffffffffffffffffffffffffff81163314610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108fd565b6109118282612159565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600455565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600355565b6000806002600154141561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108fd565b60026001556003544210156110cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6e6f742044726f702074696d650000000000000000000000000000000000000060448201526064016108fd565b60055415806110dd57506005544211155b611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6e6f742044726f702074696d650000000000000000000000000000000000000060448201526064016108fd565b6004544211806111595750611159600d33612210565b6111bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f44726f70207768697465206c6973742074696d6500000000000000000000000060448201526064016108fd565b73ffffffffffffffffffffffffffffffffffffffff84161561120f576111e5848461223f565b915061120f3360095473ffffffffffffffffffffffffffffffffffffffff878116929116856127cb565b34156112745761123373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23461223f565b6009549091506112599073ffffffffffffffffffffffffffffffffffffffff16826128ad565b80341115611274576112743361126f83346135ed565b6128ad565b6001805590939092509050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b610911600d826129b7565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff166113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600655565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600855565b6060600c8054806020026020016040519081016040528092919081815260200182805480156114c357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611498575b5050505050905090565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b60005b815181101561091157611593828281518110611586576115866136fc565b6020026020010151611281565b8061159d81613665565b915050611568565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1661163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b80610911336040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a082319060240160206040518083038186803b1580156116a757600080fd5b505afa1580156116bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116df9190613399565b73ffffffffffffffffffffffffffffffffffffffff841691906129d9565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b60005b8151811015610911576117c38282815181106117b6576117b66136fc565b6020026020010151610869565b806117cd81613665565b915050611798565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1661186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b600555565b60008281526020819052604090206001015461188e8133611f83565b610d438383612159565b600060035442101580156118ae57506004544211155b80156118c257506118c0600d83612210565b155b156118cf575060006109a8565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b6020908152604091829020825160e081018452815481526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a0820181905260069092015460c0820152906119565760009150506109a8565b600061196f600754600654612a2f90919063ffffffff16565b905080611981576000925050506109a8565b606082015182516000916119959190612a2f565b9050806119a857600093505050506109a8565b6119b3600d86612210565b15806119c0575060045442115b80156119cf575060c083015115155b15611abf5760c0830151600090611a9890611a926305f5e100846370a08231335b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240160206040518083038186803b158015611a5457600080fd5b505afa158015611a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8c9190613399565b90612a3b565b90612a47565b9050818111611aa75780611aa9565b815b915081611abd5760009450505050506109a8565b505b80836040015111611ad4578260400151611ad6565b805b73ffffffffffffffffffffffffffffffffffffffff86166000908152600a60205260408120546008549293509091611b0d91612a2f565b9050828111611b1c5780611b1e565b825b925082611b325760009450505050506109a8565b60a0840151600090611b4c90611a92866305f5e100612a3b565b9050808311611b5b5782611b5d565b805b98975050505050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b60405133904780156108fc02916000818181858888f19350505050158015611c2d573d6000803e3d6000fd5b50565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600b6020526040902080548614611cf9578581555b84816001015414611d0c57600181018590555b83816002015414611d1f57600281018490555b82816005015414611d3257600581018390555b81816006015414611d4557600681018290555b6040805187815260208101879052908101859052606081018490526080810183905273ffffffffffffffffffffffffffffffffffffffff8816907fd6a94994bf20def57e38152684f72dd3215f37076c1bcc9286b7aafc207cbcf79060a00160405180910390a250505050505050565b600c8181548110611dc557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16611e84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b73ffffffffffffffffffffffffffffffffffffffff8116611f27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108fd565b73ffffffffffffffffffffffffffffffffffffffff81163314611c2d57611f4f600033612159565b611c2d600082612a53565b6000611f7c8373ffffffffffffffffffffffffffffffffffffffff8416612a5d565b9392505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661091157611fd98173ffffffffffffffffffffffffffffffffffffffff166014612b50565b611fe4836020612b50565b604051602001611ff5929190613431565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526108fd9160040161350c565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166109115760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556120e53390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006109a8825490565b6000611f7c8383612d93565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156109115760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611f7c565b60008082116122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6e656564205f616d6f756e74203e20300000000000000000000000000000000060448201526064016108fd565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b60205260409020600581015461233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f44726f70204e4f5420535550504f5254205448495320544f4b454e000000000060448201526064016108fd565b6000612353600754600654612a2f90919063ffffffff16565b9050806123bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f44726f702049532053544f50000000000000000000000000000000000000000060448201526064016108fd565b600382015482546000916123d09190612a2f565b905080612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f546f6b656e2053544f500000000000000000000000000000000000000000000060448201526064016108fd565b6004544211801561244d5750600683015415155b8015612457575060005b156124f857600683015460009061247c90611a926305f5e100846370a08231336119f0565b905081811161248b578061248d565b815b9150816124f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f7420546f6b656e000000000000000000000000000000000000000000000060448201526064016108fd565b505b8083600201541161250d57826002015461250f565b805b336000908152600a6020526040812054600854929350909161253091612a2f565b905082811161253f5780612541565b825b9250826125aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f557365722053544f50000000000000000000000000000000000000000000000060448201526064016108fd565b8582116125b757816125b9565b855b955060006125dc6305f5e100611a9287600501548a612a3b90919063ffffffff16565b90508381111561260757506005840154839061260090611a92836305f5e100612a3b565b955061268c565b336000908152600a602052604090205487965061268c57846001015486101561268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d494e2044726f7020414d4f554e54000000000000000000000000000000000060448201526064016108fd565b6007546126999082612dbd565b60075560048501546126ab9082612dbd565b600486015560038501546126bf9087612dbd565b6003860155336000908152600a602052604090205461273357600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555b336000908152600a602052604090205461274d9082612dbd565b336000908152600a60205260409020556006546007541061276d57426005555b6040805187815260208101839052339173ffffffffffffffffffffffffffffffffffffffff8b16917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3505050505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526128a79085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612dc9565b50505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516128e49190613415565b60006040518083038185875af1925050503d8060008114612921576040519150601f19603f3d011682016040523d82523d6000602084013e612926565b606091505b5050905080610d43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201527f4c4544000000000000000000000000000000000000000000000000000000000060648201526084016108fd565b6000611f7c8373ffffffffffffffffffffffffffffffffffffffff8416612ed5565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610d439084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612825565b6000611f7c82846135ed565b6000611f7c82846135b0565b6000611f7c8284613575565b6109118282612053565b60008181526001830160205260408120548015612b46576000612a816001836135ed565b8554909150600090612a95906001906135ed565b9050818114612afa576000866000018281548110612ab557612ab56136fc565b9060005260206000200154905080876000018481548110612ad857612ad86136fc565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b0b57612b0b6136cd565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109a8565b60009150506109a8565b60606000612b5f8360026135b0565b612b6a90600261355d565b67ffffffffffffffff811115612b8257612b8261372b565b6040519080825280601f01601f191660200182016040528015612bac576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612be357612be36136fc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612c4657612c466136fc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612c828460026135b0565b612c8d90600161355d565b90505b6001811115612d2a577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612cce57612cce6136fc565b1a60f81b828281518110612ce457612ce46136fc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612d2381613630565b9050612c90565b508315611f7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108fd565b6000826000018281548110612daa57612daa6136fc565b9060005260206000200154905092915050565b6000611f7c828461355d565b6000612e2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612f249092919063ffffffff16565b805190915015610d435780806020019051810190612e4991906132f9565b610d43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108fd565b6000818152600183016020526040812054612f1c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109a8565b5060006109a8565b6060612f338484600085612f3b565b949350505050565b606082471015612fcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108fd565b73ffffffffffffffffffffffffffffffffffffffff85163b61304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108fd565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130749190613415565b60006040518083038185875af1925050503d80600081146130b1576040519150601f19603f3d011682016040523d82523d6000602084013e6130b6565b606091505b50915091506130c68282866130d1565b979650505050505050565b606083156130e0575081611f7c565b8251156130f05782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd919061350c565b803573ffffffffffffffffffffffffffffffffffffffff8116811461314857600080fd5b919050565b60006020828403121561315f57600080fd5b611f7c82613124565b6000806040838503121561317b57600080fd5b61318483613124565b915061319260208401613124565b90509250929050565b600080604083850312156131ae57600080fd5b6131b783613124565b946020939093013593505050565b60008060008060008060c087890312156131de57600080fd5b6131e787613124565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b6000602080838503121561322257600080fd5b823567ffffffffffffffff8082111561323a57600080fd5b818501915085601f83011261324e57600080fd5b8135818111156132605761326061372b565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156132a3576132a361372b565b604052828152858101935084860182860187018a10156132c257600080fd5b600095505b838610156132ec576132d881613124565b8552600195909501949386019386016132c7565b5098975050505050505050565b60006020828403121561330b57600080fd5b81518015158114611f7c57600080fd5b60006020828403121561332d57600080fd5b5035919050565b6000806040838503121561334757600080fd5b8235915061319260208401613124565b60006020828403121561336957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611f7c57600080fd5b6000602082840312156133ab57600080fd5b5051919050565b600080600080600080600060e0888a0312156133cd57600080fd5b87359650602088013595506040880135945060608801359350608088013592506133f960a08901613124565b915061340760c08901613124565b905092959891949750929550565b60008251613427818460208701613604565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613469816017850160208801613604565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516134a6816028840160208801613604565b01602801949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561350057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016134ce565b50909695505050505050565b602081526000825180602084015261352b816040850160208701613604565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156135705761357061369e565b500190565b6000826135ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135e8576135e861369e565b500290565b6000828210156135ff576135ff61369e565b500390565b60005b8381101561361f578181015183820152602001613607565b838111156128a75750506000910152565b60008161363f5761363f61369e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136975761369761369e565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212209b91c52611f8a8a3281d032182885def6b626d0d2fa2602f53018d771b64acc864736f6c63430008070033